本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将基于资源的策略用于 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-attributes
和aws sns set-topic-attributes
命令。
您不能使用Condition
在 Amazon SNS 主题策略中的区块EventBridge.
添加允许 EventBridge 发布 SNS 主题的权限
-
要列出 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" } } -
使用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
\"} -
将您在上一步中创建的字符串添加到
"Statement"
在中收藏"Policy"
属性。 -
使用
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-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": "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
" } } } -
使用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
有关更多信息,请参阅 。Amazon SQS 策略示例中的Amazon Simple Queue Service 开发者指南.