AWS CloudTrail証跡の状態などを全リージョンから取得する

2024.01.26

こんにちは!丸屋 正志(Maruya Masashi) です。
今日もブロックを掘ったり積み上げたり匠に壊されたりしていますか?


1, 困っていたこと

ご利用中のAWSアカウントにおいて、どのリージョンでCloudTrail証跡(マルチリージョンおよびシングルリージョン)が有効になっているかを把握するのに困っており簡単に全リージョンから取得したいです。


2, このブログで実現できること

  • AWS CloudTrail 証跡の全リージョンから、『状態』を取得
  • AWS CloudTrail 証跡の全リージョンから、『マルチリージョンの証跡』を取得


3, 前提条件

東京リージョンのCloudShellでコードを実行しています。

下記の表は、各リージョンで構築済みのCloudTrail証跡のサンプルです。

ホームリージョン 証跡タイプ CloudTrailの証跡名 状態
東京 マルチリージョン aws-controltower-BaselineCloudTrail O : 有効化
東京 マルチリージョン Test-MultiRegion-CloudTrail X : 無効化
東京 シングルリージョン ap-northeast-1-sample-trail O : 有効化
ムンバイ シングルリージョン ap-south-1-sample-trail X : 無効化

※ マルチリージョンの証跡は、全リージョンに展開されます


4, やってみた

以下のコードをCloudShell等に貼り付けることで、簡単に全リージョンからCloudTrail証跡の状態を取得することができます。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
    echo -e "\n=========================="
    echo -e "==== Region ${region} ====\n"
    aws cloudtrail list-trails --query "Trails[].[TrailARN]" --output text --region ${region} \
    | while read trailarn; do
        echo "--------------------"
        echo "# Logging status :: ${trailarn}"
        # get-trail-statusコマンドの実行とエラーチェック
        status=$(aws cloudtrail get-trail-status --name ${trailarn} --region ${region} --query "IsLogging" --output text 2>&1)
        multi=$(aws cloudtrail describe-trails --trail-name-list ${trailarn} --region ${region} --query "trailList[0].IsMultiRegionTrail" --output text 2>&1)
        if [[ $status == *"error"* ]]; then
            echo "=> Error, check CloudTrail for $region."
        else
            echo "=> Status : $status"
            echo "=> MultiRegion : $multi"
        fi
    done
    echo ""
done


4.1, コマンドを実行した際の出力内容の一例

※ 999999999999の所は、メンバーアカウントID(12桁)になります
※ 555555555555の所は、管理アカウントID(12桁)になります

==========================
==== Region ap-northeast-1 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/ap-northeast-1-sample-trail
=> Status : True
=> MultiRegion : False
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True

==========================
==== Region ap-south-1 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-south-1:999999999999:trail/ap-south-1-sample-trail
=> Status : False
=> MultiRegion : False
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True

==========================
==== Region us-east-1 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True

==========================
==== Region us-west-2 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True


5, 取得結果の見方

各項目と値については、以下をご参照ください。

  • 『Status』
    • True : CloudTrail証跡が有効化状態
    • False : CloudTrail証跡が無効化状態
  • 『MultiRegion』
    • True : マルチリージョン証跡
    • False : シングルリージョン証跡


5.1, 東京リージョンについて

  • 『ap-northeast-1-sample-trail』
    • 東京リージョンにて、シングルリージョンのCloudTrail証跡として、有効化されている
  • 『aws-controltower-BaselineCloudTrail』
    • 東京リージョンにて、マルチリージョンのCloudTrail証跡として、有効化されている
  • Test-MultiRegion-CloudTrail』
    • 東京リージョンにて、マルチリージョンのCloudTrail証跡として、無効化されている
==========================
==== Region ap-northeast-1 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/ap-northeast-1-sample-trail
=> Status : True
=> MultiRegion : False
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True


5.2, ムンバイリージョンについて

  • 『ap-south-1-sample-traill』
    • ムンバイリージョンにて、シングルリージョンのCloudTrail証跡として、無効化されている
  • 『aws-controltower-BaselineCloudTrail』
    • 東京リージョンにて、マルチリージョンのCloudTrail証跡として、有効化されている
  • Test-MultiRegion-CloudTrail』
    • 東京リージョンにて、マルチリージョンのCloudTrail証跡として、無効化されている
==========================
==== Region ap-south-1 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-south-1:999999999999:trail/ap-south-1-sample-trail
=> Status : False
=> MultiRegion : False
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True


5.3, その他のリージョンについて

  • 『aws-controltower-BaselineCloudTrail』
    • 東京リージョンにて、マルチリージョンのCloudTrail証跡として、有効化されている
  • Test-MultiRegion-CloudTrail』
    • 東京リージョンにて、マルチリージョンのCloudTrail証跡として、無効化されている
==========================
==== Region us-east-1 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True

==========================
==== Region us-west-2 ====

--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:555555555555:trail/aws-controltower-BaselineCloudTrail
=> Status : True
=> MultiRegion : True
--------------------
# Logging status :: arn:aws:cloudtrail:ap-northeast-1:999999999999:trail/Test-MultiRegion-CloudTrail
=> Status : False
=> MultiRegion : True


6, QA

Q, 下記のようなエラーが出ました、どうしたら良いですか?

==========================
==== Region eu-central-1 ====

Error when retrieving credentials from container-role: Error retrieving metadata: Received non 200 response 500 from container metadata: <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>500 - Internal Server Error</title>
 </head>
 <body>
  <h1>500 - Internal Server Error</h1>
 </body>
</html>

A, ログインセッションが切れているので、再度ログインしなおして再度実行しなおしてください。


さいごに

このブログでは『シングルリージョンの証跡』を例にあげていますが、現在は推奨されないため基本的には『マルチリージョンの証跡』を利用いたしましょう。
このブログが誰かの解決になれば幸いです。