Amazon EventBridge を使用した AWS IAM Access Analyzer のモニタリング - AWS Identity and Access Management

Amazon EventBridge を使用した AWS IAM Access Analyzer のモニタリング

このトピックでは、Amazon EventBridge を使用した Access Analyzer の結果のモニタリングと、アクセスプレビュー方法について説明します。EventBridge は、Amazon CloudWatch Events の新しいバージョンです。

結果のイベント

Access Analyzer は、各結果の生成時、既存の結果の状態の変更時、および結果の削除時に EventBridge にイベントに送信します。結果および結果に関する通知を受信するには、Amazon EventBridge でイベントルールを作成する必要があります。イベントルールを作成するときに、ルールに基づいてトリガーするターゲットアクションを指定することもできます。たとえば、新しい結果のイベントが Access Analyzer から返されたときに Amazon SNS トピックをトリガーするイベントルールを作成できます。

アクセスプレビューイベント

Access Analyzer は、アクセスプレビューごとにイベントを EventBridge に送信し、ステータスを変更します。これには、アクセスプレビューが最初に作成されたとき (ステータス Creating)、アクセスプレビューが完了したとき (ステータス Completed)、またはアクセスプレビューの作成が失敗したとき (ステータス Failed) が含まれます。Access Preview に関する通知を受信するには、EventBridge でイベントルールを作成する必要があります。イベントルールを作成するときに、ルールに基づいてトリガーするターゲットアクションを指定することができます。たとえば、完了したアクセスプレビューのイベントが Access Analyzer から返されたときに Amazon SNS トピックをトリガーするイベントルールを作成できます。

イベントの通知頻度

Access Analyzer は、アカウント内でイベントが発生してから 1 時間以内に新しい結果や、ステータス更新に関するイベントを EventBridge に送信します。Access Analyzer は、保存期間の期限が切れたために解決済みの結果が削除されたときにも EventBridge にイベントを送信します。結果を生成したアナライザーが削除されたために結果が削除された場合は、アナライザーが削除されてから約 24 時間後に Eventbridge にイベントが送信されます。結果が削除されても、結果のステータスは変更されません。代わりに、isDeleted 属性が true に設定されます。また、Access Analyzer は、新しく作成されたアクセスプレビューおよびアクセスプレビューステータスの変更に関するイベントを EventBridge に送信します。

結果のイベントの例

次に示すのは、EventBridge に送信される Access Analyzer イベントの例です。表示されている id は、Eventbridge のイベントの ID です。詳細については、「EventBridge のイベントとイベントパターン」を参照してください。

detail オブジェクトでは、accountId 属性と region 属性の値は、結果で報告されたアカウントとリージョンを参照します。isDeleted 属性は、イベントが削除対象の結果に関連するものであるかどうかを示します。id は結果 ID です。resources 配列は、結果を生成したアナライザーの ARN を持つシングルトンです。

