説明
バケットポリシーで定義したアクセス制御は、対象のバケットに関連付ける必要があります。ポリシーがないだけでバケットが公開されるわけではなく、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