

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

# 使用 Amazon SQS 控制台配置 Amazon SQS 队列
<a name="sqs-configuring"></a>

使用 Amazon SQS 控制台来配置和管理 Amazon SQS 队列及其特征。您也可以：
+ 启用服务器端加密以增强安全性。
+ 关联一个死信队列来处理未处理的消息。
+ 设置触发器来调用 Lambda 函数，以实现事件驱动型处理。

# 适用于 Amazon SQS 的基于属性的访问控制
<a name="sqs-abac"></a>

## 什么是 ABAC？
<a name="sqs-abac-whatis"></a>

基于属性的访问控制 (ABAC) 是一种授权过程，它根据附加到用户和资源的标签来定义权限。 AWS ABAC 根据属性和值提供精细而灵活的访问控制，降低与重新配置的基于角色的策略相关的安全风险，并集中审计和访问策略管理。有关 ABAC 的更多详细信息，请参阅《IAM 用户指南》**中的[什么是 AWS ABAC](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。

Amazon SQS 支持 ABAC，允许您根据与 Amazon SQS 队列关联的标签和别名来控制对 Amazon SQS 队列的访问权限。Amazon SQS 中启用 ABAC 的标签和别名条件键授权 IAM 主体使用 Amazon SQS 队列，而无需编辑策略或管理授权。要进一步了解 ABAC 条件键，请参阅《服务授权参考》**中的 [Condition keys for Amazon SQS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsqs.html#amazonsqs-policy-keys)。

借助 ABAC，您可以使用标签为 Amazon SQS 队列配置 IAM 访问权限和策略，这有助于您扩展权限管理。您可以使用添加到每个业务角色的标签在 IAM 中创建单个权限策略，而不必在每次添加新资源时都更新策略。您还可以向 IAM 主体附加标签以创建 ABAC 策略。您可以将 ABAC 策略设计为在进行调用的 IAM 用户角色上的标签与 Amazon SQS 队列标签匹配时允许 Amazon SQS 操作。要了解有关添加标签的更多信息 AWS，请参阅[AWS 标记策略和](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。[Amazon SQS 成本分配标签](sqs-queue-tags.md)

**注意**  
ABAC for Amazon SQS 目前已在 AWS 所有提供亚马逊 SQS 的商业区域推出，但以下情况除外：  
亚太地区（海得拉巴）
亚太地区（墨尔本）
欧洲（西班牙） 
欧洲（苏黎世）

## 为什么应该在 Amazon SQS 中使用 ABAC？
<a name="sqs-abac-benefits"></a>

以下是在 Amazon SQS 中使用 ABAC 的一些好处：
+ ABAC for Amazon SQS 需要更少的权限策略。您无需为不同工作职能创建不同策略。您可以使用适用于多个队列的资源和请求标签，这样可以减少操作开销。
+ 使用 ABAC 快速扩大团队规模。当资源在创建过程中被适当地标记时，将根据标签自动授予新资源的权限。
+ 使用 IAM 主体的权限来限制资源访问。您可以为 IAM 主体创建标签，并使用它们来限制对与 IAM 主体标签匹配的特定操作的访问权限。这可以帮助您自动执行授予请求权限的过程。
+ 跟踪谁在访问您的资源。您可以通过查看 AWS CloudTrail中的用户属性来确定会话的身份。

**Topics**
+ [什么是 ABAC？](#sqs-abac-whatis)
+ [为什么应该在 Amazon SQS 中使用 ABAC？](#sqs-abac-benefits)
+ [访问控制标签](sqs-abac-tagging-resource-control.md)
+ [创建 IAM 用户和 Amazon SQS 队列](sqs-abac-creating-queues.md)
+ [测试基于属性的访问控制](sqs-abac-testing-access-control.md)

# Amazon SQS 中用于访问控制的标记
<a name="sqs-abac-tagging-resource-control"></a>

以下是在 Amazon SQS 中使用标签进行访问控制的示例。该 IAM 策略限制 IAM 用户只能针对包括特定资源标签（键：environment，值：production）的所有队列执行所有 Amazon SQS 操作。有关更多信息，请参阅[使用标签进行基于属性的访问控制和 Organizations。 AWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tagging_abac.html)

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessForProd",
      "Effect": "Allow",
      "Action": "sqs:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/environment": "prod"
        }
      }
    }
  ]
}
```

------

# 创建 IAM 用户和 Amazon SQS 队列
<a name="sqs-abac-creating-queues"></a>

以下示例说明如何使用 AWS 管理控制台 和创建 ABAC 策略来控制对 Amazon SQS 的访问。 CloudFormation

## 使用 AWS 管理控制台
<a name="sqs-abac-creating-queues-console"></a>

**创建 IAM 用户**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 从左侧导航窗格中选择**用户**。

1. 选择**添加用户**，然后在**用户名**文本框中输入名称。

1. 选择**访问密钥 - 编程访问**框，然后选择**下一步: 权限**。

1. 选择**下一步: 标签**。

1. 将标签键添加为 `environment`，将标签值添加为 `beta`。

1. 选择**下一步: 审核**，然后选择**创建用户**。

1. 复制访问密钥 ID 和秘密访问密钥并将其存储在安全位置。

**添加 IAM 用户权限**

1. 选择您创建的 IAM 用户。

1. 选择**添加内联策略**。

1. 在 JSON 选项卡上，粘贴以下策略。

1. 选择**查看策略**。

1. 选择**创建策略**。

## 使用 AWS CloudFormation
<a name="sqs-abac-creating-queues-cf"></a>

使用以下示例 CloudFormation 模板创建附有内联策略和 Amazon SQS 队列的 IAM 用户：

```
AWSTemplateFormatVersion: "2010-09-09"
Description: "CloudFormation template to create IAM user with custom inline policy"
Resources:
    IAMPolicy:
        Type: "AWS::IAM::Policy"
        Properties:
            PolicyDocument: |
                {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [
                        {
                            "Sid": "AllowAccessForSameResTag",
                            "Effect": "Allow",
                            "Action": [
                                "sqs:SendMessage",
                                "sqs:ReceiveMessage",
                                "sqs:DeleteMessage"
                            ],
                            "Resource": "*",
                            "Condition": {
                                "StringEquals": {
                                    "aws:ResourceTag/environment": "${aws:PrincipalTag/environment}"
                                }
                            }
                        },
                        {
                            "Sid": "AllowAccessForSameReqTag",
                            "Effect": "Allow",
                            "Action": [
                                "sqs:CreateQueue",
                                "sqs:DeleteQueue",
                                "sqs:SetQueueAttributes",
                                "sqs:tagqueue"
                            ],
                            "Resource": "*",
                            "Condition": {
                                "StringEquals": {
                                    "aws:RequestTag/environment": "${aws:PrincipalTag/environment}"
                                }
                            }
                        },
                        {
                            "Sid": "DenyAccessForProd",
                            "Effect": "Deny",
                            "Action": "sqs:*",
                            "Resource": "*",
                            "Condition": {
                                "StringEquals": {
                                    "aws:ResourceTag/stage": "prod"
                                }
                            }
                        }
                    ]
                }
                
            Users: 
              - "testUser"
            PolicyName: tagQueuePolicy

    IAMUser:
        Type: "AWS::IAM::User"
        Properties:
            Path: "/"
            UserName: "testUser"
            Tags: 
              - 
                Key: "environment"
                Value: "beta"
