將以資源為基礎的政策用於 Amazon EventBridge - Amazon EventBridge

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將以資源為基礎的政策用於 Amazon EventBridge

EventBridge 中,規則觸發時,與該規則關聯的所有目標都會被叫用。規則可以叫用 AWS Lambda 函數,發佈到 Amazon SNS 主題,或將事件轉送到 Kinesis 串流。為了根據您所擁有的資源進行 API 呼叫,EventBridge 需要適當的許可。對於 Lambda、Amazon SNS、Amazon SQS 和 Amazon CloudWatch Logs 資源,EventBridge 使用以資源為基礎的政策。對於 Kinesis 串流,EventBridge 會使用 以身分為基礎的 政策。

您可以使用 AWS CLI 將權限新增至目標。如需如何安裝和設定 AWS CLI 的資訊,請參閱《AWS Command Line Interface 使用者指南》中的使用 AWS Command Line Interface 開始設定

Amazon API 閘道許可

若要使用 EventBridge 規則叫用 Amazon API 閘道端點,請在 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 Logs 許可

當 CloudWatch Logs 是規則的目標時,EventBridge 會建立日誌串流,且 CloudWatch Logs 會將事件中的文字存為日誌項目。若要讓 EventBridge 建立日誌串流並記錄事件,CloudWatch Logs 必須包含以資源為基礎的政策,此政策可讓 EventBridge 寫入 CloudWatch Logs。

如果您使用 AWS Management Console 將 CloudWatch Logs 新增為規則的目標,系統就會自動建立以資源為基礎的政策。如果您使用 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" }

如需詳細資訊,請參閱《Amazon 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 使用 AWS CLI 叫用 Lambda 函數的上述權限
  • 在命令提示中,輸入以下命令:

    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-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 Notification Service API 參考中的 SetTopicAttributes

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": "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" } } }
  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 Simple Queue Service 開發人員指南》中的 Amazon SQS Policy Examples

EventBridge 管道詳細資訊

EventBridge 管道不支援以資源為基礎的政策,且無支援以資源為基礎的政策條件的 API。