IAMユーザーやAWS CLIプロファイルを設定して、Boto3でCloudTrailのイベント履歴を取得してみた

IAMユーザーやAWS CLIプロファイルを設定して、Boto3でCloudTrailのイベント履歴を取得してみます。Boto3のコード自体はそこまで難しくはありません。むしろ、IAMユーザーやAWS CLIのプロファイルの設定が重要です。
2023.09.05

はじめに

こんにちは、おのやんです。

みなさん、手元のコードからAWSリソースの各種情報を取得したくないですか?私は取得したいです。

そんな時、PythonのライブラリであるBoto3を使えば、ローカルの環境でAWSのリソースの情報を取得できます。

ということで、今回はPythonのライブラリであるBoto3を使って、CloudTrailのイベント履歴を取得したいと思います。

下準備

Boto3でCloudTrailのイベント履歴を取得するためには、いくつか準備が必要です。いずれもAWS CLIやIAMに関する設定となります。

CloudTrailの操作権限を有するIAMユーザーの作成

IAMユーザーの画面にて、「ユーザーの作成」を選択します。

今回は「get-event-history」というユーザー名にしておきましょう。ユーザー名の作成が完了したら「次へ」で次に進みます。

続いて、IAMユーザーの許可を設定します。

今回は一次的な検証用途で使いますので、AdministratorAccessをアタッチします。

本来は、AWSの最小権限の考えに基づいて、IAMユーザーには必要最低限の権限のみを付与します。本番環境での運用などでは、必ずAWSCloudTrail_ReadOnlyAccessなどの限られた権限のみを付与しましょう。

これらが選択できたら、次に進みましょう。

必要な設定項目が揃っていたら、ユーザーを作成します。

正常に作成されれば、このようにget-event-historyが追加されます。

アクセスキー・シークレットアクセスキーの作成

ユーザー詳細画面に移動すると、このようにさまざまな設定が可能です。

こちらの「セキュリティ認証情報」タブの「アクセスキー作成」を選択します。

今回はBoto3やAWS CLIからIAMユーザーにアクセスするため、「コマンドラインインターフェース(CLI)」を選択しておきましょう。下部のチェックボックスにもチェックを入れて、次に進みます。

説明の記述して、アクセスキーを作成しましょう。

正常に作成されたら、このようにアクセスキーとシークレットアクセスキーが取得できます。

なお、シークレットアクセスキーはこの画面でのみ取得可能です。この画面から離れると取得できません。必ずここで控えておきましょう。

プロファイルの設定

こちらで取得したアクセスキーを、AWS CLIのプロファイルに設定します。

~/.aws/credentials を開き、CloudTrail接続用のプロファイルをdefaultの下に追記しておきましょう。

[default]
aws_access_key_id = SRQPONMLKJHGFEDCBA
aws_secret_access_key = 123456789abcdefghijklmnopqrstuvwxyzABCDEF

[get-event-history]
aws_access_key_id = ABCDEFGHIJKLMNOPQRS
aws_secret_access_key = FEDCBAzyxwvutsrqponmlkjihgfedcba987654321

Boto3でCloudTrailのイベント履歴を取得

それでは、PythonのBoto3でCloudTrailのイベント履歴を取得していきましょう。今回はCloudTrailのイベント履歴取得に加えて、特定のイベントのみを取得する処理も加えておきます。

Boto3を使ってAWSに接続するコードを記述します。

get_event_history.py

import boto3

ec2_instance_id = 'i-123456789abcdefgh'
aws_region = 'ap-northeast-1'

session = boto3.Session(profile_name = 'get-event-history', region_name=aws_region)
cloudtrail_client = session.client('cloudtrail')

filter_criteria = {
    'EventName': 'StartSession',
}

response = cloudtrail_client.lookup_events(
    LookupAttributes = [
        {
            'AttributeKey': 'EventName',
            'AttributeValue': filter_criteria.get('EventName', '')
        },
    ],
    MaxResults = 50
)

events = response.get('Events', [])
for event in events:
    print(event)
    print("\n")

こちらを実行すると、以下のようにイベント履歴を取得することができます。

まとめ

コードや操作自体はそこまで難しいものではありません。むしろ、IAMユーザーやAWS CLIのプロファイルの設定不備などが原因で処理に失敗することがあります。

Boto3を動かそうと思ったら、まずはIAMユーザーやAWS CLIをしっかりと設定しておきましょう。では!