```

# 在 Amazon SQS 中测试基于属性的访问控制
<a name="sqs-abac-testing-access-control"></a>

以下示例展示了如何在 Amazon SQS 中测试基于属性的访问控制。

## 创建一个队列，将标签键设置为环境，将标签值设置为生产
<a name="sqs-abac-testing-access-control-create-queue"></a>

运行此 AWS CLI 命令来测试创建队列，标签键设置为 environment，标签值设置为 prod。如果您没有 AWS CLI，则可以为您的计算机[下载并配置](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)它。

```
aws sqs create-queue --queue-name prodQueue —region us-east-1 —tags "environment=prod"
```

您会收到来自 Amazon SQS 端点的 `AccessDenied` 错误：

```
An error occurred (AccessDenied) when calling the CreateQueue operation: Access to the resource <queueUrl> is denied.
```

这是因为 IAM 用户的标签值与 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html) API 调用中传递的标签不一致。请记住，我们向 IAM 用户应用了一个标签，其键设置为 `environment`，值设置为 `beta`。

## 创建一个队列，将标签键设置为环境，将标签值设置为测试
<a name="sqs-abac-testing-access-control-create-env"></a>

运行此 CLI 命令来测试创建队列，将标签键设置为 `environment`，将标签值设置为 `beta`。

```
aws sqs create-queue --queue-name betaQueue —region us-east-1 —tags "environment=beta"
```

您会收到一条消息，确认队列已成功创建，如下所示。

```
{
"QueueUrl": "<queueUrl>“
}
```

## 向队列发送消息
<a name="sqs-abac-testing-access-control-sending-message"></a>

运行此 CLI 命令以测试向队列发送消息。

```
aws sqs send-message --queue-url <queueUrl> --message-body testMessage
```

响应会显示消息已成功传送到 Amazon SQS 队列。IAM 用户权限允许您向带有 `beta` 标签的队列发送消息。响应包括 `MD5OfMessageBody` 和包含消息的 `MessageId`。

```
{
"MD5OfMessageBody": "<MD5OfMessageBody>",
"MessageId": "<MessageId>"
}
```

# 使用 Amazon SQS 控制台配置队列参数
<a name="sqs-configure-queue-parameters"></a>

[创建](creating-sqs-standard-queues.md#step-create-standard-queue)或[编辑](sqs-configure-edit-queue.md)队列时，可配置以下参数：
+ **可见性超时** - 从队列（由一个使用者）收到的消息对其他消息使用者不可见的时间长度。相关详情，请参阅[可见性超时](sqs-visibility-timeout.md)。
**注意**  
使用控制台配置可见性超时可配置队列中所有消息的超时值。要配置单条或多条消息的超时时间，必须使用其中一条 AWS SDKs。
+ **消息保留期** - Amazon SQS 保留留在队列中的消息的时间长度。默认情况下，队列会将消息保留四天。您可以配置队列以将消息保留最多 14 天。相关详情，请参阅[消息保留期](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)。
+ **传送延迟** - Amazon SQS 在传送已添加到队列的消息之前将会延迟的时间。相关详情，请参阅[传送延迟](sqs-delay-queues.md)。
+ **最大消息大小** - 此队列的最大消息大小。相关详情，请参阅[最大消息大小](sqs-s3-messages.md)。
+ **接收消息等待时间** - Amazon SQS 在队列收到接收请求后等待消息变为可用的最长时间。有关更多信息，请参阅 [Amazon SQS 短轮询和长轮询](sqs-short-and-long-polling.md)。
+ **启用基于内容的重复数据删除 —** Amazon SQS 可以 IDs 根据消息正文自动创建重复数据删除。有关更多信息，请参阅 [Amazon SQS FIFO 队列](sqs-fifo-queues.md)。
+ **启用高吞吐量 FIFO** - 用于为队列中的消息启用高吞吐量。选择此选项会将相关选项（[重复数据删除范围](enable-high-throughput-fifo.md)和 [FIFO 吞吐量限制](enable-high-throughput-fifo.md)）更改为为 FIFO 队列启用高吞吐量所需的设置。有关更多信息，请参阅[Amazon SQS 中 FIFO 队列的高吞吐量](high-throughput-fifo.md)和[Amazon SQS 消息配额](quotas-messages.md)。
+  **重新驱动允许策略**：定义哪些源队列可以将此队列用作死信队列。有关更多信息，请参阅 [在 Amazon SQS 中使用死信队列](sqs-dead-letter-queues.md)。



**为现有队列配置队列参数（控制台）**

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。选择队列并选择**编辑**。

1. 滚动到**配置**部分。

1. 对于**可见性超时**，输入持续时间和单位。范围为 0 秒至 12 小时。默认值为 30 秒。

1. 对于**消息保留期**，输入持续时间和单位。范围为 1 分钟至 14 天。默认值为 4 天。

1. 对于标准队列，为**接收消息等待时间**输入一个值。范围为 0-20 秒。默认值为 0 秒，这会设置[短轮询](sqs-short-and-long-polling.md)。任何非零值都会设置长轮询。

1. 对于**传送延迟**，输入持续时间和单位。范围为 0 秒到 15 分钟。默认值为 0 秒。

1. 对于**最大消息大小**，输入一个值。范围从 1 KiB 到 1024 KiB 不等。默认值为 1024 KiB。

1. 对于 FIFO 队列，选择**启用基于内容的重复数据删除**以启用基于内容的重复数据删除。默认情况下，该设置处于禁用状态。

1. （可选）要让 FIFO 队列启用更高的吞吐量以便在队列中发送和接收消息，请选择**启用高吞吐量 FIFO**。

   选择此选项会将相关选项（**重复数据删除范围**和 **FIFO 吞吐量限制**）更改为为 FIFO 队列启用高吞吐量所需的设置。如果更改使用高吞吐量 FIFO 所需的任何设置，则队列正常吞吐量生效，重复数据删除按规定进行。有关更多信息，请参阅[Amazon SQS 中 FIFO 队列的高吞吐量](high-throughput-fifo.md)和[Amazon SQS 消息配额](quotas-messages.md)。

1. 对于**重新驱动允许策略**，请选择**启用**。从以下选项中选择：**全部允许**（默认）、**按队列**或**全部拒绝**。选择**按队列**时，按 Amazon 资源名称 (ARN) 指定最多 10 个源队列的列表。

1. 配置完队列参数后，选择**保存**。

# 在 Amazon SQS 中配置访问策略
<a name="sqs-configure-add-permissions"></a>

[编辑](sqs-configure-edit-queue.md)队列时，您可以配置其访问策略，以控制哪些用户可以与之交互。
+ 访问策略定义了哪些账户、用户和角色具有访问该队列的权限。
+ 它指定了允许的操作，例如 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) 或 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)。
+ 默认情况下，只有队列所有者有权发送和接收消息。

****为现有队列配置访问策略（控制台）****

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 选择队列并选择**编辑**。

1. 滚动到**访问策略**部分。

1. 在输入框中编辑**访问策略语句**。有关访问策略语句的更多信息，请参阅 [Amazon SQS 中的身份和访问管理](security-iam.md)。

1. 配置完访问策略后，选择**保存**。

# 使用 SQS 托管的加密密钥为队列配置服务器端加密
<a name="sqs-configure-sqs-sse-queue"></a>

除了[默认](creating-sqs-standard-queues.md#step-create-standard-queue) Amazon SQS 托管服务器端加密 (SSE) 选项外，Amazon SQS 托管 SSE (SSE-SQS) 还允许您创建自定义托管服务器端加密，以使用 SQS 托管加密密钥来保护通过消息队列发送的敏感数据。使用 SSE-SQS，您无需创建和管理加密密钥，也无需修改代码即可加密数据。SSE-SQS 可让您安全地传输数据，并帮助您满足严格的加密合规性和监管要求，而无需额外费用。

SSE-SQS 使用 256 位高级加密标准 (AES-256) 加密保护静态数据。一旦 Amazon SQS 收到消息，SSE 就会对消息进行加密。Amazon SQS 以加密形式存储消息，只有在将消息发送给授权使用者时才会将其解密。

**注意**  
默认 SSE 选项仅在不指定加密属性的情况下创建队列时才有效。
Amazon SQS 允许您关闭所有队列加密。因此，关闭 KMS-SSE 不会自动启用 SQS-SSE。如果您希望在关闭 KMS-SSE 后启用 SQS-SSE，则必须在请求中添加属性更改。

**为队列配置 SSE-SQS 加密（控制台）**
**注意**  
默认情况下，使用 HTTP（非 TLS）端点创建的任何新队列都不会启用 SSE-SQS 加密。使用 HTTPS 或 [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) 端点创建 Amazon SQS 队列是一种安全最佳实践。

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 选择队列，然后选择**编辑**。

1. 展开**加密**。

1. 对于**服务器端加密**，选择**启用**（默认）。
**注意**  
启用 SSE 后，对加密队列的匿名 `SendMessage` 和 `ReceiveMessage` 请求将被拒绝。Amazon SQS 安全最佳实践建议不要使用匿名请求。如果您想向 Amazon SQS 队列发送匿名请求，请确保禁用 SSE。

1. 选择 **Amazon SQS 密钥 (SSE-SQS)**。使用此选项不会产生额外费用。

1. 选择**保存**。

# 使用 Amazon SQS 控制台为队列配置服务器端加密
<a name="sqs-configure-sse-existing-queue"></a>

为了保护队列消息中的数据，Amazon SQS 默认为所有新创建的队列启用服务器端加密 (SSE)。Amazon SQS 与 Amazon Web Services Key Management Service (Amazon Web Services KMS) 集成，用于管理服务器端加密 (SSE) 的 [KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)。有关使用 SSE 的信息，请参阅[Amazon SQS 中的静态加密](sqs-server-side-encryption.md)。



您分配给队列的 KMS 密钥必须具有密钥政策，其中包括所有有权使用该队列的主体的权限。有关信息，请参阅[密钥管理](sqs-key-management.md)。

如果您不是 KMS 密钥的拥有者，或者您登录的账户没有 `kms:ListAliases` 和 `kms:DescribeKey` 权限，则您无法在 Amazon SQS 控制台上查看有关 KMS 密钥的信息。要求 KMS 密钥的拥有者授予您这些权限。有关更多信息，请参阅[密钥管理](sqs-key-management.md)。

[创建](creating-sqs-standard-queues.md#step-create-standard-queue)或[编辑](sqs-configure-edit-queue.md)队列时，您可以配置 SSE-KMS。

**为现有队列配置 SSE-KMS（控制台）**

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 选择队列，然后选择**编辑**。

1. 展开**加密**。

1. 对于**服务器端加密**，选择**启用**（默认）。
**注意**  
启用 SSE 后，对加密队列的匿名 `SendMessage` 和 `ReceiveMessage` 请求将被拒绝。Amazon SQS 安全最佳实践建议不要使用匿名请求。如果您想向 Amazon SQS 队列发送匿名请求，请确保禁用 SSE。

1. 选择 **AWS Key Management Service 密钥 (SSE-KMS)**。

   控制台会显示 KMS 密钥的**描述**、**账户**和 **KMS 密钥 ARN**。

1. 为队列指定 KMS 密钥 ID。有关更多信息，请参阅 [关键术语](sqs-server-side-encryption.md#sqs-sse-key-terms)。

   1. 选择**选择 KMS 密钥别名**选项。

   1. 默认密钥是 Amazon SQS 的 Amazon Web Services 托管 KMS 密钥。要使用此密钥，请从 **KMS 密钥**列表中选择它。

   1. 要使用您 Amazon Web Services 账户中的自定义 KMS 密钥，请从 **KMS 密钥**列表中选择该密钥。有关创建自定义 KMS 密钥的说明，请参阅《Amazon Web Services Key Management Service 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

   1. 要使用不在列表中的自定义 KMS 密钥或来自其他 Amazon Web Services 账户的自定义 KMS 密钥，请选择**输入 KMS 密钥别名**，并输入 KMS 密钥 Amazon 资源名称 (ARN)。

1. （可选）对于**数据密钥重用周期**，指定一个介于 1 分钟到 24 小时之间的值。默认值为 5 分钟。有关更多信息，请参阅 [了解数据密钥重用周期](sqs-key-management.md#sqs-how-does-the-data-key-reuse-period-work)。

1. 配置完 SSE-KMS 后，选择**保存**。

# 使用 Amazon SQS 控制台为队列配置成本分配标签
<a name="sqs-configure-tag-queue"></a>

您可以向 Amazon SQS 队列添加成本分配标签来帮助组织和标识这些队列。有关更多信息，请参阅 [Amazon SQS 成本分配标签](sqs-queue-tags.md)。
+ “详情”页面上的“标记”选项卡会显示队列的标签。
+ 在[创建](creating-sqs-standard-queues.md#step-create-standard-queue)或[编辑](sqs-configure-edit-queue.md)队列时，您可以添加或修改标签。

**为现有队列配置标签（控制台）**

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 选择队列并选择**编辑**。

1. 滚动到**标签**部分。

1. 添加、修改或删除队列标签：

   1. 要添加标签，请选择**添加新标签**，输入**键**和**值**，然后选择**添加新标签**。

   1. 要更新标签，请更改其**键**和**值**。

   1. 要删除标签，请选择键值对旁边的**删除**。

1. 配置完标签后，选择**保存**。

# 使用 Amazon SQS 控制台为队列订阅 Amazon SNS 主题
<a name="sqs-configure-subscribe-queue-sns-topic"></a>

您可以为一个或多个 Amazon SQS 队列订阅 Amazon SNS 主题。当您将消息发布到主题时，Amazon SNS 将向每个已订阅队列发送此消息。Amazon SQS 负责管理订阅并处理所需的权限。有关 Amazon SNS 的更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》**中的[什么是 Amazon SNS？](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)

当您为 Amazon SQS 队列订阅 Amazon SNS 主题时，Amazon SNS 会使用 HTTPS 将消息转发给 Amazon SQS。有关将 Amazon SNS 用于加密的 Amazon SQS 队列的信息，请参阅[为 AWS 服务配置 KMS 权限](sqs-key-management.md#compatibility-with-aws-services)。

**重要**  
Amazon SQS 支持每个访问策略最多 20 个语句。订阅 Amazon SNS 主题会添加这样一个语句。超过此数量将导致主题订阅交付失败。

**为队列订阅 Amazon SNS 主题（控制台）**

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 从队列列表中，选择 queue（排队）以订阅 Amazon SNS 主题。

1. 从 **Actions**（操作）中，选择 **Subscribe to Amazon SNS topic**（订阅 Amazon SNS 主题）。

1. 从**指定可用于此队列的 Amazon SNS 主题**菜单中，为队列选择 Amazon SNS 主题。

   如果 SNS 主题未列出，请选择**输入 Amazon SNS 主题 ARN**，然后输入主题的 Amazon 资源名称（ARN）。

1. 选择**保存**。

1. 要验证订阅，请向主题发布消息，并在队列中查看消息。有关更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》**中的 [Amazon SNS 消息发布](https://docs.aws.amazon.com/sns/latest/dg/sns-publishing.html)。

## 跨账户订阅
<a name="cross-account-subscriptions"></a>

如果您的 Amazon SQS 队列和 Amazon SNS 主题 AWS 账户不同，则需要额外的权限。

**主题所有者（账户 A）**

修改亚马逊 SNS 主题的访问策略以允许亚马逊 SQS 队列 AWS 账户 进行订阅。策略语句示例：

```
{
  "Effect": "Allow",
  "Principal": { "AWS": "arn:aws:iam::111122223333:root" },
  "Action": "sns:Subscribe",
  "Resource": "arn:aws:sns:us-east-1:123456789012:MyTopic"
}
```

此策略允许账户 `111122223333` 订阅 `MyTopic`。

**队列所有者（账户 B）**

修改 Amazon SQS 队列的访问策略以允许 Amazon SNS 主题发送消息。策略语句示例：

```
{
  "Effect": "Allow",
  "Principal": { "Service": "sns.amazonaws.com" },
  "Action": "sqs:SendMessage",
  "Resource": "arn:aws:sqs:us-east-1:111122223333:MyQueue",
  "Condition": {
    "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:MyTopic" }
  }
}
```

此策略允许 `MyTopic` 向 `MyQueue` 发送消息。

## 跨区域订阅
<a name="cross-region-subscriptions"></a>

要订阅其他主题中的 Amazon SNS 主题 AWS 区域，请确保：
+ Amazon SNS 主题的访问策略允许跨区域订阅。
+ Amazon SQS 队列的访问策略允许 Amazon SNS 主题跨区域发送消息。

有关更多信息，请参阅[亚马逊*简单通知服务开发者指南中的向不同区域的 Amazon SQS 队列 AWS Lambda 或函数发送 Amazon* SNS 消息](https://docs.aws.amazon.com/sns/latest/dg/sns-cross-region-delivery.html)。

# 配置 Amazon SQS 队列以触发函数 AWS Lambda
<a name="sqs-configure-lambda-function-trigger"></a>

您可以使用 Lambda 函数处理来自 Amazon SQS 队列的消息。Lambda 会轮询队列并同步调用您的函数，将一批消息作为事件传递。

**配置可见性超时**   
将队列可见性超时设置为[函数超时](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-common-summary)的至少六倍。这可以确保在函数处理前一批任务期间被节流时，Lambda 有足够的时间进行重试。

**使用死信队列（DLQ）**  
指定一个死信队列，用于捕获 Lambda 函数无法处理的消息。

**处理多个队列和函数**  
Lambda 函数可通过为每个队列创建独立的事件源来处理多个队列。您还可以将多个 Lambda 函数关联到同一队列。

**加密队列的权限**  
如果您将加密队列与 Lambda 函数相关联，但 Lambda 不轮询消息，请将 `kms:Decrypt` 权限添加到您的 Lambda 执行角色中。

**限制**  
队列和 Lambda 函数必须位于同一 AWS 区域。  
使用默认密钥（Amazon SQS 的AWS 托管 KMS 密钥）的[加密队列](sqs-server-side-encryption.md)无法在其他队列中调用 Lambda 函数。 AWS 账户

有关实施详细信息，请参阅《AWS Lambda 开发人员指南》**中的[将 AWS Lambda 与 Amazon SQS 结合使用](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html)。

## 先决条件
<a name="configure-lambda-function-trigger-prerequisites"></a>

要配置 Lambda 函数触发器，您必须满足以下要求：
+ 如果您使用用户，则您的 Amazon SQS 角色必须包括以下权限：
  + `lambda:CreateEventSourceMapping`
  + `lambda:ListEventSourceMappings`
  + `lambda:ListFunctions`
+ Lambda 执行角色必须包括以下权限：
  + `sqs:DeleteMessage`
  + `sqs:GetQueueAttributes`
  + `sqs:ReceiveMessage`
+ 如果您将加密队列与 Lambda 函数相关联，请将 `kms:Decrypt` 权限添加到 Lambda 执行角色中。

有关更多信息，请参阅 [管理 Amazon SQS 中的访问权限概述](sqs-overview-of-managing-access.md)。

**配置队列以触发 Lambda 函数（控制台）**

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 在**队列**页面上，选择要配置的队列。

1. 在队列页面上，选择 **Lambda 触发器**选项卡。

1. 在 **Lambda 触发器**页面上，选择 Lambda 触发器。

   如果列表中没有您需要的 Lambda 触发器，请选择**配置 Lambda 函数触发器**。输入 Lambda 函数的 Amazon 资源名称 (ARN)，或选择现有资源。然后选择**保存**。

1. 选择**保存**。控制台会保存配置，并显示队列的**详细信息**页面。

   在**详细信息**页面上，**Lambda 触发器**选项卡显示 Lambda 函数及其状态。Lambda 函数大约需要 1 分钟时间与队列关联。

1. 要验证配置的结果，请[向您的队列发送消息](creating-sqs-standard-queues.md#sqs-send-messages)，然后在 Lambda 控制台中查看触发的 Lambda 函数。

# 使用亚马逊自动将 AWS 服务发送到亚马逊 SQS 的通知 EventBridge
<a name="sqs-automating-using-eventbridge"></a>

Amazon EventBridge 允许您近乎实时地自动处理 AWS 服务 和响应事件，例如应用程序问题或资源更改。
+ 您可以创建规则来筛选特定事件，并在规则与事件匹配时定义自动化操作。
+ EventBridge 支持多个目标，包括接收 JSON 格式事件的 Amazon SQS 标准队列和 FIFO 队列。

有关更多信息，请参阅《[亚马逊*[ EventBridge 用户指南》中的亚马逊 EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/)*目标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)。

# 使用 Amazon SQS 发送带有属性的消息
<a name="sqs-using-send-message-with-attributes"></a>

对于标准队列和 FIFO 队列，您可以在消息中添加结构化元数据，包括时间戳、地理空间数据、签名和标识符。有关更多信息，请参阅 [Amazon SQS 消息属性](sqs-message-metadata.md#sqs-message-attributes)。

**使用 Amazon SQS 控制台向队列发送带有属性的消息**

1. 打开 Amazon SQS 控制台，网址为。[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. 在导航窗格中，选择**队列**。

1. 在**队列**页面，选择队列。

1. 选择**发送和接收消息**。

1. 输入消息属性参数。

   1. 在名称文本框中，输入最多 256 个字符的唯一名称。

   1. 对于属性类型，选择**字符串**、**数字**或**二进制**。

   1. （可选）输入自定义数据类型。例如，您可以添加 **byte**、**int** 或 **float** 作为**数字**的自定义数据类型。

   1. 在值文本框中，输入消息属性值。  
![\[Amazon SQS 控制台：展示“消息属性”部分。\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-tutorials-sending-message-with-attributes.png)

1. 要添加其他消息属性，请选择**添加新属性**。  
![\[Amazon SQS 控制台：展示“消息属性”部分中的“删除”按钮。\]](http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-tutorials-sending-message-with-attributes-custom-attribute.png)

1. 您可在发送消息之前随时修改属性值。

1. 要删除属性，请选择**删除**。要删除第一个属性，请关闭**消息属性**。

1. 完成将属性添加到消息之后，选择**发送消息**。发送消息后，控制台会显示一条成功消息。要查看有关已发送消息的消息属性的信息，请选择**查看详细信息**。选择**完成**，以关闭**消息详细信息**对话框。