

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

# 共享 AWS Cloud Map 命名空间
<a name="sharing-namespaces"></a>

AWS Cloud Map 允许命名空间所有者与其他人共享命名空间 AWS 账户 或在组织内共享其命名空间， AWS Organizations 以简化跨账户服务发现和服务注册表。这样可以更轻松地使用组织内其他人 AWS 账户 或团队管理的命名空间。 AWS 

AWS Cloud Map 与 AWS Resource Access Manager (AWS RAM) 集成以启用资源共享。 AWS RAM 是一项使您能够与其他人共享某些 AWS Cloud Map 资源 AWS 账户 或通过共享某些资源的服务 AWS Organizations。使用 AWS RAM，您可以通过创建资源共享来*共享您拥有的资源*。资源共享指定要共享的资源以及与之共享资源的使用者。使用者可包括：
+ 具体 AWS 账户 到其组织内部 AWS Organizations
+ 其组织内部的组织单位 AWS Organizations
+ 它的整个组织都在 AWS Organizations

有关的更多信息 AWS RAM，请参阅《*[AWS RAM 用户指南》](https://docs.aws.amazon.com/ram/latest/userguide/)*。

本主题说明如何共享您拥有的资源以及如何使用共享给您的资源。

**Topics**
+ [共享命名空间的注意事项](#sharing-considerations)
+ [共享 AWS Cloud Map 命名空间](sharing-share.md)
+ [停止共享 AWS Cloud Map 命名空间](sharing-unshare.md)
+ [标识共享 AWS Cloud Map 命名空间](sharing-identify.md)
+ [授予共享命名空间的权限](#granting-perms-to-share)
+ [共享命名空间的职责和权限](#sharing-perms)
+ [计费和计量](#sharing-billing)
+ [配额](#sharing-quotas)

## 共享命名空间的注意事项
<a name="sharing-considerations"></a>
+ 要共享命名空间，您必须在自己的命名空间中拥有该命名空间 AWS 账户。这意味着资源必须分配或预调配到您的账户。您无法共享已与您共享的命名空间。
+ 要与您的组织或中的组织单位共享命名空间 AWS Organizations，必须启用与共享 AWS Organizations。有关更多信息，请参阅《AWS RAM 用户指南》**中的[在 AWS Organizations中启用资源共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs)。
+ 要在共享私有 DNS 命名空间中使用 DNS 查询进行服务发现，命名空间所有者需要使用`create-vpc-association-authorization`与该命名空间关联的私有托管区域的 ID 和使用者的 VPC 进行调用。

  ```
  aws route53 create-vpc-association-authorization --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
  ```

  命名空间使用者需要使用私有托管区的 ID 调用 `associate-vpc-with-hosted-zone`。

  ```
  aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
  ```

  有关更多信息，请参阅《[Amazon *Route 53 开发者指南》 AWS 账户中的将 Amazon* VPC 与您创建的私有托管区域关联到其他区域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html)。
+ 发现与共享 DNS 命名空间关联的服务的 up-to-date网络位置后，如果服务处于不同的 VPCs位置，则可能需要配置 VPC 间连接，以便与这些服务进行通信。这可以使用 VPC 对等连接来实现。有关更多信息，请参阅《Amazon Virtual Private Cloud VPC 对等连接指南》**中的[创建或删除 VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)。
+ 您不能使用列`ListOperations`出其他账户对共享命名空间执行的操作。
+ 共享命名空间不支持标记。

# 共享 AWS Cloud Map 命名空间
<a name="sharing-share"></a>

 当您与其他 AWS 账户 （使用者）共享您拥有的 AWS Cloud Map 命名空间时，这些账户无需临时凭证即可发现命名空间中服务的 up-to-date网络位置。

要共享命名空间，必须将其添加到资源共享。资源共享是一项 AWS RAM 资源，可让您跨 AWS 账户共享资源。资源共享指定要共享的资源以及与之共享资源的使用者。要将命名空间添加到新的资源共享，必须先使用[AWS RAM 控制台](https://console.aws.amazon.com/ram)创建资源共享。

如果您是组织中的一员， AWS Organizations 并且启用了组织内部共享，则会自动授予组织中的消费者访问共享命名空间的权限。否则，消费者会收到加入资源共享的邀请，并在接受邀请后被授予访问共享命名空间的权限。

您可以使用 AWS RAM 控制台或共享您拥有的命名空间 AWS CLI。

------
#### [ AWS RAM console ]

**使用 AWS RAM 控制台共享您拥有的命名空间**  
请参阅《AWS RAM 用户指南》**中的[在 AWS RAM中创建资源共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html)。

------
#### [ AWS CLI ]

**要共享您拥有的命名空间，请使用 AWS CLI**  
使用 AWS RAM [create-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html) 命令。

------

# 停止共享 AWS Cloud Map 命名空间
<a name="sharing-unshare"></a>

当命名空间不再共享时，使用者将无法再访问该命名空间以及与之关联的任何服务和实例 AWS 账户。这包括消费者在有权访问命名空间时在命名空间中创建的资源。

要停止共享您拥有的命名空间，必须将其从资源共享中移除。您可以使用 AWS RAM 控制台或 AWS CLI.

------
#### [ AWS RAM console ]

**使用 AWS RAM 控制台停止共享您拥有的命名空间**  
请参阅《AWS RAM 用户指南》**中的[更新资源共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update.html)。

------
#### [ AWS CLI ]

**要停止共享您拥有的命名空间，请使用 AWS CLI**  
使用 [disassociate-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/disassociate-resource-share.html) 命令。

------

# 标识共享 AWS Cloud Map 命名空间
<a name="sharing-identify"></a>

所有者和使用者可以使用 AWS Cloud Map 控制台和识别共享命名空间。 AWS CLI可以使用`ResourceOwner`属性来识别命名空间所有者。使用`CreatedByAccount`属性可以识别在共享命名空间中创建服务或注册实例的。 AWS 账户 

------
#### [ AWS Cloud Map console ]

**使用 AWS Cloud Map 控制台标识共享命名空间**

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

1. 在**命名空间**页面的**资源所有者**下，您可以找到拥有该命名空间 AWS 账户 的 ID。

1. 选择要标识的命名空间的**域名**。

1. 在**命名空间:*namespace-name***页面的**命名空间信息**部分的**资源所有者**下，您可以找到拥有 AWS 账户 该命名空间的 ID。

------
#### [ AWS CLI ]

要使用标识共享命名空间 AWS CLI，请使用 [list-nam](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/list-namespaces.html) espaces 命令。该命令返回您拥有的命名空间和与您共享的命名空间。该`ResourceOwner`字段显示命名空间所有者的 AWS 账户 ID。

以下`list-namespaces`呼叫是通过账户拨打的`111122223333`。

```
aws servicediscovery list-namespaces
```

输出：

```
{
    "Namespaces": [
        {
            "Arn": "arn:aws:servicediscovery:us-west-2:111122223333:namespace/ns-abcdef01234567890",
            "CreateDate": 1585354387.357,
            "Id": "ns-abcdef01234567890",
            "Name": "local",
            "Properties": {
                "DnsProperties": {
                    "HostedZoneId": "Z06752353VBUDTC32S84S"
                },
                "HttpProperties": {
                    "HttpName": "local"
                 }
            },
            "Type": "DNS_PRIVATE",
            "ServiceCount": 2,
           "ResourceOwner": "111122223333"
        },
        {
            "Arn": "arn:aws:servicediscovery:us-west-2:444455556666:namespace/ns-021345abcdef6789",
            "CreateDate": 1586468974.698,
            "Description": "Shared second namespace",
            "Id": "ns-021345abcdef6789",
            "Name": "My-second-namespace",
            "Properties": {
                "DnsProperties": {},
                "HttpProperties": {
                    "HttpName": "Shared-second-namespace"
                }
            },
            "Type": "HTTP",
            "ServiceCount": 0,
            "ResourceOwner": "444455556666"
        }
    ]
}
```

在这种情况下，命名空间`ns-abcdef01234567890`由创建和拥有，命名空间`ns-021345abcdef6789`由`111122223333`创建和拥有`444455556666`。命名空间`ns-021345abcdef6789`是`111122223333`按账户与账户共享的`444455556666`。

------

## 授予共享命名空间的权限
<a name="granting-perms-to-share"></a>

IAM 委托人需要一组最低权限才能共享命名空间。我们建议使用`AWSCloudMapFullAccess`和`AWSResourceAccessManagerFullAccess`托管策略来确保您的 IAM 委托人拥有共享和使用共享命名空间所需的权限。

如果您使用自定义 IAM 策略，则需要使用`servicediscovery:PutResourcePolicy``servicediscovery:GetResourcePolicy`、和`servicediscovery:DeleteResourcePolicy`操作才能共享命名空间。这些是仅限权限的 IAM 操作。如果 IAM 委托人未获得这些权限，则在尝试使用共享命名空间时将发生错误 AWS RAM。

有关如何 AWS RAM 使用 IAM 的更多信息，请参阅*AWS RAM 用户指南*中的[如何 AWS RAM 使用 IAM](https://docs.aws.amazon.com/ram/latest/userguide/security-iam-policies.html)。

## 共享命名空间的职责和权限
<a name="sharing-perms"></a>

命名空间所有者和使用者可以对共享命名空间执行不同的操作。

### 拥有者的权限
<a name="perms-owner"></a>

命名空间所有者可以对共享命名空间执行以下操作：
+ 访问与命名空间关联的服务，包括由消费者账户创建的服务和注册到这些服务的实例。
+ 撤消对命名空间的访问权限，包括对由消费者账户创建的服务以及注册到这些服务的实例的访问权限。
+ 为其他账户配置权限，以便在使用者或命名空间所有者在共享命名空间中创建的服务中注册和取消注册实例。
+ 删除服务并注销实例，包括使用者账户创建的服务和注册的实例。
+ 更新或删除共享命名空间。

### 使用者的权限
<a name="perms-consumer"></a>

命名空间使用者可以在共享命名空间上执行以下操作：
+ 在命名空间中创建和删除服务。
+ 在命名空间中创建的服务中注册和取消注册实例。
+ 发现注册到在命名空间中创建的服务的实例。

使用者无法更新或删除共享命名空间。失去对共享命名空间的访问权限后，消费者账户也将失去对他们在命名空间中创建的服务的访问权限。

## 计费和计量
<a name="sharing-billing"></a>

所有者需要为他们在共享命名空间中注册的任何实例以及注册这些实例时创建的任何 Route 53 运行状况检查付费。消费者需要为他们在命名空间中注册的任何实例以及注册这些实例时创建的任何 Route 53 运行状况检查付费。如果共享命名空间是 DNS 命名空间，则命名空间所有者需要为在该命名空间中创建服务时创建的 Route 53 DNS 记录付费。所有者需要为他们`DiscoverInstancesRevision`拨打的任何电话`DiscoverInstances`和电话付费。消费者需要为他们`DiscoverInstancesRevision`拨`DiscoverInstances`打的任何电话付费。

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

每个区域的共享命名空间仅计入命名空间所有者的命名空间配额。使用者在共享命名空间中注册的实例计入所有者的每个命名空间配额中的实例。如果使用者在共享命名空间中创建服务，则该服务中注册的任何实例都计入每个服务配额的使用者实例。如果所有者在共享命名空间中创建服务，则根据服务配额，在该服务中注册的任何实例都计入所有者的实例。