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

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

将基于资源的策略用于 AmazonEventBridge

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

您可以使用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日志权限

何时CloudWatch日志是规则的目标,EventBridge创建日志流,以及CloudWatch日志将事件中的文本存储为日志条目。允许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" }

有关更多信息,请参阅 。PutResource策略中的CloudWatch日志 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

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

    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 函数,请参阅AddPermission将 Lambda 用于计划的事件中的Amazon Lambda开发人员指南.

Amazon SNS 权限

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

注意

您不能使用Condition在 Amazon SNS 主题策略中的区块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\",\"SNS:Receive\"],\"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. 使用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\",\"SNS:Receive\"],\"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\"}]}"

有关更多信息,请参阅 。SetTopic属性中的操作Amazon Simple Notification 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 SQS 策略示例中的Amazon Simple Queue Service 开发者指南.