この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っている内容
Security Hub で、下記のコントロールにより違反となった S3 バケットがありました。
[S3.8] S3 Block Public Access setting should be enabled at the bucket level [1]
本コントロールは、S3 バケットレベルのブロックパブリックがすべて有効になっていないことで違反と判断されるかと思いますが、確認した所すべて有効化されていました。
設定変更はしていないので、一時的に検出されたわけではないと考えています。
考えられる原因について確認させていただきたいです。
どう対応すればいいの?
S3 バケットのバケットポリシーで、AWS Config に設定されている IAM ロールからの S3 アクションが許可されているかご確認ください。
S3 バケットの情報を取得するための API リクエストが拒否されることで、S3 バケットの現在の状態が正しく取得できず、Security Hub に違反とされた可能性がございます。 [2]
AWS Identity and Access Management (IAM) ロールでは、アクセス許可のセットを設定できます。AWS Config は割り当てられたロールを引き受けて、S3 バケットへの書き込み、SNS トピックへの発行、AWS リソースの設定詳細を取得するための Describe または List API リクエストを行います。
つきましては、S3 バケットのバケットポリシーにて AWS Config に設定されている IAM ロールからの S3 アクションを許可するように変更した後、しばらくお待ちいただくことで当該アラートが消失するかについてご確認ください。
補足
S3 バケットのバケットポリシーで、NotPrincipal を使用して特定のロールからのアクセスを許可する場合、NotPrincipal には IAM ロールの ARN と引き受けたロールユーザの ARN を指定する必要がございます。
バケットポリシー_NotPrincipal_例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::<アカウントID>:role/<ロール名>",
"arn:aws:sts::<アカウントID>:assumed-role/<ロール名>/<セッション名>"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<バケット名>",
"arn:aws:s3:::<バケット名>/*"
]
}
]
}
また、S3 バケットのバケットポリシーで、Condition を使用して特定のロールからのアクセスを許可する場合、Condition には IAM ロールの RoleId が含まれた aws:userId を指定する必要がございます。
バケットポリシー_Condition_例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<バケット名>",
"arn:aws:s3:::<バケット名>/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"<ロールID>:*"
]
}
}
}
]
}
補足の内容につきましては、弊社ブログ [3] もご参照いただければと存じます。
参考資料
[1] AWS Foundational Security Best Practices コントロール - AWS Security Hub
[2] AWS Config に割り当てられた IAM ロールのアクセス許可 - AWS Config
[3] 特定の IAM ロールのみアクセスできる S3 バケットを実装する際に検討したあれこれ | DevelopersIO