Amazon EventBridge を使用した AWS Identity and Access Management Access Analyzer のモニタリング
このトピックでは、Amazon EventBridge を使用した IAM Access Analyzer の結果のモニタリングと、アクセスプレビュー方法について説明します。EventBridge は、Amazon CloudWatch Events の新しいバージョンです。
結果のイベント
IAM Access Analyzer は、各結果の生成時、既存の結果の状態の変更時、および結果の削除時に EventBridge にイベントに送信します。結果および結果に関する通知を受信するには、Amazon EventBridge でイベントルールを作成する必要があります。イベントルールを作成するときに、ルールに基づいてトリガーするターゲットアクションを指定することもできます。例えば、新しい結果のイベントが IAM Access Analyzer から返されたときに Amazon SNS トピックをトリガーするイベントルールを作成できます。
アクセスプレビューイベント
IAM Access Analyzer は、アクセスプレビューごとにイベントを EventBridge に送信し、ステータスを変更します。これには、アクセスプレビューが最初に作成されたとき (ステータス Creating)、アクセスプレビューが完了したとき (ステータス Completed)、またはアクセスプレビューの作成が失敗したとき (ステータス Failed) が含まれます。Access Preview に関する通知を受信するには、EventBridge でイベントルールを作成する必要があります。イベントルールを作成するときに、ルールに基づいてトリガーするターゲットアクションを指定することができます。たとえば、完了したアクセスプレビューのイベントが IAM Access Analyzer から返されたときに Amazon SNS トピックをトリガーするイベントルールを作成できます。
イベントの通知頻度
IAM Access Analyzer は、アカウント内でイベントが発生してから 1 時間以内に新しい結果や、ステータス更新に関するイベントを EventBridge に送信します。IAM Access Analyzer は、保存期間の期限が切れたために解決済みの結果が削除されたときにも EventBridge にイベントを送信します。結果を生成したアナライザーが削除されたために結果が削除された場合は、アナライザーが削除されてから約 24 時間後に Eventbridge にイベントが送信されます。結果が削除されても、結果のステータスは変更されません。代わりに、isDeleted
属性が true
に設定されます。また、IAM Access Analyzer は、新しく作成されたアクセスプレビューおよびアクセスプレビューステータスの変更に関するイベントを EventBridge に送信します。
外部アクセスの検出結果イベントの例
次に示すのは、EventBridge に送信される IAM 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:::amzn-s3-demo-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"
}
IAM Access Analyzer は、エラー結果に関するイベントも EventBridge に送信します。エラー結果は、IAM 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:::amzn-s3-demo-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" }
未使用のアクセスの検出結果関連イベントの例
次に示すのは、EventBridge に送信される IAM Access Analyzer 未使用アクセスの結果イベントの例です。表示されている id
は、Eventbridge のイベントの ID です。詳細については、「EventBridge のイベントとイベントパターン」を参照してください。
detail
オブジェクトでは、accountId
属性と region
属性の値は、結果で報告されたアカウントとリージョンを参照します。isDeleted
属性は、イベントが削除対象の結果に関連するものであるかどうかを示します。id
は結果 ID です。
{
"version": "0",
"id": "dc7ce3ee-114b-3243-e249-7f10f9054b21",
"detail-type": "Unused Access Finding for IAM entities",
"source": "aws.access-analyzer",
"account": "123456789012",
"time": "2023-09-29T17:31:40Z",
"region": "us-west-2",
"resources": [
"arn:aws:access-analyzer:us-west-2:123456789012:analyzer/integTestLongLivingAnalyzer-DO-NOT-DELETE"
],
"detail": {
"findingId": "b8ae0460-5d29-4922-b92a-ba956c986277",
"resource": "arn:aws:iam::111122223333:role/FindingIntegTestFakeRole",
"resourceType": "AWS::IAM::Role",
"accountId": "111122223333",
"createdAt": "2023-09-29T17:29:18.758Z",
"updatedAt": "2023-09-29T17:29:18.758Z",
"analyzedAt": "2023-09-29T17:29:18.758Z",
"previousStatus": "",
"status": "ACTIVE",
"version": "62160bda-8e94-46d6-ac97-9670930d8ffb",
"isDeleted": false,
"findingType": "UnusedPermission",
"numberOfUnusedServices": 0,
"numberOfUnusedActions": 1
}
}
IAM Access Analyzer は、エラー結果に関するイベントも EventBridge に送信します。エラー結果は、IAM Access Analyzer が分析対象のリソースにアクセスできない場合に生成されます。エラー結果のイベントには、次の例に示すように error
属性が含まれます。
{
"version": "0",
"id": "c2e7aa1a-4df7-7652-f33e-64113b8997d4",
"detail-type": "Unused Access Finding for IAM entities",
"source": "aws.access-analyzer",
"account": "111122223333",
"time": "2023-10-31T20:26:12Z",
"region": "us-west-2",
"resources": [
"arn:aws:access-analyzer:us-west-2:111122223333:analyzer/ba811f91-de99-41a4-97c0-7481898b53f2"
],
"detail": {
"findingId": "b01a34f2-e118-46c9-aef8-0d8526b495c7",
"resource": "arn:aws:iam::123456789012:role/TestRole",
"resourceType": "AWS::IAM::Role",
"accountId": "444455556666",
"createdAt": "2023-10-31T20:26:08.647Z",
"updatedAt": "2023-10-31T20:26:09.245Z",
"analyzedAt": "2023-10-31T20:26:08.525Z",
"previousStatus": "",
"status": "ACTIVE",
"version": "7c7a72a2-7963-4c59-ac71-f0be597010f7",
"isDeleted": false,
"findingType": "UnusedIAMRole",
"error": "INTERNAL_ERROR"
}
}
アクセスプレビューイベントの例
次の例では、Access Preview を作成するときに EventBridge に送信された最初のイベントのデータを示しています。resources
配列は、アクセスプレビューが関連付けられているアナライザーの ARN を持つシングルトンです。detail
オブジェクトでは、id
はアクセスプレビューIDを参照し、configuredResources
はアクセスプレビューが作成されたリソースを参照します。status
は Creating
で、アクセスプレビューのステータスを参照します。previousStatus
は、アクセスプレビューが作成されたばかりであるため、指定されていません。
{ "account": "111122223333", "detail": { "accessPreviewId": "aaaabbbb-cccc-dddd-eeee-ffffaaaabbbb", "configuredResources": [ "arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-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:::amzn-s3-demo-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/
) を開きます。 -
次の値を使用して、検索イベントまたはアクセスプレビューイベントをモニタリングする EventBridge ルールを作成します。
-
ルールタイプ では、イベントパターンを持つルール] を選択します。
-
イベントソース では、その他] を選択します。
-
[Event pattern] (イベントパターン) で [Custom patterns (JSON editor)] (カスタムパターン (JSON エディター)) を選択し、次のイベントパターン例のいずれかをテキストエリアに貼り付けます。
-
外部アクセスまたは未使用のアクセスの検出結果イベントに基づいてルールを作成するには、次のパターン例を使用します。
{ "source": [ "aws.access-analyzer" ], "detail-type": [ "Access Analyzer Finding" ] }
-
未使用のアクセスの検出結果イベントのみに基づいてルールを作成するには、次のパターン例を使用します。
{ "source": [ "aws.access-analyzer" ], "detail-type": [ "Unused Access Finding for IAM entities" ] }
注記
外部アクセスの検出結果イベントのみに基づいてルールを作成することはできません。
-
アクセスプレビューイベントに基づいてルールを作成するには、次のパターン例を使用します。
{ "source": [ "aws.access-analyzer" ], "detail-type": [ "Access Preview State Change" ] }
-
-
[Target types] (ターゲットタイプ) で [AWS service] AWS Lambda のサービス) を選択し、[Select a target] (ターゲットを選択) でターゲット (Amazon SNS のトピックや 関数など) を選択します。ターゲットは、ルールで定義したイベントパターンに一致するイベントが返されたときにトリガーされます。
ルールの作成に関する詳細については、「Amazon EventBridge ユーザーガイド」の「イベントに反応する Amazon EventBridge ルールの作成」を参照してください。
-
CLI を使用したイベントルールの作成
-
以下を使用して、AWS CLI を使用した Amazon EventBridge のルールを作成します。ルール名
TestRule
を、使用するルールの名前に置き換えます。aws events put-rule --name
TestRule
--event-pattern "{\"source\":[\"aws.access-analyzer\"]}" -
ルールをカスタマイズして、生成された結果のサブセット (特定の属性を持つ結果など) に対してのみターゲットアクションをトリガーできます。次の例は、ステータスが 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\"]}}"
-
作成したルールのターゲットとして Lambda 関数を定義するには、次のコマンド例を使用します。環境に応じて、ARN のリージョンと関数名を置き換えます。
aws events put-targets --rule
TestRule
--targets Id=1,Arn=arn:aws:lambda:us-east-1
:111122223333
:function:MyFunction
-
ルールのターゲットを呼び出すために必要なアクセス許可を追加します。次の例は、前述の例に従って、Lambda 関数にアクセス許可を付与する方法を示しています。
aws lambda add-permission --function-name
MyFunction
--statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com