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

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

使用的基于资源的策略 EventBridge

规则运行时 EventBridge,将调用与该规则关联的所有目标。规则可以调用Amazon Lambda函数、发布到 Amazon SNS 主题或将事件转发到 Kinesis 直播。要对您拥有的资源执行 API 调用, EventBridge 需要相应权限。对于 Lambda、Amazon SNS、Amazon SQS 和亚马逊 CloudWatch 日志资源, EventBridge 使用基于资源的策略。对于 Kinesis 直播, EventBridge 使用基于身份的策略。

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

Amazon API Gateway

要使用 EventBridge 规则调用您Amazon API Gateway 终端节点,请将以下权限添加到 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 日志权限

当 Log CloudWatch s 是规则的目标时, EventBridge 会创建日志流,Lo CloudWatch gs 将事件中的文本存储为日志条目。 EventBridge 要允许创建日志流和记录事件, CloudWatch 日志必须包含基于资源的策略,该策略 EventBridge 允许写入 CloudWatch 日志。

如果您使用Amazon Web Services Management Console添加 CloudWatch 日志作为规则的目标,则会自动创建基于资源的策略。如果您使用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" }

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

Amazon Lambda 权限

要使用 EventBridge 规则调用您的Amazon Lambda函数,请将以下权限添加到 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
  • 在命令提示符处,输入以下命令:

    aws lambda 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 函数的权限的更多信息,请参阅Amazon Lambda开发者指南中的AddPermission和在预定事件中使用 Lambda

Amazon SNS 权限

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

注意

您不能在 Amazon SNS 主题策略中使用Condition屏蔽 EventBridge。

添加允许发布 EventBridge SNS 主题的权限
  1. 要列出 SNS 主题的属性,请使用以下命令。

    aws sns 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. 将您在上一步中创建的字符串添加到"Policy"属性内的"Statement"集合中。

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

    aws sns 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\"}]}"

有关更多信息,请参阅 Amazon Simple Notificat SetTopicAttributesion Service API 参考中的操作。

Amazon SQS 权限

要允许 EventBridge 规则调用 Amazon SQS 队列,请使用aws sqs get-queue-attributesaws sqs set-queue-attributes命令。

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

如果 SQS 队列已有策略,则需要复制原始策略并将其与新语句合并以向其添加权限语句。

添加允许 EventBridge 规则调用 SQS 队列的权限
  1. 列出 SQS 队列属性。在命令提示符处,输入以下命令:

    aws sqs 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的文件作为输入来设置策略,如以下命令所示。

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

有关更多信息,请参阅 Amazon S imple Queue Service 开发人员指南中的 Amazon SQS 策略示例

EventBridge 管道细节

EventBridge Pipes 不支持基于资源的策略,也没有支持基于资源的策略 API。