将基于资源的策略用于Amazon EventBridge - Mazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将基于资源的策略用于Amazon EventBridge

规则在中运行 EventBridge,所有的目标调用与规则关联的。规则可以调用Amazon Lambda函数,发布到 Amazon SNS 主题,或者将事件中继到 Kinesis 流。要针对您拥有的资源进行 API 调用, EventBridge 需要适当的权限。适用于 Lambda、Amazon SNS 和Amazon SQS 和Amazon CloudWatch 记录资源, EventBridge 使用基于资源的策略。对于 Kinesis Streams, EventBridge 使用基于身份政策。

您将Amazon CLI将权添加到目标。有关如何安装和配置 Amazon CLI 的信息,请参阅 Amazon Command Line Interface 用户指南中的使用 Amazon Command Line Interface 进行设置

Amazon API Gateway

使用调用您的 Amazon API Gateway 终端节点 EventBridge 规则,将以下权限添加到您的 API Gateway 终端节点的策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "execute-api:Invoke", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } }, "Resource": [ "execute-api:/stage/GET/api" ] } ] }

CloudWatch Logs 权限

何时 CloudWatch 日志是规则的目标, EventBridge 创建日志流,以及 CloudWatch 日志将事件中的文本存储为日志条目。允许 EventBridge 创建日志流并记录事件, CloudWatch 日志必须包含基于资源的策略 EventBridge 写入 CloudWatch 日志。

如果您将Amazon Web Services Management Console添加 CloudWatch Logs 作为规则的目标,则会自动创建基于资源的策略。如果您将Amazon CLI要添加目标,且策略尚不存在,您必须创建它。

以下示例允许 EventBridge 写入名称以开头的所有日志组/aws/events/. 如果您对这些类型的日志使用其他命名策略,请相应地调整示例。

{ "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow", "Principal": { "Service": ["events.amazonaws.com", "delivery.logs.amazonaws.com"] }, "Resource": "arn:aws:logs:region:account:log-group:/aws/events/*:*", "Sid": "TrustEventsToStoreLogEvent" } ], "Version": "2012-10-17" }

有关更多信息,请参阅 。PutResourcePolicy中的CloudWatch Logs API 参考指南.

Amazon Lambda 权限

调用Amazon Lambda使用使用使用使用使用使用使用使用使用 EventBridge 规则,将以下权限添加到您的 Lambda 函数。

{ "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:region:account-id:function:function-name", "Principal": { "Service": "events.amazonaws.com" }, "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } }, "Sid": "InvokeLambdaFunction" }

添加以上启用的权限 EventBridge 使用调用 Lambda 函数Amazon CLI

  • 在命令提示符处,输入以下命令:

    Amazonlambda add-permission --statement-id "InvokeLambdaFunction" \ --action "lambda:InvokeFunction" \ --principal "events.amazonaws.com" \ --function-name "arn:aws:lambda:region:account-id:function:function-name" \ --source-arn "arn:aws:events:region:account-id:rule/rule-name"

有关设置启用 “权限” 的更多信息 EventBridge 要调用 Lambda 函数,请参阅。AddPermission将 Lambda 用于计划的事件中的Amazon Lambda开发人员指南.

Amazon SNS 权限

允许 EventBridge 要发布到 Amazon SNS 主题,请使用使用Amazonsns get-topic-attributesAmazonsns set-topic-attributes命令。

注意

你不能使用使用使用使用ConditionAmazon SNS 主题策略中的块 EventBridge.

添加启用 EventBridge 发布 SNS 主题

  1. 要列出 SNS 主题的属性,请使用以下命令。

    Amazonsns get-topic-attributes --topic-arn "arn:aws:sns:region:account-id:topic-name"

    以下示例显示新的 SNS 主题的结果。

    { "Attributes": { "SubscriptionsConfirmed": "0", "DisplayName": "", "SubscriptionsDeleted": "0", "EffectiveDeliveryPolicy": "{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}", "Owner": "account-id", "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\"],\"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}]}", "TopicArn": "arn:aws:sns:region:account-id:topic-name", "SubscriptionsPending": "0" } }
  2. 使用一个JSON 到字符串转换器将以下语句转换成字符串。

    { "Sid": "PublishEventsToMyTopic", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:region:account-id:topic-name" }

    在将语句转换为字符串后,它如下所示。

    {\"Sid\":\"PublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}
  3. 将您在上一步中创建的字符串添加到"Statement"在中集合"Policy"属性。

  4. 使用Amazonsns set-topic-attributes命令来设置新策略。

    Amazonsns set-topic-attributes --topic-arn "arn:aws:sns:region:account-id:topic-name" \ --attribute-name Policy \ --attribute-value "{\"Version\":\"2012-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\"],\"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}, {\"Sid\":\"PublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}]}"

有关更多信息,请参阅 。SetTopicAttributes中的操作Amazon Service API 参考.

Amazon SQS 权限

允许 EventBridge 调用 Amazon SQS 队列,使用使用使用Amazonsqs get-queue-attributesAmazonsqs set-queue-attributes命令。

如果 SQS 队列的策略为空,则首先需要创建一个策略,然后才能向其添加权限语句。新 SQS 队列的策略为空。

如果 SQS 队列已有一个策略,您需要复制原始策略,并将其与新语句组合,以便向中添加 permication 语句。

添加启用 EventBridge 调用 SQS 队列的规则

  1. 列出 SQS 队列属性。在命令提示符处,输入以下命令:

    Amazonsqs get-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attribute-names Policy
  2. 添加以下语句。

    { "Sid": "EventsToMyQueue", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:region:account-id:queue-name", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } } }
  3. 使用一个JSON 到字符串转换器将上述语句转换成字符串。在将策略转换为字符串后,它如下所示。

    {\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region:account-id:queue-name\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region:account-id:rule/rule-name\"}}
  4. 使用以下内容创建名为 set-queue-attributes.json 的文件。

    { "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"arn:aws:sqs:region:account-id:queue-name/SQSDefaultPolicy\",\"Statement\":[{\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region:account-id:queue-name\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region:account-id:rule/rule-name\"}}}]}" }
  5. 使用设置策略属性set-queue-attributes.json您刚刚创建作为输入的文件,如以下命令中所示。

    Amazonsqs set-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attributes file://set-queue-attributes.json

有关更多信息,请参阅 。Amazon SQS 策略示例中的Amazon Simple Queue.