本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Amazon 使用基于资源的政策 EventBridge
当规则运行时 EventBridge,将调用与该规则关联的所有目标。规则可以调用 AWS Lambda 函数、发布到 Amazon SNS 主题或将事件中继到 Kinesis 直播。要对您拥有的资源进行API调用, EventBridge 需要相应的权限。对于 Lambda、Amazon SQS、SNS Amazon 和 Amazon L CloudWatch ogs 资源, EventBridge 使用基于资源的策略。对于 Kinesis 直播, EventBridge 使用基于身份的策略。
您可以使用 AWS CLI 向目标添加权限。有关如何安装和配置的信息 AWS CLI,请参阅《AWS Command Line Interface 用户指南》 AWS Command Line Interface中的使用进行设置。
亚马逊API网关权限
要使用 EventBridge 规则调用您的 Amazon API Gateway 终端节点,请将以下权限添加到您的API网关终端节点的策略中。
{ "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 Logs 是规则的目标时, EventBridge 会创建日志流,而 Lo CloudWatch gs 会将事件中的文本存储为日志条目。 EventBridge 要允许创建日志流并记录事件, CloudWatch 日志必须包含允许 EventBridge 写入 CloudWatch 日志的基于资源的策略。
如果您使用 AWS Management Console 添加 CloudWatch 日志作为规则的目标,则会自动创建基于资源的策略。如果您使用 AWS 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" }
有关更多信息,请参阅《CloudWatch 日志API参考指南》PutResourcePolicy中的。
AWS Lambda 权限
要使用 EventBridge 规则调用您的 AWS 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 函数调用 Lambda 函数的权限 AWS 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 用于计划事件。AWS Lambda
亚马逊SNS权限
EventBridge 要允许向 Amazon SNS 主题发布内容,请使用aws sns
get-topic-attributes
和aws sns set-topic-attributes
命令。
注意
您不能在 Amazon SNS 主题政策中使用Condition
屏蔽 EventBridge。
添加允许发布SNS主题 EventBridge 的权限
-
要列出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" } } -
使用字符串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
\"} -
将您在上一步中创建的字符串添加到
"Policy"
属性中的"Statement"
集合中。 -
使用
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
\"}]}"
有关更多信息,请参阅《亚马逊简单通知服务API参考SetTopicAttributes》中的操作。
亚马逊SQS权限
要允许 EventBridge 规则调用 Amazon SQS 队列,请使用aws sqs
get-queue-attributes
和aws sqs set-queue-attributes
命令。
如果SQS队列的策略为空,则首先需要创建一个策略,然后可以向其中添加权限声明。新SQS队列的策略为空。
如果SQS队列已有策略,则需要复制原始策略并将其与新语句组合以向其中添加权限声明。
添加允许 EventBridge 规则调用SQS队列的权限
-
SQS列出队列属性。在命令提示符处,输入以下命令:
aws sqs get-queue-attributes \ --queue-url https://sqs.
region
.amazonaws.com/account-id
/queue-name
\ --attribute-names Policy -
添加以下语句。
{ "Sid": "AWSEvents_custom-eventbus-ack-sqs-rule_dlq_sqs-rule-target", "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/bus-name
/rule-name
" } } } -
使用字符串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
\"}} -
使用以下内容创建名为
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
\"}}}]}" } -
使用您刚刚创建的
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
有关更多信息,请参阅《亚马逊简单队列服务开发者指南》中的亚马逊SQS政策示例。
EventBridge 管道细节
EventBridge Pipes 不支持基于资源的策略APIs,也不支持基于资源的策略条件。
但是,如果您通过接口VPC端点配置管道访问,则该VPC端点支持允许您管理对 Pipe 的访问 EventBridge 的资源策略APIs。有关更多信息,请参阅 将 Amazon EventBridge 与接口VPC终端节点配合使用