本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为亚马逊使用基于资源的政策 EventBridge
当规则运行时 EventBridge,将调用与该规则关联的所有目标。规则可以调用 AWS Lambda 函数、发布到 Amazon SNS 主题或将事件中继到 Kinesis 流。要对您拥有的资源进行 API 调用, EventBridge 需要相应的权限。对于 Amazon CloudWatch Logs 资源, EventBridge 使用基于资源的策略。对于 Lambda、Amazon SNS 和 Amazon SQS 资源, EventBridge 可以使用 IAM 执行角色或基于资源的策略。对于 Kinesis 流, EventBridge 使用基于身份的策略。
重要
对于 Amazon L CloudWatch ogs 目标,请勿RoleArn在目标配置中指定。对于 Lambda、Amazon SNS 和 Amazon SQS 目标,您可以使用 IAM 执行角色或基于资源的策略。如果您为 Lambda、Amazon SNS 或 Amazon SQS 目标指定,请确保该角色具有所需的权限(例如lambda:InvokeFunctionsns:Publish、或)。RoleArn sqs:SendMessage如果未配置执行角色,则对目标资源 EventBridge 使用基于资源的策略。
您可以使用 AWS CLI 向目标添加权限。有关如何安装和配置的信息 AWS CLI,请参阅《AWS Command Line Interface 用户指南》 AWS Command Line Interface中的 “使用进行设置”。
Amazon API Gateway 权限
要使用 EventBridge 规则调用您的亚马逊 API 网关终端节点,请在您的 API 网关终端节点的策略中添加以下权限。
CloudWatch 日志权限
当 CloudWatch 日志是规则的目标时, EventBridge 创建日志流, CloudWatch 日志将事件中的文本存储为日志条目。 EventBridge 要允许创建日志流和记录事件, CloudWatch 日志必须包含允许写入 CloudWatch 日志的基于资源 EventBridge 的策略。
如果您使用将 CloudWatch 日志添加 AWS 管理控制台 为规则的目标,则会自动创建基于资源的策略。如果您使用 AWS CLI 添加目标,但该策略尚不存在,则必须创建该策略。
以下基于资源的策略示例 EventBridge 允许写入所有名称以开头的/aws/events/日志组。如果您对这些类型的日志使用不同的命名策略,请相应地调整资源 ARN。
{ "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com", "delivery.logs.amazonaws.com" ] }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:region:account-id:log-group:/aws/events/*:*" }
要为 CloudWatch 日志创建资源策略,请使用 AWS CLI
-
在命令提示符处,输入以下命令:
aws logs put-resource-policy --policy-name EventBridgeToCWLogsPolicy \ --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["events.amazonaws.com","delivery.logs.amazonaws.com"]},"Action":["logs:CreateLogStream","logs:PutLogEvents"],"Resource":"arn:aws:logs:region:account-id:log-group:/aws/events/*:*"}]}'
有关更多信息,请参阅PutResourcePolicy《CloudWatch 日志 API 参考指南》。
AWS Lambda 权限
要使用 EventBridge 规则调用您的 AWS Lambda 函数,请将以下权限添加到 Lambda 函数的策略中。
注意
或者,您可以通过lambda:InvokeFunction权限在目标上配置 IAM 执行角色。 Resource-based 只有在目标上未配置执行角色时才需要策略。
{ "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 函数 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 函数的权限的更多信息,请参阅AWS Lambda 开发人员指南中的AddPermission和在计划事件中使用 Lambda。
Amazon SNS 权限
要允许发布 EventBridge 到 Amazon SNS 主题,请使用aws sns
get-topic-attributes和aws sns set-topic-attributes命令。
添加允许 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\"],\"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\":{\"StringEquals\":{\"AWS:SourceAccount\":\"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:SourceAccount\":\"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》中的操作。
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": "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
有关更多信息,请参阅《Amazon Simple Queue Service 开发人员指南》中的 Amazon SQS 策略示例。
EventBridge 管道细节
EventBridge 管道不支持基于资源的策略,也没有支持基于资源的策略条件的 API。
但是,如果您通过接口 VPC 终端节点配置管道访问,则该 VPC 终端节点支持资源策略,使您能够管理对 EventBridge 管道 API 的访问权限。有关更多信息,请参阅 将 Amazon EventBridge 与接口 VPC 终端节点配合使用。