説明
S3 バケットで公開 ACL を制限しないと、ACL の設定ミスによってバケットやオブジェクトに意図しない公開権限が付く可能性があります。BlockPublicAcls は新しい公開 ACL を含むリクエストを拒否しますが、既存の ACL は削除しません。
実際の公開アクセスは、ACL の有効状態やほかの保護設定によって変わります。新しいバケットでは ACL がデフォルトで無効であり、IgnorePublicAcls やアカウントレベルのブロックによって公開 ACL の権限が適用されない場合もあります。
想定される影響
- 公開読み取り権限が有効になると、オブジェクトの内容や一覧が漏えいする可能性があります。
- バケットの公開書き込み権限が有効になると、不要なオブジェクトの作成や削除が可能になる場合があります。
対処方法
- 公開 ACL が不要なら、
PublicAccessBlockConfigurationにBlockPublicAcls: trueを設定してください。 - 既存の公開 ACL 権限を削除し、
IgnorePublicAclsを有効にしてください。非公開バケットでは、ほかのパブリックアクセスブロック設定とバケットポリシーも確認してください。 - ACL を無効にする前に、必要なアクセス権限をポリシーで設定してください。
例
以下では、新しい公開 ACL をブロックする設定を比較します。
変更前
yaml
Resources:
Bucket1:
Type: AWS::S3::Bucket
Properties:
PublicAccessBlockConfiguration:
BlockPublicAcls: false
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
BlockPublicAcls は無効ですが、IgnorePublicAcls: true により公開 ACL の権限は無視されます。この例だけでオブジェクトが公開されているとは判断できません。
変更後
yaml
Resources:
Bucket1:
Type: AWS::S3::Bucket
Properties:
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
新しい公開 ACL のリクエストを拒否し、既存の公開 ACL の権限も無視します。必要なアプリケーションアクセスが引き続き機能することを確認してください。