

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

# 將以資源為基礎的政策用於 Amazon EventBridge
<a name="eb-use-resource-based"></a>

EventBridge 中，[規則](eb-rules.md)觸發時，與該規則關聯的所有[目標](eb-targets.md)都會被調用。規則可以叫用 AWS Lambda 函數、發佈至 Amazon SNS 主題，或將事件轉送至 Kinesis 串流。為了根據您所擁有的資源進行 API 呼叫，EventBridge 需要適當的許可。針對 Lambda、Amazon SNS、Amazon SQS 和 Amazon CloudWatch Logs 資源，EventBridge 使用以資源為基礎的政策。針對 Kinesis 串流，EventBridge 會使用[以身分為基礎的](eb-use-identity-based.md)政策。

**重要**  
對於使用資源型政策 (Lambda、Amazon SNS、Amazon SQS 和 Amazon CloudWatch Logs) 的目標，請勿在目標組態`RoleArn`中指定 。當您`RoleArn`為這些目標類型指定 時，事件交付可能會失敗，尤其是啟用 AWS KMS 加密的 Amazon SQS 和 Amazon SNS 目標。僅針對這些目標使用資源型政策。

您可以使用 AWS CLI 將許可新增至目標。如需如何安裝和設定 的資訊 AWS CLI，請參閱*AWS Command Line Interface 《 使用者指南*》中的[使用 進行設定 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)。

**Topics**
+ [Amazon API Gateway 許可](#eb-api-gateway-permissions)
+ [CloudWatch Logs 許可](#eb-cloudwatchlogs-permissions)
+ [AWS Lambda 許可](#eb-lambda-permissions)
+ [Amazon SNS 許可](#eb-sns-permissions)
+ [Amazon SQS 許可](#eb-sqs-permissions)
+ [EventBridge 管道細節](#eb-pipes-identity-diff)

## Amazon API Gateway 許可
<a name="eb-api-gateway-permissions"></a>

若要使用 EventBridge 規則調用 Amazon API Gateway 端點，請在 API Gateway 端點的政策中新增下列權限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "execute-api:Invoke",
            "Condition": {
                "ArnEquals": {
                "aws:SourceArn": "arn:aws:events:{{us-east-1}}:{{123456789012}}:rule/{{rule-name}}"
                }
            },
            "Resource": [
            "arn:aws:execute-api:{{us-east-1}}:{{123456789012}}:{{API-id}}/stage/GET/{{api}}"
            ]
        }
    ]
}
```

------

## CloudWatch Logs 許可
<a name="eb-cloudwatchlogs-permissions"></a>

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

如果您使用 AWS 管理主控台 將 CloudWatch Logs 新增為規則的目標，則會自動建立以資源為基礎的政策。如果您使用 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 Logs 的資源政策 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/*:*"}]}'
  ```

如需詳細資訊，請參閱《CloudWatch API 參考指南》** 中的 [PutResourcePolicy](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutResourcePolicy.html)。

## AWS Lambda 許可
<a name="eb-lambda-permissions"></a>

若要使用 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 函數 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](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) 和[使用 Lambda 與排程事件](https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html)。

## Amazon SNS 許可
<a name="eb-sns-permissions"></a>

若要允許 EventBridge 發佈到 Amazon SNS 主題，請使用 `aws sns get-topic-attributes` 和 `aws 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:SourceAccount\":\"{{account-id}}\"}}}]}", 
           "TopicArn": "arn:aws:sns:{{region}}:{{account-id}}:{{topic-name}}", 
           "SubscriptionsPending": "0"
       }
   }
   ```

1. 使用 [JSON 到字串轉換器](https://tools.knowledgewalls.com/jsontostring)將以下語句轉換為字符串。

   ```
   {
     "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}}\"}
   ```

1. 將您在上一個步驟中建立的字串新增至 `"Policy"` 屬性內的 `"Statement"` 集合中。

1. 使用 `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}}\"}]}"
   ```

如需詳細資訊，請參閱《Amazon Simple Notification Service API 參考》**中的 [ SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)。

## Amazon SQS 許可
<a name="eb-sqs-permissions"></a>

若要允許 EventBridge 規則調用 Amazon SQS 佇列，請使用 `aws sqs get-queue-attributes` 和 `aws 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
   ```

1. 添加以下陳述式。

   ```
   {
         "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}}"
           }
         }
       }
   ```

1. 使用 [JSON 到字串轉換器](https://tools.knowledgewalls.com/jsontostring)將前面的語句轉換為字串。下列為將政策轉換為字串後的狀態。

   ```
   {\"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}}\"}}
   ```

1. 建立稱為 `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}}\"}}}]}"
   }
   ```

1. 使用剛建立的 `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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSExamples.html)。

## EventBridge 管道細節
<a name="eb-pipes-identity-diff"></a>

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

不過，如果您透過介面 VPC 端點設定管道存取，則該 VPC 端點支援資源政策，可讓您管理 EventBridge 管道 APIs存取。如需詳細資訊，請參閱[搭配界面 VPC 端點使用 Amazon EventBridge](eb-related-service-vpc.md)