使用 Amazon EventBridge 监控 AWS IAM Access Analyzer - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用 Amazon EventBridge 监控 AWS IAM Access Analyzer

通过本主题中的信息了解如何使用 Amazon EventBridge 监控 Access Analyzer 结果。EventBridge 是新版本的 Amazon CloudWatch Events。

发现事件

Access Analyzer 针对每个生成的结果、对现有结果状态的更改以及删除结果的时间向 EventBridge 发送一个事件。要接收结果以及有关结果的通知,您必须在 Amazon EventBridge 中创建事件规则。在创建事件规则时,您还可以根据规则指定要触发的目标操作。例如,您可以创建一个事件规则,该规则会在从 Access Analyzer 接收新结果的事件时触发 Amazon SNS 主题。

事件通知频率

自您的账户中发生事件后约 1 小时内,Access Analyzer 会将新结果的事件以及带状态更新的结果发送到 EventBridge。此外,Access Analyzer 还会在因保留期已过而删除已解析的结果时向 EventBridge 发送事件。对于因生成它们的分析器被删除而被删除的结果,事件将在分析器被删除后大约 24 小时发送到 EventBridge。删除结果时,不会更改其状态。相反,会将 isDeleted 属性设置为 true

事件示例

以下是发送到 EventBridge 的示例 Access Analyzer 事件。列出的 id 是 EventBridge 中事件的 ID。要了解更多信息,请参阅 EventBridge 中的事件和事件模式

detail 对象中,accountIdregion 属性的值是指结果中报告的账户和区域。isDeleted 属性指示事件是否来自要删除的结果。

{ "id": "22222222-dcba-4444-dcba-333333333333", "detail-type": "Access Analyzer Finding", "source": "aws.access-analyzer", "account": "111122223333", "time": "2019-11-21T01:22:33Z", "region": "us-west-2", "resources": [ "arn:aws:access-analyzer:us-west-2:111122223333:analyzer/MyAnalyzer" ], "detail": { "version": "1.0", "accountId": "111122223333", "region": "us-west-2", "isDeleted": false, COMPLETE_ACCESS_ANALYZER_GET_FINDING_RESPONSE } }

"id" 是结果 ID。"resources" 数组是一个单例,其中包含生成结果的分析器的 ARN。

以下示例显示了从 Access Analyzer API 的 GetFinding 操作发送到 EventBridge 的事件的数据。

"version": "0", "id": "22222222-dcba-4444-dcba-333333333333", "status": "ACTIVE", "resourceType": "AWS::S3::Bucket", "resource": "arn:aws:s3:::my-bucket", "createdAt": "2019-11-20T04:58:50Z", "analyzedAt": "2019-11-21T01:22:22Z", "updatedAt": "2019-11-21T01:14:07Z", "principal": {"AWS": "999988887777"}, "action": ["s3:GetObject"], "condition": {}, "isPublic": false

Access Analyzer 还会将错误结果的事件发送到 EventBridge。错误结果是在 Access Analyzer 无法访问它尝试分析的资源时生成的结果。错误结果的事件包括一个 error 属性,如以下示例所示。

"id": "22222222-dcba-4444-dcba-333333333333", "status": "ACTIVE", "resourceType": "AWS::S3::Bucket", "resource": "arn:aws:s3:::my-bucket", "error": "ACCESS_DENIED", "createdAt": "2019-10-16T19:21:44.244Z", "analyzedAt": "2019-10-16T19:21:44.244Z", "updatedAt": "2019-10-16T19:21:44.244Z"

使用控制台创建事件规则

以下过程介绍了如何使用控制台创建事件规则。

通过以下网址打开 Amazon EventBridge 控制台:https://console.amazonaws.cn/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" ] }
  5. 选择 Save (保存)

  6. Select targets (选择目标) 下,选择规则的 Target (目标) 操作,例如 Amazon SNS 主题或 AWS Lambda 函数。

  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. 您可以自定义规则以便仅针对一小部分生成的结果(例如,具有特定属性的结果)触发目标操作。以下示例演示了如何创建仅针对状态为“活动”的结果触发目标操作的规则。

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