S3バケットポリシーが対象に関連付けられていない

必要なバケットポリシーを正しい対象に関連付けてください。

説明

バケットポリシーで定義したアクセス制御は、対象のバケットに関連付ける必要があります。ポリシーがないだけでバケットが公開されるわけではなく、IAM権限や他のS3制御も適用されます。

想定される影響

バケット参照が不正だと、デプロイが失敗したり、意図した制御が対象バケットに適用されなかったりするおそれがあります。

対処方法

AWS::S3::BucketPolicyのBucketに対象バケットの!Refを使い、ポリシーのリソースARNとプリンシパルも確認してください。必要なアクセスだけを許可してください。

例

存在しないバケットの参照と、正しい関連付けを比較します。BucketReaderRoleは承認済みのロールとして別途定義し、バケット名は実際の環境に合わせて変更してください。

変更前

yaml
Resources:
  S3Bucket3:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: docexamplebucket1

  SampleBucketPolicy5:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      Bucket:
        Ref: docexamplebucketfail
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Action:
              - 's3:GetObject'
            Effect: Allow
            Resource: !Sub '${S3Bucket3.Arn}/*'
            Principal:
              AWS: !GetAtt BucketReaderRole.Arn

変更後

yaml
Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: docexamplebucket

  SampleBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref S3Bucket
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Action:
              - 's3:GetObject'
            Effect: Allow
            Resource: !Sub '${S3Bucket.Arn}/*'
            Principal:
              AWS: !GetAtt BucketReaderRole.Arn

参考資料