0
1

More than 1 year has passed since last update.

クロスアカウントで CloudTrail の証跡一覧を表にまとめる

Posted at

はじめに

AWSアカウントでマルチアカウントの導入が進んでいくと監査や管理を目的として、1つのAWSアカウント(管理アカウント)から複数のメンバーアカウントへクロスアカウントアクセスが必要になってきます。

CloudTrailの場合、Configアグリゲーターで抽出も可能ですが、当記事では管理アカウントからCloudTrailの証跡をクロスアカウントアクセスで取得をローカルからAWS CLIを利用し棚卸しを行います。

前提条件

  • 当記事のように利用するIAMユーザーのMFA保護が有効となっている
  • クロスアカウントアクセスを行うためのIAMロールがメンバーアカウントに作成されている必要がある

Require

  • AWS CLI
  • ローカル端末でクロスアカウントで実行するため、以下が必要
    • 管理アカウントのIAMユーザーの認証情報
    • メンバーアカウントのAWS CLIプロファイルの設定

流れ

  • ~/.aws/configの設定
  • 環境変数へ一時認証情報を払い出す
  • CloudTrail証跡一覧の取得

~/.aws/configの設定

事前にクロスアカウントアクセスを行うためにプロファイルの設定を行います。
クロスアカウントアクセスを行うためのIAMロールがメンバーアカウントに作成されている必要があります。(当記事では手順を割愛しています)

~/.aws/config
[profile cloudtrail-manager-account-a]
region = us-east-1
output = json
role_arn = arn:aws:iam::123456789012:role/cloudtrail-manager-role
credential_source = Environment

[profile cloudtrail-manager-account-b]
region = us-east-1
output = json
role_arn = arn:aws:iam::123456789012:role/cloudtrail-manager-role
credential_source = Environment

環境変数へ一時認証情報を払い出す

以下の記事を参考に管理アカウントのMFA保護されたIAMユーザーの一時認証情報を環境変数へ設定してください。

CloudTrail証跡一覧の取得

コード

任意の名前でスクリプトファイルを作成してください。

describe-trais-all-regions.sh
#!/bin/bash

# --------------------------------------------------------------------------------
# 1アカウントの有効な全リージョンの一覧を取得
# --------------------------------------------------------------------------------

PROFILE_NAME=$1

TARGET_AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --profile ${PROFILE_NAME} --output text)
REGION_NAMES=$(aws ec2 describe-regions --no-all-regions --query 'Regions[].RegionName' --profile ${PROFILE_NAME} --output text)

for region_name in ${REGION_NAMES[@]}
do
    aws cloudtrail describe-trails \
        --region ${region_name} \
        --profile ${PROFILE_NAME} \
        --output text \
        --query "trailList[*].[\
            Name\
            , S3BucketName\
            , S3KeyPrefix\
            , SnsTopicName\
            , SnsTopicARN\
            , IncludeGlobalServiceEvents\
            , IsMultiRegionTrail\
            , HomeRegion\
            , TrailARN\
            , LogFileValidationEnabled\
            , CloudWatchLogsLogGroupArn\
            , CloudWatchLogsRoleArn\
            , KmsKeyId\
            , HasCustomEventSelectors\
            , HasInsightSelectors\
            , IsOrganizationTrail\
        ]" | sed "s/^/${TARGET_AWS_ACCOUNT_ID}\t${region_name}\t/"
done

実行

標準出力される結果をpbcopyやファイルへ出力し、スプレッドシートなどに貼り付けて利用します

describe-all-accounts.sh
#!/bin/bash

PROFILE_NAMES=(\
    "cloudtrail-manager-account-a"\
    "cloudtrail-manager-account-b"\
)

# Header出力
echo -e "AccountId\
\tRegionName\
\tName\
\tS3BucketName\
\tS3KeyPrefix\
\tSnsTopicName\
\tSnsTopicARN\
\tIncludeGlobalServiceEvents\
\tIsMultiRegionTrail\
\tHomeRegion\
\tTrailARN\
\tLogFileValidationEnabled\
\tCloudWatchLogsLogGroupArn\
\tCloudWatchLogsRoleArn\
\tKmsKeyId\
\tHasCustomEventSelectors\
\tHasInsightSelectors\
\tIsOrganizationTrail\
"

for profile_name in ${PROFILE_NAMES[@]}
do
    ./describe-trails-all-region.sh $profile_name
done

実行例

./describe-all-accounts.sh | pbcopy
0
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
0
1