公開された S3 Objcet を探せ!
- AWS075: S3 Access block should restrict public bucket to limit access
https://tfsec.dev/docs/aws/s3/no-public-buckets/
tfsec でパブリックアクセスが制限されていない場合に指摘される様になりました。
terraform では以下の様に aws_s3_bucket_public_access_block リソースを利用することで対応できます。
1 | resource "aws_s3_bucket" "this" { |
ですが、 tfsec で指摘されたので直ちに対応して良いか、というと勿論そうではありません。
まず、現状のユーザ影響があるかどうかを調査する必要があります。
スクリプトで調査する
2 つ以上 permission がついている S3 Object を探索するスクリプトです。
1 | !/bin/bash |
通常、所有者のみアクセス権限がありますが、 public-read が付与されていると 2 つ以上になるという算段です。
1 | aws s3api get-object-acl --bucket tanaka.no.bucket --key t.txt | jq '.Grants' |
コンソール上でわかりやすく、以下の様な設定になっていると検知できます。
但し、 public-read だけ付与されていると 1 つだけになってしまうので、このスクリプトでは検知できません。
CloudTrail を Athena で検索する
CloudTrail を有効化し、 Athena 連携している場合、以下の様に検索が可能です。
1 | SELECT * |
結果
1 | eventTime: 2021-11-01T07:18:36Z |
※ 上記は、一旦 S3 上にファイルをアップし、その後、公開設定した場合でも実行結果に含まれることを確認しています。
public-read のみならず、 authenticated-read も検索できます。
そして何より、データ量にもよりますが、スクリプトよりはるかに速いです。
日付で 3 ヶ月以内くらいに絞ってみるとより早くなるのでそこは調整してください。
これでパブリックアクセスを許可する S3 Bucket が特定でき、安心して tfsec のパブリックアクセスのブロックが設定できる様になりました。
以上
参考になれば幸いです。
公開された S3 Objcet を探せ!
https://kenzo0107.github.io/2021/11/04/2021-11-05-find-public-s3-objects/