説明
S3バケットポリシーのActionとPrincipalの両方にワイルドカードを使ってアクセスを許可すると、業務に必要のない操作や主体まで権限の対象に含まれるおそれがあります。特に匿名のリクエストに広い権限を与えないよう、操作と主体の範囲を併せて確認する必要があります。
s3:*はすべてのS3操作を指しますが、s3:Get*が指すのは名前がそのパターンに一致する操作だけです。実際のアクセス権限は、各操作の対象リソース、条件、明示的な拒否、Block Public Accessにも左右されるため、ワイルドカードだけで権限全体は判断できません。
想定される影響
- ワイルドカードに意図しない操作やアクセス主体が含まれ、その権限が有効になると、必要以上のアクセスを許可する可能性があります。
- オブジェクトの読み取り、書き込み、削除のどれが可能になるかは、一致する操作と対象リソースによって異なります。
対処方法
- 必要な操作とアクセス主体を明示し、正しいバケットARNまたはオブジェクトARNに権限を限定してください。
- 公開読み取りなどを意図的に許可する場合は、対象のデータと条件を確認し、不要な操作が含まれないようにしてください。
- ポリシー全体、明示的な拒否、Block Public Accessを併せて確認し、必要なアクセスが維持され、不要なアクセスが拒否されることをテストしてください。
例
どちらの例もResourceのバケット名がname: mys3bucketと異なるため、実際の対象バケットに合わせて修正してください。末尾が/*のオブジェクトARNは、バケット自体に対するすべての操作権限を与えるものではありません。バケット操作とオブジェクト操作に適したARNをそれぞれ使用してください。
変更前
yaml
- name: Create s3 bucket
amazon.aws.s3_bucket:
name: mys3bucket
policy:
Id: "id113"
Version: "2012-10-17"
Statement:
- Action: "s3:*"
Effect: "Allow"
Resource: "arn:aws:s3:::S3B_181355/*"
Principal: "*"
変更後
yaml
- name: Create s3 bucket
amazon.aws.s3_bucket:
name: mys3bucket
policy:
Id: "id113"
Version: "2012-10-17"
Statement:
- Action:
- "s3:GetObject"
Effect: "Allow"
Resource: "arn:aws:s3:::S3B_181355/*"
Principal:
AWS: "arn:aws:iam::123456789012:role/read-only-bucket-role"
説明:
- 最初の例:
s3:*とPrincipal: "*"で、操作と主体を広く指定しています。リソースARNを修正した後も、この範囲の権限が必要か確認してください。 - 次の例: 特定のロールに、オブジェクトを読み取る
s3:GetObjectだけを許可しています。実際のロールのARNと、バケット内の対象オブジェクトのARNを使用し、ほかのポリシーによる追加の権限も確認してください。