AWS アカウント間での CloudTrail ログファイルを共有する
このセクションでは、複数の AWS アカウント間で CloudTrail ログファイルを共有する方法について説明します。ここでは、すべてのログファイルが 1 つの Amazon S3 バケットに受信されるケースを想定します。これは、CloudTrail コンソールで作成される証跡のデフォルト設定です。最初のシナリオでは、Amazon S3 バケットに保存されログファイルの生成元のアカウントに、読み取り専用のアクセス権限を付与する方法について説明します。2 つ目のシナリオでは、ファイルの分析を担当するサードパーティのアカウントに、すべてのログファイルへのアクセス権限を付与する方法について説明します。
複数の AWS アカウント間でログファイルを共有するには、通常、次の手順を実行する必要があります。これらの手順については、このセクションで後ほど詳しく説明します。
-
ログファイルを共有する各アカウント用の IAM ロールを作成します。
-
それらの各 IAM ロールに対してアクセスポリシーを作成し、ログファイルを共有するアカウントに読み取り専用のアクセス権限が付与されるようにします。
-
各アカウントのユーザーに対し、適切なロールがプログラムによって割り当てられるようにし、各ユーザーがログファイルを取得できるようにします。
このセクションでは、上記の手順を 2 とおりの共有シナリオでそれぞれ説明します。1 つは、ファイルの生成元である各アカウントにログファイルへのアクセス権限を付与するシナリオで、もう 1 つは、サードパーティとログファイルを共有するシナリオです。2 つのシナリオでそれぞれ実行する手順はほとんど同じです。重要な違いは、IAM ロールによって各アカウントにどのような種類のアクセス許可が付与されるかという点です。つまり、アカウント固有のログファイルだけを読み取れる権限を付与するか、それともすべてのログファイルを読み取れるアカウント権限を付与するかの違いです。IAM ロールのアクセス許可の管理の詳細については、IAM ユーザーガイドの「IAM ロール」を参照してください。
シナリオ 1: ログファイルの生成元のアカウントへアクセス権限を付与する
このシナリオでは、2 つの事業部門から成る企業で、3 つの AWS アカウントが使用されている場合を想定します。1 つ目のアカウント (アカウント A) は、最上位のアカウントです。たとえば、このアカウントは企業の IT 部門によって管理され、他のすべての部署や事業部門からログファイルを収集して、1 つのバケットにまとめます。他の 2 つのアカウント (B と C) は、企業の各事業部門に対応します。
このシナリオでは、3 つのアカウントのログファイルがすべて 1 つの Amazon S3 バケットに配信されるようにすでに設定されていて、そのバケットに対するフルコントロール権限は、次の図のようにアカウント A が保有しているものとします。

Amazon S3 バケットには、アカウント A、B、C によって生成されたログファイルが置かれますが、初期状態では、アカウント B とアカウント C は、自身が生成したログファイルにアクセスすることができません。そこで、次の図のように、各ビジネスユニットに対し、自身が生成したログファイルへの読み取り専用のアクセス権限を付与することにします。

アカウント B と C によって生成されたログファイルへの読み取り専用のアクセス権限を付与するには、アカウント A で以下の手順を実行する必要があります。先にも述べたように、Amazon S3 バケットのフルコントロール権限はアカウント A が保有しています。
-
アカウント B 用の IAM ロールを作成し、アカウント C 用にもう 1 つの IAM ロールを作成します。詳細は ロールの作成 をご覧ください
-
アカウント B 用に作成した IAM ロールについては、アカウント B によって生成されたログファイルへの読み取り専用アクセス権限を付与するアクセスポリシーを作成します。アカウント C 用に作成した IAM ロールについては、アカウント C によって生成されたログファイルへの読み取り専用アクセス権限を付与するアクセスポリシーを作成します。詳細はこちらをご覧ください: 自分が所有するアカウントへのアクセスを許可するアカウントポリシーの作成
-
アカウント B の IAM ユーザーには、アカウント B 用に作成されたロールをプログラムによって割り当てます。アカウント C の IAM ユーザーには、アカウント C 用に作成されたロールをプログラムによって割り当てます。各 IAM ユーザーには、ロールを割り当てられるためのアクセス許可がそれぞれのアカウント所有者によって付与される必要があります。詳細については、こちらを参照してください:IAM ユーザーに対するアクセス許可ポリシーを作成する。
-
最後に、アクセス許可を付与するアカウント所有者は管理者である必要があり、割り当てられるアカウント A 内のロールの ARN を知っている必要があります。詳細については、こちらを参照してください:AssumeRole を呼び出す。
上記の手順の完了後、アカウント B と C の ユーザーは自身のログファイルをプログラムによって取得できるようになりますが、他のアカウントのログファイルは取得できるようになりません。
シナリオ 2: すべてのログへのアクセス権限を付与する
このシナリオでは、企業の構造が 1 つ目のシナリオと同様であるとを想定します。つまり、2 つの事業部門から成る企業で、3 つの AWS アカウントが使用されている場合を想定します。1 つ目のアカウント (アカウント A) は、最上位のアカウントです。たとえば、このアカウントは企業の IT 部門によって管理され、他のすべてのログファイルを 1 つのバケットに配置します。他の 2 つのアカウント (B と C) は、企業の各事業部門に対応します。
このシナリオでは、1 つ目のシナリオと同様、3 つのアカウントのログファイルがすでに 1 つの Amazon S3 バケットに配置されていて、そのバケットに対するフルコントロール権限は、アカウント A が保有しているものとします。
最後に、この企業では、すべてのアカウント (A、B、C) のすべてのログファイルをサードパーティと共有したいと考えています。このサードパーティーは、次の図のように、アカウント Z という AWS アカウントを使用するものとします。

自社のすべてのログファイルをアカウント Z と共有するには、Amazon S3 バケットへのフルコントロールを保有しているアカウント A で、以下の操作を実行する必要があります。
-
アカウント Z 用の IAM ロールを作成します。方法: ロールの作成
-
アカウント Z 用に作成した IAM ロールに対してアクセスポリシーを作成し、アカウント A、B、C によって生成されたログファイルへの読み取り専用のアクセス権限が付与されるようにします。方法: アクセスポリシーを作成してサードパーティにアクセス権限を付与する
-
アカウント Z のユーザーに対し、ロールがプログラムによって割り当てられるようにし、各ユーザーが適切なログファイルを取得できるようにします。ユーザーには、ロールを割り当てるためのアクセス許可がアカウント Z の所有者によって付与されている必要があります。方法: IAM ユーザーに対するアクセス許可ポリシーを作成する。さらに、アクセス許可を付与するアカウント所有者は管理者である必要があり、割り当てられるアカウント A 内のロールの ARN を知っている必要があります。方法: AssumeRole を呼び出す。