

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 Amazon 使用基于资源的政策 EventBridge
<a name="eb-use-resource-based"></a>

当[规则](eb-rules.md)运行时 EventBridge，将调用与该规则关联的所有[目标](eb-targets.md)。规则可以调用 AWS Lambda 函数、发布到 Amazon SNS 主题或将事件中继到 Kinesis 直播。要对您拥有的资源进行 API 调用， EventBridge 需要相应的权限。对于 Lambda、亚马逊 SNS、亚马逊 SQS 和 CloudWatch 亚马逊日志资源，使用基于资源的策略。 EventBridge 对于 Kinesis 直播， EventBridge 使用[基于身份](eb-use-identity-based.md)的策略。

**重要**  
对于使用基于资源的策略的目标（Lambda、Amazon SNS、Amazon SQS 和 CloudWatch 亚马逊日志），请不要`RoleArn`在目标配置中指定。当您`RoleArn`为这些目标类型指定时，事件传输可能会失败，尤其是对于启用了加密的 Amazon SQS 和 Amazon SNS 目标 AWS KMS 。仅对这些目标使用基于资源的策略。

您可以使用 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 日志权限](#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 网关终端节点的策略中添加以下权限。

------
#### [ 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 日志权限
<a name="eb-cloudwatchlogs-permissions"></a>

当 CloudWatch Logs 是规则的目标时， EventBridge 会创建日志流，而 Lo CloudWatch gs 会将事件中的文本存储为日志条目。 EventBridge 要允许创建日志流并记录事件， CloudWatch 日志必须包含允许 EventBridge 写入 CloudWatch 日志的基于资源的策略。

如果您使用 AWS 管理控制台 添加 CloudWatch 日志作为规则的目标，则会自动创建基于资源的策略。如果您使用 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/*:*"}]}'
  ```

有关更多信息，请参阅*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 函数调用 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](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)和将 [Lambda 用于计划事件](https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html)。AWS Lambda *

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

有关更多信息，请参阅《*亚马逊简单通知服务 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 策略示例](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSExamples.html)。**

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

EventBridge Pipes 不支持基于资源的策略 APIs ，也不支持基于资源的策略条件。

但是，如果您通过接口 VPC 终端节点配置管道访问，则该 VPC 终端节点支持允许您管理对 Pi EventBridge pe 的访问的资源策略 APIs。有关更多信息，请参阅 [将 Amazon EventBridge 与接口 VPC 端点结合使用](eb-related-service-vpc.md)。