

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

# 适用于 RabbitMQ 的亚马逊 MQ 专用网络
<a name="private-networking"></a>

私有网络允许 Amazon MQ for RabbitMQ 代理连接到您的 VPC 中的私有资源。这些资源可能包括私有身份提供商（LDAP 或 OAuth2）、其他适用于 RabbitMQ 的亚马逊 MQ 代理或自托管的 RabbitMQ 代理。您可以私下连接到您的资源，而无需通过公共互联网。

**可用性**  
私有网络仅适用于亚马逊 MQ 的 RabbitMQ 经纪商。不支持 ActiveMQ 代理。
私有网络在 AWSGovCloud （美国）地区不可用。
私有网络仅在提供 Amazon VPC Lattice 的AWS地区可用。有关提供 VPC Lattice 的区域的更多信息，请参阅《*AWS一般*参考》[中的 Amazon VPC Lattice 终端节点和配额](https://docs.aws.amazon.com/general/latest/gr/vpc-lattice-service.html)。

**Topics**
+ [私有网络的工作原理](#private-networking-how-it-works)
+ [先决条件](#private-networking-prerequisites)
+ [设置私有网络](#private-networking-setup)
+ [使用案例](#private-networking-use-cases)
+ [修改共享资源](#private-networking-modifying)
+ [配额](#private-networking-quotas)
+ [资源状态](#private-networking-resource-states)
+ [问题排查](#private-networking-troubleshooting)

## 私有网络的工作原理
<a name="private-networking-how-it-works"></a>

私有网络使用 Amazon VPC Lattice、Res AWS ource Access Manager (AWSRAM)，并将您的代理连接AWSPrivateLink 到 VPC 中的私有目的地。

该设置包括以下组件：

1. 您的 **VPC 中的 VPC Lattice 资源网关**充当从代理到您的私有资源的流量的入口点。

1. 一个或多个 **VPC Lattice 资源配置**定义了可通过资源网关访问的私有目的地（IP 地址或 DNS 名称）。

1. **AWSRAM 资源共享**打包资源配置，并通过 `UpdateBroker` API 操作与代理关联。

1. 在代理重启期间，Amazon MQ 会在代理的 VPC 中创建资源 VPC 终端节点。这些端点建立通过您的资源网关到达已配置目的地的网络路径。

## 先决条件
<a name="private-networking-prerequisites"></a>

在设置私有网络之前，请确保满足以下条件：
+ 你有一个适用于 RabbitMQ 的亚马逊 MQ 经纪商。`RUNNING`
+ 您的 VPC 至少有一个子网。此 VPC 托管资源网关，不必与代理同一 VPC。要获得高可用性，请在多个可用区域中使用子网。
+ VPC Lattice 资源网关必须与代理共享至少一个可用区。这仅适用于单实例代理。集群代理使用所有可用的可用区。

**注意**  
经纪人不必是私有的。可公开访问的经纪人也可以使用私有网络。

## 设置私有网络
<a name="private-networking-setup"></a>

按照以下步骤为您的 Amazon MQ for RabbitMQ 经纪商设置私有网络。

### 步骤 1：创建 VPC 莱迪思资源网关
<a name="private-networking-setup-resource-gateway"></a>

在可以访问您的私有资源的 VPC 中创建 VPC 莱迪思资源网关。资源网关充当透明代理。它将流量从代理路由到配置的目的地。

1. 打开 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc/home#ResourceGateways:)。

1. 在导航窗格的 **VPC Lattice** 下，选择**资源网关**。

1. 选择**创建资源网关**。

1. 使用 VPC、子网和安全组配置资源网关。确保与您的代理共享的可用区中至少有一个子网。

有关更多信息，请参阅 *Amazon VPC Lattice 用户指南*中的[资源网关](https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-gateways.html)。

### 步骤 2：创建 VPC 莱迪思资源配置
<a name="private-networking-setup-resource-config"></a>

创建一个或多个资源配置来定义您的经纪人需要到达的私有目的地。每个资源配置都指定一个 IP 地址或 DNS 名称，该地址或 DNS 名称可在您设置资源网关的 VPC 内进行解析。

您可以选择将自定义域名添加到资源配置中。只有经过验证的域名才能用于经纪商的 DNS 解析。如果您的资源配置没有可用的域名，Amazon MQ 会通过 `DescribeSharedResources` API 操作提供 DNS 名称。您可以在代理配置中使用此 DNS 名称。

有关更多信息，请参阅《Amazon VPC Lattice User Guide》**中的 [Resource configurations](https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configurations.html)。

### 步骤 3：创建一个AWSRAM 资源共享
<a name="private-networking-setup-ram-share"></a>

创建 AWS RAM 资源共享并将您的 VPC 莱迪思资源配置添加到其中。资源共享就是您与 Amazon MQ 代理关联的资源。

**重要**  
资源共享必须允许外部委托人。仅限于您的组织 (`allowExternalPrincipals=false`) 的资源共享不能与 Amazon MQ 一起使用。

有关更多信息，请参阅《[资源*访问管理器用户指南》中的创建AWS资源*共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html)。

### 步骤 4：将资源共享与您的代理关联
<a name="private-networking-setup-associate"></a>

使用 `UpdateBroker` API 操作将 AWS RAM 资源共享与您的代理关联。您可以通过提供资源共享 ARN 列表来关联多个资源共享。

**Example 使用关联资源共享AWS CLI**  

```
aws mq update-broker \
    --broker-id {{b-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}} \
    --resource-share-arns {{arn:aws:ram:us-east-1:123456789012:resource-share/a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}
```

用你自己的值替换占位符：
+ `--broker-id`— 您的经纪人的唯一 ID（{{b-a1b2c3d4-...}}值）。
+ `--resource-share-arns`— 您的 AWS RAM 资源共享的亚马逊资源名称 (ARN)（该{{arn:aws:ram:...}}值）。

有关更多信息，请参阅[UpdateBroker](https://docs.aws.amazon.com//amazon-mq/latest/api-reference/brokers-broker-id.html)《*亚马逊 MQ REST API* 参考》。

要关联多个资源共享，请用空格分隔 ARN：

```
aws mq update-broker \
    --broker-id {{b-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}} \
    --resource-share-arns {{arn:aws:ram:us-east-1:123456789012:resource-share/a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}} {{arn:aws:ram:us-east-1:123456789012:resource-share/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333}}
```

**注意**  
如果您在重启之前`UpdateBroker`多次调用，则只有最后一次调用才会生效。该`resourceShareArns`参数是完全替换（put），而不是加法运算。每次致电`UpdateBroker`时，您都必须提供要与代理关联的资源共享 ARN 的完整列表。

**注意**  
对资源共享关联的更改需要重新启动代理才能生效。调用会将资源共享与代理`UpdateBroker`关联起来，但不会立即建立网络路径。

### 第 5 步：重启代理
<a name="private-networking-setup-reboot"></a>

重启代理以应用待处理的资源共享更改。在重启期间，Amazon MQ 会在代理的 VPC 中创建资源 VPC 终端节点。然后，它会建立通往您的私有资源的网络路径。

**Example 使用重启代理AWS CLI**  

```
aws mq reboot-broker --broker-id {{b-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}
```

重启会导致单实例代理停机，并导致集群代理短暂不可用（故障转移）。等待代理恢复到`RUNNING`状态后再继续。这通常需要 10 到 20 分钟。

有关更多信息，请参阅[RebootBroker](https://docs.aws.amazon.com//amazon-mq/latest/api-reference/brokers-broker-id-reboot.html)《*亚马逊 MQ REST API* 参考》。

### 步骤 6：验证设置
<a name="private-networking-setup-verify"></a>

使用 `DescribeSharedResources` API 操作验证您的资源是否可用。您还可以使用它来检索 DNS 名称以用于您的代理配置。

**Example 使用验证共享资源AWS CLI**  

```
aws mq describe-shared-resources --broker-id {{b-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111}}
```

设置完成后，资源共享将显示为`AVAILABLE`状态。每个资源配置都显示其关联的 DNS 名称。

有关更多信息，请参阅[DescribeSharedResources](https://docs.aws.amazon.com//amazon-mq/latest/api-reference/brokers-broker-id-shared-resources.html)《*亚马逊 MQ REST API* 参考》。

## 使用案例
<a name="private-networking-use-cases"></a>

以下各节描述了私有网络的常见用例。

### 连接到私人身份提供商
<a name="private-networking-private-idp"></a>

您可以使用私有网络将您的代理连接到私有 LDAP 或 OAuth2 身份提供商，而无需将其暴露在公共互联网上。设置私有网络后，在代理的身份验证配置中使用 `DescribeSharedResources` API 响应中的 DNS 名称。

有关配置身份验证的更多信息，请参阅[适用于 RabbitMQ 的 Amazon MQ 的 LDAP 身份验证和授权](ldap-for-amq-for-rabbitmq.md)和[OAuth 适用于 RabbitMQ 的亚马逊 MQ 的 2.0 身份验证和授权](oauth-for-amq-for-rabbitmq.md)。

### 连接另一个 Amazon MQ for RabbitMQ 经纪商
<a name="private-networking-broker-to-broker"></a>

您可以使用 Shovel 或 Federation 插件使用私有网络将您的代理连接到另一个 Amazon MQ for RabbitMQ 代理。这使私人经纪人之间能够进行通信，而不会将任何一个经纪人暴露在公共互联网上。

为其他 Amazon MQ 代理创建资源配置时，请提供代理终端节点（例如`b-xxxx.mq.us-east-1.on.aws`）作为自定义域名。这可确保 TLS 证书验证成功。默认情况下，RabbitMQ 4 及更高版本会对 Shovel 和 Federation 连接强制执行此验证。有关更多信息，请参阅 [AMQP 客户端 SSL 配置](rabbitmq-amqp-client-ssl-configuration.md)。

在 Shovel 或 Federation 配置中，使用 `DescribeSharedResources` API 响应中的 DNS 名称作为目的地。

**注意**  
对于 4 之前的 RabbitMQ 版本，Shovel 和 Federation 默认不强制执行 TLS 证书对等验证。您可以将代理端点指定为自定义域名，也可以通过配置关闭对等验证。有关更多信息，请参阅 [AMQP 客户端 SSL 配置](rabbitmq-amqp-client-ssl-configuration.md)。

### 连接到自托管的 RabbitMQ 代理
<a name="private-networking-self-hosted"></a>

您可以使用 Shovel 或联邦插件使用私有网络将您的 Amazon MQ 代理与 VPC 中的自托管 RabbitMQ 代理连接起来。创建指向自托管代理的 IP 地址或 DNS 名称的资源配置。在 Shovel 或 Federation 配置中使用 `DescribeSharedResources` API 响应中的 DNS 名称。

默认情况下，RabbitMQ 4 及更高版本会强制执行 TLS 证书对等验证。您必须使用经过验证的域名或通过配置关闭对等验证。有关更多信息，请参阅 [AMQP 客户端 SSL 配置](rabbitmq-amqp-client-ssl-configuration.md)。

## 修改共享资源
<a name="private-networking-modifying"></a>

您可以随时修改与您的代理关联的资源共享。使用更新的资源共享 ARN 列表调用 `UpdateBroker` API 操作。更改将在下次代理重启后生效。

要取消所有资源共享`UpdateBroker`与代理的关联，请使用资源共享 ARN 的空列表调用，然后重启代理。

**重要**  
您可以随时修改 AWS RAM 资源共享。您可以在资源共享中添加或删除 VPC Lattice 资源配置。在您致电`UpdateBroker`并重启代理之前，Amazon MQ 不会检测到这些更改。但是，删除先前应用于代理的资源配置会立即撤消代理对该资源的访问权限。此撤销不需要调用`UpdateBroker`或重新启动，但是在您致电`UpdateBroker`并重新启动之前，中的资源状态`DescribeSharedResources`不会更新。

## 配额
<a name="private-networking-quotas"></a>

以下配额适用于私有网络：


| 资源 | 默认限制 | 说明 | 
| --- | --- | --- | 
| AWS每个代理的 RAM 资源份额 | 10 | 超过此限制会导致 UpdateBroker API 调用失败。 | 
| 每个代理的 VPC 莱迪思资源配置 | 100 | 所有关联资源共享的总和。DescribeSharedResources响应中将多余ERROR的资源配置标记为。 | 

## 资源状态
<a name="private-networking-resource-states"></a>

使用 `DescribeSharedResources` API 操作来检查共享资源的状态。下表描述了可能的状态：


| 州 | 说明 | 
| --- | --- | 
| SETUP\_IN\_PROGRESS | 资源正在配置中。此状态在调用UpdateBroker后出现，一直持续到代理重启完成。 | 
| AVAILABLE | 资源处于活动状态，代理可以到达配置的目的地。 | 
| DELETION\_IN\_PROGRESS | 正在从代理中移除该资源。 | 
| PENDING\_CREATE | 资源已排队等候创建 VPC 终端节点。这种状态很简短，出现在代理重启工作流程中。 | 
| PENDING\_DELETE | 资源已排队等待 VPC 终端节点删除。这种状态很简短，出现在代理重启工作流程中。 | 
| ERROR | 资源配置失败。请致电DescribeSharedResources获取错误详情。UpdateBroker再次调用会将资源移回到SETUP\_IN\_PROGRESS。 | 

## 问题排查
<a name="private-networking-troubleshooting"></a>

重新启动后，资源配置处于错误状态  
使用 `DescribeSharedResources` API 操作检查错误详情。常见原因包括：  
+ VPC Lattice 资源网关不与代理共享可用区。
+ 所有资源共享的资源配置总数超过了配额。
解决问题后，`UpdateBroker`再次调用（即使使用相同的资源共享 ARN）将资源移回`SETUP_IN_PROGRESS`，然后重启代理。

UpdateBroker 因验证错误而失败  
确保进行以下配置：  
+ 资源共享 ARN 有效且归您的账户所有。
+ 资源共享与代理位于同一区域。
+ 资源共享允许外部委托人。
+ 您尚未超过每个代理的资源份额配额。

重启后代理无法访问私有资源  
请验证以下内容：  
+ 资源状态`AVAILABLE`在`DescribeSharedResources`响应中。
+ 资源网关上的安全组允许通过所需端口到达目的地的出站流量。
+ 可以从部署资源网关的 VPC 访问资源配置中的目标 IP 或 DNS 名称。
+ 您在代理配置中使用了`DescribeSharedResources`响应中正确的 DNS 名称。