2
1

概要

複数の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

参考記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1