説明
S3バケットポリシーの許可ステートメントで Action と Principal の両方に * を指定すると、すべての主体に幅広い操作権限を与える可能性があります。実際のアクセスは、対象リソース、条件、明示的な拒否、Block Public Accessの設定によって決まります。内部データへのアクセスは、業務に必要な主体と操作に限定する必要があります。
Effect は許可または拒否を指定する必須要素です。省略してもアクセスは許可されず、ポリシーの制限にもなりません。
想定される影響
- 意図しない主体にオブジェクトの読み取りが許可されると、データが漏えいするおそれがあります。
- 書き込みや削除も許可されていれば、オブジェクトの追加、変更、削除によってサービスや運用データに影響が及ぶ可能性があります。
- 広範な許可ステートメントを残したまま他の保護設定を緩和すると、意図した範囲を超えてアクセスが広がるおそれがあります。
対処方法
- 不要なワイルドカードの許可を削除し、必要なアカウント、ロール、サービスと操作を指定してください。
s3:*もすべてのS3操作を含むため、最小権限への変更にはなりません。 s3:GetObjectやs3:PutObjectなどの必要な操作に対応するバケットまたはオブジェクトARNを指定してください。条件と他の許可・拒否ステートメントを併せて確認し、内部用バケットではBlock Public Accessを維持してください。- 必要なアクセスが維持され、不要なアクセスが拒否されることを検証してください。意図しない公開アクセスがあった場合は、アクセスを制限し、関連するログや変更履歴を確認してください。
例
次の例には、参照先の DOC-EXAMPLE-BUCKET の定義がありません。実際のバケット定義と、操作に対応するリソースARNが必要です。どちらも、そのまま最小権限のデプロイ構成として使用する例ではありません。
すべての主体に幅広い操作を許可
yaml
Resources:
SampleBucketPolicy3:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref DOC-EXAMPLE-BUCKET
PolicyDocument:
Statement:
- Action: "*"
Effect: Allow
Resource: "*"
Principal: "*"
主体と操作を制限しない許可ステートメントです。ポリシーが有効に適用され、他のアクセス制御で遮断されなければ、必要以上の権限が付与されるおそれがあります。
GetObjectの明示的な拒否
yaml
Resources:
SampleBucketPolicy1:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref DOC-EXAMPLE-BUCKET
PolicyDocument:
Statement:
- Action:
- "s3:GetObject"
Effect: Deny
Resource: "*"
Principal: "*"
このステートメントはすべての主体の s3:GetObject を明示的に拒否するため、正当なオブジェクト取得も遮断する可能性があります。s3:GetObjectVersion や書き込み、削除まで拒否するものではありません。適用前に、実際の対象オブジェクトARNと正当な利用への影響を確認してください。