説明
AccessControl: PublicReadのバケットACLが有効な場合、匿名の呼び出しを含むすべてのユーザーがバケット内のオブジェクト一覧を取得できる可能性があります。バケットのREADとオブジェクトの内容を読む権限は異なるため、各オブジェクトの読み取り権限も確認してください。
新規バケットは既定でACLが無効になり、公開アクセスもブロックされます。実際の公開状態はObject Ownership、アカウント・バケットのパブリックアクセスブロック、全体のポリシーによって決まります。
想定される影響
- オブジェクト名やパスから、内部構成や保存データに関する情報が分かる可能性があります。
- オブジェクトの読み取りも別途許可されている場合、外部から内容を取得される可能性があります。
対処方法
- 既存の必要なアクセスをポリシーで設定してから、
BucketOwnerEnforcedでACLを無効にしてください。 - 公開が不要なバケットではパブリックアクセスブロックを維持し、バケットポリシーと既存オブジェクトのACLを併せて確認してください。
- 正規のアクセスが継続し、意図しない匿名の一覧取得や読み取りが拒否されることを確認してください。
例
同じバケットの構成を比較します。グローバルに一意なBucketNameを指定してください。最初の例は公開ACLが動作する条件を示すもので、推奨構成ではありません。アカウントや組織の保護が優先される場合があるため、実行のために保護を解除しないでください。
変更前
yaml
Parameters:
BucketName:
Type: String
Resources:
JenkinsArtifacts01:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: !Ref BucketName
OwnershipControls:
Rules:
- ObjectOwnership: ObjectWriter
PublicAccessBlockConfiguration:
BlockPublicAcls: false
IgnorePublicAcls: false
BlockPublicPolicy: true
RestrictPublicBuckets: true
Tags:
- Key: CostCenter
Value: ITEngineering
バケット側でACLと公開ACLの付与を有効にしています。ほかの制限がなければ匿名の一覧取得を許可する可能性があります。
変更後
yaml
Parameters:
BucketName:
Type: String
Resources:
JenkinsArtifacts01:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref BucketName
OwnershipControls:
Rules:
- ObjectOwnership: BucketOwnerEnforced
PublicAccessBlockConfiguration:
BlockPublicAcls: true
IgnorePublicAcls: true
BlockPublicPolicy: true
RestrictPublicBuckets: true
VersioningConfiguration:
Status: Enabled
Tags:
- Key: CostCenter
Value: ITEngineering
- Key: Type
Value: CICD
ACLを無効にし、四つのパブリックアクセスブロック設定を有効にします。必要なアクセスをポリシーに移してから適用してください。バージョニングは別の復旧機能であり、公開アクセスを拒否する設定ではありません。