説明
RestrictPublicBuckets は、公開ポリシーがある S3 バケットへのアクセスを、AWS サービスプリンシパルとバケット所有アカウント内の権限を持つユーザーに制限します。この保護が適用されないと、公開ポリシーが許可する外部アクセスが可能になる場合があります。アカウントレベルのブロックなど、ほかの制御も適用されます。
この設定は公開ポリシー自体を削除しません。公開と判定されるポリシーでは、特定の外部アカウントへの個別の許可も遮断される可能性があるため、必要なアカウント間連携を確認してください。
想定される影響
- 公開ポリシーがオブジェクトの読み取りを許可すると、意図しないユーザーにデータが漏えいする可能性があります。
- 公開書き込みや削除の権限も付与すると、データの変更や損失につながる可能性があります。
対処方法
- 非公開バケットには
PublicAccessBlockConfiguration.RestrictPublicBuckets: trueを設定してください。 - 不要な公開ポリシーステートメントを削除し、必要なアカウントとロールだけを指定してください。変更後に必要なサービス連携とアカウント間アクセスを確認してください。
BlockPublicPolicyと ACL のブロック設定も確認してください。新しい公開ポリシーを拒否するだけでは、既存の公開ポリシーによるアクセスは除去されません。
例
以下では、同じバケットのパブリックアクセスブロック設定を比較します。
変更前
yaml
Resources:
Bucket13:
Type: AWS::S3::Bucket
Properties:
PublicAccessBlockConfiguration:
BlockPublicAcls: false
BlockPublicPolicy: true
IgnorePublicAcls: false
RestrictPublicBuckets: false
既存の公開ポリシーによるアクセスを RestrictPublicBuckets では制限しません。アカウントレベルのブロックなどは引き続き適用され、この設定だけで公開ポリシーの存在は判断できません。
変更後
yaml
Resources:
Bucket13:
Type: AWS::S3::Bucket
Properties:
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
公開ポリシーがある場合のアクセスを制限し、ほかの公開ブロックも有効にします。必要な外部アカウントのアクセスを維持するには、公開権限を削除してそのアカウントの権限を明示的に設定してください。