【小ネタ】S3バケットのバージョニング有無とライフサイクルルール有無をAWS CLIで棚卸しする
バージョニングが設定されていて、ライフサイクルルールが無効になっているS3バケットを洗い出したいです。 古いバージョンのオブジェクトがチリツモでコストになるケースがあるためです。
洗い出しには Security Hub の [S3.10] コントロール が使えますが、 AWS基礎セキュリティのベストプラクティス標準には入っていません。
このためだけに NIST SP 800-53 Rev. 5標準を有効化するのも手間とコストになるので、 今回は AWS CLIにてS3バケットを棚卸ししてみます 。
作成したスクリプト
以下 bash スクリプトを作成しました。S3バケットのバージョニング設定有無とライフサイクルルール設定有無を Markdownテーブルで出力します。
#!/bin/bash
echo "| S3 bucket | Versioning | Lifecycle rules |"
echo "| -- | -- | -- |"
aws s3api list-buckets --query "Buckets[].[Name]" --output text \
| while read bucket; do
# バージョニングの設定有無チェック
versioning="No"
test "$(aws s3api get-bucket-versioning --bucket $bucket --query Status --output text)" = "Enabled" \
&& versioning="Yes"
# ライフサイクルルールの設定有無チェック
lifecycle="No"
aws s3api get-bucket-lifecycle-configuration --bucket $bucket > /dev/null 2>&1 \
&& lifecycle="Yes"
# 出力
echo "| $bucket | $versioning | $lifecycle |"
done
バージョニングを取得するコマンド(get-bucket-versioning)は、 バージョニングが有効になっていれば "Status:Enabled" が出力されるので、 その値で判別します。
### バージョニングが有効である場合 ###
aws s3api get-bucket-versioning --bucket DOC-EXAMPLE-1 --output text
# Enabled
### バージョニング無効の場合 ###
aws s3api get-bucket-versioning --bucket DOC-EXAMPLE-2 --output text
# (出力無し)
ライフサイクルルールを取得するコマンド(get-bucket-lifecycle-configuration)は、 ルールが設定されていない場合、エラーになります。 正常に終了するか、しないかで判別できます。
### 正常に終了する場合 ###
aws s3api get-bucket-lifecycle-configuration --bucket DOC-EXAMPLE-1 --output yaml
# Rules:
# - Expiration:
# Days: 1095
# Filter:
# Prefix: ''
# ID: RetentionRule
# NoncurrentVersionExpiration:
# NoncurrentDays: 1095
# Status: Enabled
# TransitionDefaultMinimumObjectSize: varies_by_storage_class
### エラーになる場合 ###
aws s3api get-bucket-lifecycle-configuration --bucket DOC-EXAMPLE-2 --output yaml
# An error occurred (NoSuchLifecycleConfiguration) when calling the GetBucketLifecycleConfiguration operation: The lifecycle configuration does not exist
実行サンプル
以下に実行サンプルを記載します。
./inventory-s3-versioning-and-lifecycle.sh
# | S3 bucket | Versioning | Lifecycle rules |
# | -- | -- | -- |
# | aws-controltower-logs-111111111111-ap-northeast-1 | Yes | Yes |
# | aws-controltower-s3-access-logs-111111111111-ap-northeast-1 | Yes | Yes |
# | cf-templates-1111111111111-ap-northeast-1 | No | No |
# | rain-artifacts-111111111111-ap-northeast-1 | No | Yes |
# | custom-cloudtrail-logs-111111111111-ap-northeast-1 | Yes | Yes |
S3 bucket | Versioning | Lifecycle rules |
---|---|---|
aws-controltower-logs-111111111111-ap-northeast-1 | Yes | Yes |
aws-controltower-s3-access-logs-111111111111-ap-northeast-1 | Yes | Yes |
cf-templates-1111111111111-ap-northeast-1 | No | No |
rain-artifacts-111111111111-ap-northeast-1 | No | Yes |
custom-cloudtrail-logs-111111111111-ap-northeast-1 | Yes | Yes |
おわりに
S3バケットのバージョニング/ライフサイクルルール設定を棚卸してみました。 サクッと1アカウント内のS3設定を確認したいときに役に立つと思います。
以上、参考になれば幸いです。