概要
複数のS3バケットがどのようなアクセス設定になっているか確認する為のShell Script
を作成しました。備忘録も兼ねて、そのコードと出力方法を記載します。
手順
1. どのディレクトリでも良いのでsh
のファイルを作成する
touch check_s3_access_settings.sh
2. 下記のコードをcheck_s3_access_settings.sh
に記載する
check_s3_access_settings.sh
#!/bin/bash
# 出力ファイル名
output_file="check_s3_access_settings.csv"
# CSVファイルのヘッダーを作成
echo "Bucket Name,Policy Status,ACL Status" > $output_file
# 全てのバケットのリスト一覧を取得
buckets=$(aws s3api list-buckets --query "Buckets[].Name" --output text)
for bucket in $buckets; do
# バケットポリシーをチェックして公開状態を確認
policy_status=$(aws s3api get-bucket-policy-status --bucket $bucket --query 'PolicyStatus.IsPublic' --output text 2>/dev/null)
if [ "$policy_status" == "True" ]; then
policy_status="Public"
else
policy_status="Private"
fi
# バケットACLをチェックして公開状態を確認
acl_status=$(aws s3api get-bucket-acl --bucket $bucket --query 'Grants[].Grantee.URI' --output text 2>/dev/null | grep -q "http://acs.amazonaws.com/groups/global/AllUsers" && echo "Public" || echo "Private")
# 結果をCSVファイルに出力
echo "$bucket,$policy_status,$acl_status" >> $output_file
done
# 処理完了メッセージを表示
echo "CSVへの記述が完了しました:$output_file"
-
>
: 上書きして新規に書き込む。ファイルがすでに存在する場合、その内容はすべて削除され、追加した記述内容のみが書き込まれる -
>>
: 上書きをしない状態で、追加で書き込む。ファイルの最後に新しい内容が追加され、既存の内容は保持される -
/dev/null
: 出力先として指定すると何も起こらない。また、入力元として指定しても何も入ってこないファイル -
2>/dev/null
: エラーメッセージのみを無視し、通常の出力は表示される
3. コマンドを入力し、処理を実行する
sh check_s3_access_settings.sh
# 表示内容
CSVの記述が完了しました:check_s3_access_settings.csv