

# 공유 AWS Cloud Map 네임스페이스를 사용하는 Amazon ECS Service Connect
<a name="service-connect-shared-namespaces"></a>

Amazon ECS Service Connect는 동일한 AWS 리전 내 여러 AWS 계정에서 공유 AWS Cloud Map 네임스페이스 사용을 지원합니다. 이 기능을 사용하면 다른 AWS 계정에서 실행되는 서비스가 Service Connect를 통해 서로 검색하고 통신할 수 있는 분산 애플리케이션을 생성할 수 있습니다. 공유 네임스페이스는 안전한 교차 계정 리소스 공유를 허용하는 AWS Resource Access Manager(AWS RAM)를 사용하여 관리됩니다. 공유 네임스페이스에 대한 자세한 내용은 *AWS Cloud Map 개발자 안내서*의 [Cross-account AWS Cloud Map namespace sharing](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html)을 참조하세요.

**중요**  
`AWSRAMPermissionCloudMapECSFullPermission` 관리형 권한을 사용하여 Service Connect가 네임스페이스와 제대로 작동하도록 네임스페이스를 공유해야 합니다.

Service Connect에서 공유 AWS Cloud Map 네임스페이스를 사용하면 여러 AWS 계정의 서비스가 동일한 서비스 네임스페이스에 참여할 수 있습니다. 이는 보안 및 격리를 유지하면서 계정 경계를 넘어 서비스 간 통신을 유지 관리해야 하는 여러 AWS 계정이 있는 조직에 특히 유용합니다.

**참고**  
여러 VPC에 있는 서비스와 통신하려면 VPC 간 연결성을 구성해야 합니다. VPC 피어링 연결을 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 *Amazon Virtual Private Cloud VPC 피어링 가이드*의 [VPC 피어링 연결 생성](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)을 참조하세요.

# Amazon ECS Service Connect에서 공유 AWS Cloud Map 네임스페이스 사용
<a name="service-connect-shared-namespaces-setup"></a>

Service Connect에 대한 공유 AWS Cloud Map 네임스페이스 설정에는 네임스페이스 소유자가 네임스페이스 생성, AWS Resource Access Manager(AWS RAM)를 통한 소유자 공유, 소비자의 리소스 공유 수락, 공유 네임스페이스를 사용하도록 소비자의 Service Connect 구성과 같은 단계가 포함됩니다.

## 1단계: AWS Cloud Map 네임스페이스 생성
<a name="service-connect-shared-namespaces-create"></a>

네임스페이스 소유자는 다른 계정과 공유할 AWS Cloud Map 네임스페이스를 생성합니다.

**AWS Management Console을 사용하여 공유를 위한 네임스페이스를 생성하는 방법**

1. [https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/)에서 AWS Cloud Map 콘솔을 엽니다.

1. **Create namespace(네임스페이스 생성)**를 선택합니다.

1. **네임스페이스 이름**을 입력하세요. 이 이름은 모든 참여 계정의 서비스에서 사용됩니다.

1. **네임스페이스 유형**에서 사용 사례에 적합한 유형을 선택하세요.
   + **API 직접 호출** - DNS 기능이 없는 서비스 검색을 위한 HTTP 네임스페이스.
   + **VPC에서 API 직접 호출 및 DNS 쿼리** - VPC의 프라이빗 DNS 쿼리로의 서비스 검색을 위한 프라이빗 DNS 네임스페이스.
   + **API 직접 호출 및 퍼블릭 DNS 쿼리** - 퍼블릭 DNS 쿼리로의 서비스 검색을 위한 퍼블릭 DNS 네임스페이스.

1.  **Create namespace(네임스페이스 생성)**를 선택합니다.

## 2단계: AWS RAM를 사용하여 네임스페이스 공유
<a name="service-connect-shared-namespaces-share"></a>

네임스페이스 소유자는 AWS RAM를 사용하여 네임스페이스를 다른 AWS 계정과 공유합니다.

**AWS RAM 콘솔을 사용하여 네임스페이스를 공유하는 방법**

1. AWS RAM 콘솔([https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/))을 엽니다.

1. **리소스 공유 생성**을 선택합니다.

1. **이름**에 리소스 공유를 설명하는 이름을 입력합니다.