{ "account": "111122223333", "detail": { "accountId": "111122223333", "action": [ "s3:GetObject" ], "analyzedAt": "2019-11-21T01:22:22Z", "condition": {}, "createdAt": "2019-11-20T04:58:50Z", "id": "22222222-dcba-4444-dcba-333333333333", "isDeleted": false, "isPublic": false, "principal": { "AWS": "999988887777" }, "region": "us-west-2", "resource": "arn:aws:s3:::my-bucket", "resourceType": "AWS::S3::Bucket", "status": "ACTIVE", "updatedAt": "2019-11-21T01:14:07Z", "version": "1.0" }, "detail-type": "Access Analyzer Finding", "id": "11111111-2222-4444-aaaa-333333333333", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2019-11-21T01:22:33Z", "version": "0" }

Access Analyzer は、エラー結果に関するイベントも EventBridge に送信します。エラー結果は、Access Analyzer が分析対象のリソースにアクセスできない場合に生成されます。エラー結果のイベントには、次の例に示すように error 属性が含まれます。

{ "account": "111122223333", "detail": { "accountId": "111122223333", "analyzedAt": "2019-11-21T01:22:22Z", "createdAt": "2019-11-20T04:58:50Z", "error": "ACCESS_DENIED", "id": "22222222-dcba-4444-dcba-333333333333", "isDeleted": false, "region": "us-west-2", "resource": "arn:aws:s3:::my-bucket", "resourceType": "AWS::S3::Bucket", "status": "ACTIVE", "updatedAt": "2019-11-21T01:14:07Z", "version": "1.0" }, "detail-type": "Access Analyzer Finding", "id": "11111111-2222-4444-aaaa-333333333333", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2019-11-21T01:22:33Z", "version": "0" }

アクセスプレビューイベントの例

次の例では、Access Preview を作成するときに EventBridge に送信された最初のイベントのデータを示しています。resources配列は、アクセスプレビューが関連付けられているアナライザーの ARN を持つシングルトンです。detail オブジェクトでは、id はアクセスプレビューIDを参照し、configuredResources はアクセスプレビューが作成されたリソースを参照します。statusCreating で、アクセスプレビューのステータスを参照します。previousStatus は、アクセスプレビューが作成されたばかりであるため、指定されていません。

{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::example-bucket" ], "createdAt": "2020-02-20T00:00:00.00Z", "region": "us-west-2", "status": "CREATING", "version": "1.0" }, "detail-type": "Access Preview State Change", "id": "aaaabbbb-2222-3333-4444-555566667777", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2020-02-20T00:00:00.00Z", "version": "0" }

次の例は、ステータスが Creating から Completed に変更されたアクセスプレビューのために EventBridge に送信されるイベントのデータを示しています。詳細オブジェクトでは、idは、アクセスプレビュー ID を参照します。status および previousStatus は、以前のステータスが Creating であり、現在のステータスは Completed である、アクセスプレビューのステータスを参照します。

{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::example-bucket" ], "createdAt": "2020-02-20T00:00:00.000Z", "previousStatus": "CREATING", "region": "us-west-2", "status": "COMPLETED", "version": "1.0" }, "detail-type": "Access Preview State Change", "id": "11112222-3333-4444-5555-666677778888", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2020-02-20T00:00:00.00Z", "version": "0" }

次の例は、ステータスが Creating から Failed に変更されたアクセスプレビューのために EventBridge に送信されるイベントのデータを示しています。detail オブジェクトでは、id は、アクセスプレビュー ID を参照します。statusおよびpreviousStatusは、以前のステータスが Creating であり、現在のステータスは Failed である、アクセスプレビューのステータスを参照します。。statusReason フィールドには、無効なリソース構成のためにアクセスプレビューが失敗したことを示す理由コードが表示されます。

{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::example-bucket" ], "createdAt": "2020-02-20T00:00:00.00Z", "previousStatus": "CREATING", "region": "us-west-2", "status": "FAILED", "statusReason": { "code": "INVALID_CONFIGURATION" }, "version": "1.0" }, "detail-type": "Access Preview State Change", "id": "99998888-7777-6666-5555-444433332222", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "source": "aws.access-analyzer", "time": "2020-02-20T00:00:00.00Z", "version": "0" }

コンソールを使用したイベントルールの作成

次の手順では、コンソールを使用してイベントルールを作成する方法について説明します。

Amazon EventBridge コンソール (https://console.aws.amazon.com/events/) を開きます。

  1. [Create rule] を選択します。

  2. [Name (名前)] に名前を入力し、必要に応じて [Description (説明)] に説明を入力します。

  3. [Define pattern (パターンの定義)] で [Event pattern (イベントパターン)]、[Custom pattern (カスタムパターン)] の順に選択します。

  4. 次の結果イベント例をコピーし、[Event pattern (イベントパターン)] ボックス内に貼り付けます。

    { "source": [ "aws.access-analyzer" ], "detail-type": [ "Access Analyzer Finding" ] }

    次のアクセスプレビューイベント例をコピーし、[Event pattern (イベントパターン)] ボックス内に貼り付けます。

    { "source": [ "aws.access-analyzer" ], "detail-type": [ "Access Preview State Change" ] }
  5. [Save] を選択します。

  6. [Select targets (ターゲットの選択)] で、Amazon SNS トピックや AWS Lambda 関数など、ルールの [Target (ターゲット)] アクションを選択します。

  7. ターゲットがトリガーされたときに使用する特定の SNS トピックまたは Lambda 関数を選択します。

    ターゲットは、ルールで定義したイベントパターンに一致するイベントが返されたときにトリガーされます。

  8. [Save (保存)] を選択してルールを作成します。

ルールの作成の詳細については、「AWS リソースからのイベントでトリガーする EventBridge ルールの作成」を参照してください。

CLI を使用したイベントルールの作成

  1. 以下を使用して、AWS CLI を使用した Amazon EventBridge のルールを作成します。ルール名 TestRule を、使用するルールの名前に置き換えます。

    aws events put-rule --name TestRule --event-pattern "{\"source\":[\"aws.access-analyzer\"]}"
  2. ルールをカスタマイズして、生成された結果のサブセット (特定の属性を持つ結果など) に対してのみターゲットアクションをトリガーできます。次の例は、ステータスが Active の結果に対してのみターゲットアクションをトリガーするルールを作成する方法を示しています。

    aws events put-rule --name TestRule --event-pattern "{\"source\":[\"aws.access-analyzer\"],\"detail-type\":[\"Access Analyzer Finding\"],\"detail\":{\"status\":[\"ACTIVE\"]}}"

    次の例は、ステータスが Creating から Completed のアクセスプレビューに対してのみターゲットアクションをトリガーするルールを作成する方法を示しています。

    aws events put-rule --name TestRule --event-pattern "{\"source\":[\"aws.access-analyzer\"],\"detail-type\":[\"Access Preview State Change\"],\"detail\":{\"status\":[\"COMPLETED\"]}}"
  3. 作成したルールのターゲットとして Lambda 関数を定義するには、次のコマンド例を使用します。環境に応じて、ARN のリージョンと関数名を置き換えます。

    aws events put-targets --rule TestRule --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:MyFunction
  4. ルールのターゲットを呼び出すために必要なアクセス許可を追加します。次の例は、前述の例に従って、Lambda 関数にアクセス許可を付与する方法を示しています。

    aws lambda add-permission --function-name MyFunction --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com