1. **리소스** 섹션에서 다음을 수행합니다.

   1. **리소스 유형**에서 **클라우드 맵 네임스페이스**를 선택하세요.

   1. 이전 단계에서 생성한 클러스터를 선택하세요.

1. **관리형 권한** 섹션에서 **AWSRAMPermissionCloudMapECSFullPermission**을 지정하세요.
**중요**  
`AWSRAMPermissionCloudMapECSFullPermission` 관리형 권한을 사용하여 Service Connect가 네임스페이스와 제대로 작동하도록 네임스페이스를 공유해야 합니다.

1. **위탁자** 섹션에서 네임스페이스를 공유할 AWS 계정과 지정하세요. 계정 ID 또는 조직 단위 ID를 입력할 수 있습니다.

1. **리소스 공유 생성**을 선택합니다.

## 3단계: 리소스 공유 수락
<a name="service-connect-shared-namespaces-accept"></a>

네임스페이스 소비자 계정은 공유 네임스페이스를 사용하려면 리소스 공유 초대를 수락해야 합니다.

**AWS RAM 콘솔을 사용하여 리소스 공유 초대를 수락하는 방법**

1. 소비자 계정에서 AWS RAM 콘솔([https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/))을 여세요.

1. 탐색 창에서 **나와 공유됨**, **리소스 공유**를 선택하세요.

1. 리소스 공유 초대를 선택하고 **리소스 공유 수락**을 선택하세요.

1. 수락한 후 리소스 세부 정보에서 공유 네임스페이스 ARN을 기록하세요. Service Connect 서비스를 구성할 때 이 ARN을 사용합니다.

## 4단계: 공유 네임스페이스를 사용하여 Amazon ECS 서비스 구성
<a name="service-connect-shared-namespaces-configure"></a>

공유 네임스페이스를 수락한 후 네임스페이스 소비자는 공유 네임스페이스를 사용하도록 Amazon ECS 서비스를 구성할 수 있습니다. 구성은 일반 네임스페이스를 사용하는 방식과 비슷하지만 이름 대신 네임스페이스 ARN을 지정해야 합니다. 자세한 서비스 생성 절차는 [Amazon ECS 롤링 업데이트 배포 생성](create-service-console-v2.md) 섹션을 참조하세요.

**AWS Management Console을 사용하여 공유 네임스페이스가 있는 서비스를 생성하는 방법**

1. [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)에서 콘솔을 엽니다.

1. **클러스터** 페이지에서 서비스를 생성하려는 클러스터를 선택하세요.

1. **서비스**에서 **생성**을 선택하세요.

1. 워크로드에 따라 다른 세부 정보를 입력한 후 **Service Connect** 섹션에서 **Service Connect 사용**을 선택하세요.

1. **네임스페이스**에 공유 네임스페이스의 전체 ARN을 입력하세요.

   ARN 형식은 `arn:aws:servicediscovery:region:account-id:namespace/namespace-id`입니다.

1. 서비스 유형(클라이언트 또는 클라이언트-서버)에 따라 나머지 Service Connect 설정을 구성하세요.

1. 서비스 생성 프로세스를 완료하세요.

`serviceConnectConfiguration`의 `namespace` 파라미터에 공유 네임스페이스 ARN을 지정하여 AWS CLI 또는 AWS SDK를 사용하여 서비스를 구성할 수도 있습니다.

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-def \
    --service-connect-configuration '{
        "enabled": true,
        "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890",
        "services": [{
            "portName": "web",
            "discoveryName": "my-service",
            "clientAliases": [{
                "port": 80,
                "dnsName": "my-service"
            }]
        }]
    }'
```

## 고려 사항
<a name="service-connect-shared-namespaces-considerations"></a>

Service Connect에서 AWS Cloud Map 네임스페이스를 사용하는 경우 다음을 고려합니다.
+ AWS RAM는 공유 네임스페이스를 사용하려는 AWS 리전에서 사용할 수 있어야 합니다.
+ 네임스페이스는 Amazon ECS 서비스 및 클러스터와 같은 AWS 리전에 있어야 합니다.
+ 공유 네임스페이스로 Service Connect를 구성할 경우 ID가 아닌 네임스페이스 ARN을 사용해야 합니다.
+ HTTP, 프라이빗 DNS, 퍼블릭 DNS 네임스페이스와 같은 모든 네임스페이스 유형이 지원됩니다.
+ 공유 네임스페이스에 대한 액세스가 취소되면 네임스페이스(예: `CreateService`, `UpdateService`, `ListServicesByNamespace`)와의 상호 작용이 필요한 Amazon ECS 작업이 실패합니다. 공유 네임스페이스의 권한 문제 해결에 대한 자세한 내용은 [공유 AWS Cloud Map 네임스페이스를 사용한 Amazon ECS Service Connect 문제 해결](service-connect-shared-namespaces-troubleshooting.md) 섹션을 참조하세요.
+ 공유 프라이빗 DNS 네임스페이스에서 DNS 쿼리를 사용하는 서비스 검색의 경우:
  + 네임스페이스 소유자는 네임스페이스와 연결된 프라이빗 호스팅 영역의 ID와 소비자의 VPC를 사용하여 `create-vpc-association-authorization`을 직접 호출해야 합니다.

    ```
    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
    ```
+ 네임스페이스 소유자만 리소스 공유를 관리할 수 있습니다.
+ 네임스페이스 소비자는 공유 네임스페이스 내에서 서비스를 생성하고 관리할 수 있지만 네임스페이스 자체는 수정할 수 없습니다.
+ 검색 이름은 서비스를 생성하는 계정에 관계없이 공유 네임스페이스 내에서 고유해야 합니다.
+ 공유 네임스페이스의 서비스는 네임스페이스에 액세스하는 다른 AWS 계정에서 서비스를 검색하고 연결할 수 있습니다.
+ Service Connect에 대한 TLS를 활성화하고 공유 네임스페이스를 사용하는 경우 AWS Private CA 인증 기관(CA)의 범위가 네임스페이스로 지정됩니다. 공유 네임스페이스에 대한 액세스가 취소되면 CA에 대한 액세스가 중지됩니다.
+ 공유 네임스페이스로 작업할 때 네임스페이스 소유자와 소비자는 기본적으로 교차 계정 Amazon CloudWatch 지표에 액세스할 수 없습니다. 대상 지표는 클라이언트 서비스를 소유한 계정에만 게시됩니다. 클라이언트 서비스를 소유한 계정은 클라이언트-서버 서비스를 소유한 계정에서 수신한 지표에 액세스할 수 없으며 반대도 마찬가지입니다. 지표에 대한 교차 계정 액세스를 허용하려면 CloudWatch 교차 계정 관찰성을 설정합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch 크로스 계정 관찰성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html)을 참조하세요. Service Connect용 CloudWatch 지표에 대한 자세한 내용은 [Amazon ECS CloudWatch 지표](available-metrics.md) 섹션을 참조하세요.

# 공유 AWS Cloud Map 네임스페이스를 사용한 Amazon ECS Service Connect 문제 해결
<a name="service-connect-shared-namespaces-troubleshooting"></a>

다음 정보를 활용하여 공유 AWS Cloud Map 네임스페이스 및 Service Connect 관련 문제를 해결합니다. 오류 메시지 찾기에 대한 자세한 내용은 [Amazon ECS 문제 해결](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html)을 참조하세요.

권한 누락으로 인해 또는 네임스페이스에 대한 액세스가 취소된 경우 권한 문제와 관련된 오류 메시지가 나타납니다.

**중요**  
`AWSRAMPermissionCloudMapECSFullPermission` 관리형 권한을 사용하여 Service Connect가 네임스페이스와 제대로 작동하도록 네임스페이스를 공유해야 합니다.

오류 메시지는 다음 형식 중 하나로 표시됩니다.

An error occurred (ClientException) when calling the <OperationName> operation: User: arn:aws:iam::<account-id>:user/<user-name> is not authorized to perform: <ActionName> on resource: <ResourceArn> because no resource-based policy allows the <ActionName> action

다음 시나리오에서는 이 형식으로 오류 메시지가 표시됩니다.

**클러스터 생성 또는 업데이트 장애**  
이러한 문제는 `CreateCluster` 또는 `UpdateCluster`와 같은 Amazon ECS 작업이 AWS Cloud Map 권한 누락으로 인해 실패할 경우 발생합니다. 이 작업에는 다음 AWS Cloud Map 작업에 대한 권한이 필요합니다.  
+ `servicediscovery:GetNamespace`
리소스 공유 초대가 소비자 계정에서 수락되었고 Service Connect 구성에서 올바른 네임스페이스 ARN이 사용되고 있는지 확인합니다.

**서비스 생성 또는 업데이트 장애**  
이러한 문제는 `CreateService` 또는 `UpdateService`와 같은 Amazon ECS 작업이 AWS Cloud Map 권한 누락으로 인해 실패할 경우 발생합니다. 이 작업에는 다음 AWS Cloud Map 작업에 대한 권한이 필요합니다.  
+ `servicediscovery:CreateService`
+ `servicediscovery:GetNamespace`
+ `servicediscovery:GetOperation`(새 AWS Cloud Map 서비스를 생성하는 경우)
+ `servicediscovery:GetService`(AWS Cloud Map 서비스가 이미 있는 경우)
리소스 공유 초대가 소비자 계정에서 수락되었고 Service Connect 구성에서 올바른 네임스페이스 ARN이 사용되고 있는지 확인합니다.

**`ListServicesByNamespace` 작업 실패**  
이 문제는 Amazon ECS `ListServicesByNamespace` 작업이 실패할 때 발생합니다. 이 작업에는 다음 AWS Cloud Map 작업에 대한 권한이 필요합니다.  
+ `servicediscovery:GetNamespace`
이 문제를 해결하려면:  
+ 소비자 계정에 `servicediscovery:GetNamespace` 권한이 있는지 확인합니다.
+ API를 직접 호출할 때 이름이 아닌 네임스페이스 ARN을 사용합니다.
+ 리소스 공유가 활성 상태이고 초대가 수락되었는지 확인합니다.

User: <iam-user> is not authorized to perform: <ActionName> on resource: <ResourceArn> with an explicit deny in an identity-based policy.

다음 시나리오에서는 이 형식으로 오류 메시지가 표시됩니다.

**서비스 삭제에 실패하고 `DRAINING` 상태로 멈춤**  
이 문제는 네임스페이스에 대한 액세스가 취소될 때 누락된 `servicediscovery:DeleteService` 권한으로 인해 Amazon ECS `DeleteService` 작업이 실패한 경우 발생합니다. 서비스는 처음에는 삭제에 성공한 것처럼 보일 수 있지만 `DRAINING` 상태에서 멈춥니다. 오류 메시지는 Amazon ECS 서비스 이벤트로 표시됩니다.  
이 문제를 해결하려면 네임스페이스 소유자가 네임스페이스를 소비자 계정과 공유하여 서비스 삭제를 완료해야 합니다.

**서비스의 태스크가 실행되지 않음**  
이 문제는 누락된 권한으로 인해 태스크가 시작되지 않은 경우 발생합니다. 오류 메시지는 중지된 태스크 오류로 표시됩니다. 자세한 내용은 [Amazon ECS 중지된 작업 오류 해결](resolve-stopped-errors.md) 섹션을 참조하세요.  
태스크를 실행하려면 다음 AWS Cloud Map 작업이 필요합니다.  
+ `servicediscovery:GetOperation`
+ `servicediscovery:RegisterInstance`
소비자 계정에 필요한 권한이 있고 공유 네임스페이스에 액세스할 수 있는지 확인합니다.

**작업이 완전히 중지되지 않거나 `DEACTIVATING` 또는 `DEPROVISIONING` 상태에서 멈춤**  
이 문제는 권한 누락으로 인해 종료 중 태스크가 AWS Cloud Map 서비스에서 등록 취소되지 않는 경우 발생합니다. 오류는 태스크 연결에서 `DescribeTasks` API를 사용하여 검색할 수 있는 `statusReason`으로 표시됩니다. 자세한 내용은 *Amazon Elastic Container Service API 참조*의 [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html)를 참조하세요.  
태스크를 중지하려면 다음 AWS Cloud Map 작업이 필요합니다.  
+ `servicediscovery:DeregisterInstance`
+ `servicediscovery:GetOperation`
공유 네임스페이스에 대한 액세스가 취소되면 네임스페이스 액세스가 복원될 때까지 태스크가 `DEACTIVATING` 또는 `DEPROVISIONING` 상태로 유지될 수 있습니다. 네임스페이스 소유자에게 네임스페이스에 대한 액세스를 복원하도록 요청합니다.