

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# OpenSearch 도메인에 대한 리전 간 데이터 액세스
<a name="application-cross-region-data-access-domains"></a>

하나의에서 OpenSearch UI 애플리케이션을 구성 AWS 리전 하여 다른 AWS 리전의 OpenSearch 도메인에 액세스할 수 있습니다. 이를 통해 동일한 파티션 내의 여러 AWS 리전에 걸쳐 OpenSearch 도메인의 데이터를 집계하는 통합 대시보드를 생성할 수 있습니다. 교차 리전 데이터 소스 지원을 사용하려면 대상 도메인에서 세분화된 액세스 제어를 활성화해야 합니다. 세분화된 액세스 제어는 도메인 액세스 정책 외에도 추가 권한 부여 계층을 제공하므로 개별 인덱스, 문서 및 필드에 대한 액세스를 제어할 수 있습니다.

## 주요 개념
<a name="cross-region-key-concepts"></a>

애플리케이션 리전  
OpenSearch UI 애플리케이션이 호스팅되는 AWS 리전 입니다.

대상 리전  
OpenSearch 도메인 AWS 리전 이 있는 입니다. 이는 해당 리전에서 OpenSearch UI를 사용할 수 있는지 여부에 관계없이 동일한 파티션 내의 모든 리전일 수 있습니다.

교차 계정 역할  
데이터 소스 연결 중에만 사용되는 대상 계정의 IAM 역할입니다. OpenSearch UI는이 역할을 수임하여를 호출합니다. `es:DescribeDomain`이 역할은 도메인 엔드포인트를 검색하고 세분화된 액세스 제어가 활성화되어 있는지 확인합니다. 이 역할은 도메인이 애플리케이션과 다른 계정에 있는 경우에만 필요합니다. 자세한 내용은 [OpenSearch 도메인에 대한 교차 계정 데이터 액세스](application-cross-account-data-access-domains.md) 단원을 참조하십시오.

IAM Identity Center 애플리케이션 역할  
IAM Identity Center 사용자 데이터 영역 액세스에 사용되는 애플리케이션 계정의 IAM 역할입니다.

지원되는 리전(VPC 도메인의 경우)  
VPC 도메인의 경우 VPC 엔드포인트를 승인할 때 OpenSearch UI 애플리케이션이 호스팅 AWS 리전되는를 허용 목록에 추가해야 합니다. OpenSearch UI가 VPC 도메인을 호출할 수 있으려면이 허용 목록 지정이 필요합니다.

## 사전 조건
<a name="cross-region-prerequisites"></a>

리전 간 데이터 액세스를 설정하기 전에 다음이 있는지 확인합니다.
+ AWS CLI 설치 및 구성됨
+ 애플리케이션 리전과 대상 리전 모두에서 AWS 계정 에 대한 액세스
+ 세분화된 액세스 제어가 활성화된 OpenSearch 도메인. 다중 리전 데이터 소스 연결은 세분화된 액세스 제어가 활성화된 도메인에서만 지원됩니다.
+ 교차 계정 시나리오의 경우: 소스 및 대상 모두에 대한 액세스 AWS 계정
+ IAM Identity Center 흐름의 경우: AWS IAM Identity Center 조직 인스턴스. OpenSearch UI 애플리케이션은 IAM Identity Center 인스턴스와 동일한 리전에 있어야 합니다.

## 시나리오
<a name="cross-region-scenarios"></a>

인증 방법 및 도메인 구성과 일치하는 시나리오를 선택합니다.
+ [시나리오 1: 다른 리전의 퍼블릭 도메인에 액세스하는 IAM 사용자](#cross-region-scenario-1)
+ [시나리오 2: 다른 리전의 퍼블릭 도메인에 액세스하는 IAM Identity Center 사용자](#cross-region-scenario-2)
+ [시나리오 3: 다른 리전의 VPC 도메인에 액세스하는 IAM 사용자](#cross-region-scenario-3)
+ [시나리오 4: 다른 리전의 VPC 도메인에 액세스하는 IAM Identity Center 사용자](#cross-region-scenario-4)

각 시나리오에서는 동일한 계정 교차 리전 액세스를 다룹니다. 교차 계정 교차 리전 액세스의 경우 이러한 시나리오의 단계를에 설명된 교차 계정 역할 설정과 결합합니다[OpenSearch 도메인에 대한 교차 계정 데이터 액세스](application-cross-account-data-access-domains.md).

## 시나리오 1: 다른 리전의 퍼블릭 도메인에 액세스하는 IAM 사용자
<a name="cross-region-scenario-1"></a>

이 시나리오에서는 한 리전에서 OpenSearch UI 애플리케이션을 생성하고 동일한 계정 내의 다른 리전에 있는 퍼블릭 OpenSearch 도메인에 연결합니다.

### 1단계: OpenSearch 도메인 생성(대상 리전)
<a name="cross-region-scenario-1-step-1"></a>

세분화된 액세스 제어가 활성화된 대상 리전에서 OpenSearch 도메인을 생성합니다. 액세스 정책의 범위를 계정 루트 또는 특정 IAM 보안 주체로 지정합니다.

```
aws opensearch create-domain \
  --domain-name {{domain-name}} \
  --engine-version OpenSearch_2.19 \
  --cluster-config InstanceType=m5.large.search,InstanceCount=1 \
  --ebs-options "EBSEnabled=true,VolumeType=gp3,VolumeSize=100" \
  --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"{{admin}}","MasterUserPassword":"{{master-password}}"}}' \
  --node-to-node-encryption-options '{"Enabled":true}' \
  --encryption-at-rest-options '{"Enabled":true}' \
  --domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
  --access-policies '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::{{account-id}}:root"},"Action":"es:ESHttp*","Resource":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{domain-name}}/*"}]}' \
  --region {{target-region}}
```

계속하기 `Active` 전에 도메인 상태가 될 때까지 기다립니다.

### 2단계: OpenSearch UI 애플리케이션 생성(애플리케이션 리전)
<a name="cross-region-scenario-1-step-2"></a>

교차 리전 데이터 소스를 사용하여 애플리케이션 리전에서 애플리케이션을 생성합니다. 리전은 데이터 소스 ARN에서 자동으로 추출됩니다.

```
aws opensearch create-application \
  --region {{application-region}} \
  --name "{{cross-region-iam-app}}" \
  --data-sources '[{
    "dataSourceArn":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{domain-name}}",
    "dataSourceDescription":"{{Cross-region domain}}"
  }]' \
  --app-configs '[{"key":"opensearchDashboards.dashboardAdmin.users","value":"[\"{{test-user}}\"]"}]'
```

### 3단계: 확인 및 액세스
<a name="cross-region-scenario-1-step-3"></a>

애플리케이션 세부 정보를 검색하여 엔드포인트 URL을 가져옵니다.

```
aws opensearch get-application \
  --region {{application-region}} \
  --id {{application-id}}
```
+ 응답에서 애플리케이션 엔드포인트 URL로 이동합니다.
+ IAM 자격 증명으로 로그인합니다.
+ IAM 사용자는 자신의 자격 증명으로 데이터 영역 요청에 서명합니다.
+ 대상 도메인의 액세스 정책 및 백엔드 역할 매핑은 사용자가 액세스할 수 있는 데이터를 제어합니다.

## 시나리오 2: 다른 리전의 퍼블릭 도메인에 액세스하는 IAM Identity Center 사용자
<a name="cross-region-scenario-2"></a>

이 시나리오에서는 한 리전에서 IAM Identity Center 인증을 사용하여 OpenSearch UI 애플리케이션을 생성하고 동일한 계정 내의 다른 리전에 있는 퍼블릭 OpenSearch 도메인에 연결합니다.

### 1단계: IAM Identity Center가 활성화된 OpenSearch 도메인 생성(대상 리전)
<a name="cross-region-scenario-2-step-1"></a>

세분화된 액세스 제어 및 IAM Identity Center 통합이 활성화된 대상 리전에서 OpenSearch 도메인을 생성합니다. 와 함께 `--identity-center-options` 파라미터를 사용하여 IAM Identity Center 인스턴스가 위치한 리전을 `IdentityCenterInstanceRegion` 지정합니다. 이 리전은 OpenSearch UI 애플리케이션이 호스팅되는 리전과 동일해야 합니다.

```
aws opensearch create-domain \
  --domain-name {{domain-name}} \
  --engine-version OpenSearch_2.19 \
  --cluster-config InstanceType=m5.large.search,InstanceCount=1 \
  --ebs-options "EBSEnabled=true,VolumeType=gp3,VolumeSize=100" \
  --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"{{admin}}","MasterUserPassword":"{{master-password}}"}}' \
  --node-to-node-encryption-options '{"Enabled":true}' \
  --encryption-at-rest-options '{"Enabled":true}' \
  --domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
  --identity-center-options '{"EnabledAPIAccess":true,"IdentityCenterInstanceARN":"arn:aws:sso:::instance/ssoins-{{instance-id}}","IdentityCenterInstanceRegion":"{{idc-region}}","RolesKey":"GroupId","SubjectKey":"UserId"}' \
  --access-policies '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::{{account-id}}:role/{{NeoIdCAppRole}}"},"Action":"es:ESHttp*","Resource":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{domain-name}}/*"}]}' \
  --region {{target-region}}
```

계속하기 `Active` 전에 도메인 상태가 될 때까지 기다립니다.

### 2단계: IAM Identity Center 애플리케이션에 대한 IAM 역할 생성
<a name="cross-region-scenario-2-step-2"></a>

OpenSearch UI가 IAM Identity Center 사용자 데이터 영역 액세스에 사용하는 IAM 역할을 생성합니다.

**IAM Identity Center 애플리케이션 역할을 생성하려면**

1. `sts:AssumeRole` 문만 사용하여 신뢰 정책을 생성합니다. 다음 단계에서 애플리케이션을 생성한 후이 정책을 업데이트하여 `sts:SetContext` 문을 추가합니다.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "application.opensearchservice.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 권한 정책 생성:

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Sid": "OpenSearchDomain",
       "Effect": "Allow",
       "Action": ["es:ESHttp*"],
       "Resource": "arn:aws:es:{{target-region}}:{{account-id}}:domain/{{domain-name}}/*"
     }]
   }
   ```

1. 역할을 생성하고 정책을 연결합니다.

   ```
   aws iam create-role \
     --role-name {{NeoIdCAppRole}} \
     --assume-role-policy-document file://{{neoidc-trust-policy.json}}
   
   aws iam put-role-policy \
     --role-name {{NeoIdCAppRole}} \
     --policy-name {{NeoIdCAppPermissions}} \
     --policy-document file://{{neoidc-permissions-policy.json}}
   ```

### 3단계: IAM Identity Center를 사용하여 OpenSearch UI 애플리케이션 생성(애플리케이션 리전)
<a name="cross-region-scenario-2-step-3"></a>

**참고**  
IAM Identity Center 인스턴스가 OpenSearch UI 애플리케이션 리전과 동일한 리전에 있는지 확인합니다.

```
aws opensearch create-application \
  --region {{application-region}} \
  --name "{{cross-region-idc-app}}" \
  --iam-identity-center-options '{
    "enabled":true,
    "iamIdentityCenterInstanceArn":"arn:aws:sso:::instance/ssoins-{{instance-id}}",
    "iamRoleForIdentityCenterApplicationArn":"arn:aws:iam::{{account-id}}:role/{{NeoIdCAppRole}}"
  }' \
  --data-sources '[{
    "dataSourceArn":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{domain-name}}",
    "dataSourceDescription":"{{Cross-region domain}}"
  }]' \
  --app-configs '[{"key":"opensearchDashboards.dashboardAdmin.users","value":"[\"{{test-user}}\"]"}]'
```

애플리케이션을 생성한 후 응답의 SSO 애플리케이션 ID를 기록해 둡니다. 그런 다음 IAM Identity Center 애플리케이션 역할의 신뢰 정책을 업데이트하여 `sts:SetContext` 문을 추가합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "application.opensearchservice.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "application.opensearchservice.amazonaws.com"
      },
      "Action": "sts:SetContext",
      "Condition": {
        "ForAllValues:ArnEquals": {
          "sts:RequestContextProviders": "arn:aws:iam::{{account-id}}:oidc-provider/portal.sso.{{idc-region}}.amazonaws.com/apl/{{application-id}}"
        }
      }
    }
  ]
}
```

```
aws iam update-assume-role-policy \
  --role-name {{NeoIdCAppRole}} \
  --policy-document file://{{updated-trust-policy.json}}
```

### 4단계: IAM Identity Center 사용자 및 그룹 생성 및 할당
<a name="cross-region-scenario-2-step-4"></a>

**IAM Identity Center 사용자 생성**  
다음 명령을 실행합니다. {{자리 표시자}}를 자신의 정보로 바꿉니다.

```
aws identitystore create-user \
  --identity-store-id {{d-directory-id}} \
  --user-name {{user-email}} \
  --display-name "{{display-name}}" \
  --name Formatted=string,FamilyName={{last-name}},GivenName={{first-name}} \
  --emails Value={{user-email}},Type=work,Primary=true
```

**IAM Identity Center 그룹 생성 및 사용자 추가**  
다음 명령을 실행합니다.

```
aws identitystore create-group \
  --identity-store-id {{d-directory-id}} \
  --display-name "{{OpenSearchUsers}}" \
  --description "{{Users with OpenSearch access}}"

aws identitystore create-group-membership \
  --identity-store-id {{d-directory-id}} \
  --group-id {{group-id}} \
  --member-id UserId={{user-id}}
```

**애플리케이션에 사용자 또는 그룹 할당**  
다음 명령을 실행합니다.

```
aws sso-admin create-application-assignment \
  --application-arn "arn:aws:sso::{{account-id}}:application/ssoins-{{instance-id}}/apl-{{application-id}}" \
  --principal-id {{user-id-or-group-id}} \
  --principal-type {{USER}}
```

**대상 도메인에서 백엔드 역할 매핑 구성**  
IAM Identity Center 그룹을 대상 도메인의 OpenSearch 보안 역할에 매핑합니다.

```
curl -XPATCH "https://{{domain-endpoint}}/_plugins/_security/api/rolesmapping/all_access" \
  -u {{admin}}:{{master-password}} \
  -H 'Content-Type: application/json' \
  -d '[{"op": "add", "path": "/backend_roles", "value": ["{{group-id}}"]}]'
```

### 5단계: 확인 및 액세스
<a name="cross-region-scenario-2-step-5"></a>

애플리케이션 세부 정보를 검색하여 엔드포인트 URL을 가져옵니다.

```
aws opensearch get-application \
  --region {{application-region}} \
  --id {{application-id}}
```
+ 애플리케이션 엔드포인트 URL로 이동합니다.
+ IAM Identity Center 사용자 자격 증명으로 로그인합니다.
+ IAM Identity Center 사용자의 데이터 요청은 IAM Identity Center 애플리케이션 역할로 서명됩니다.
+ 도메인의 백엔드 역할 매핑은 데이터 액세스 권한을 제어합니다.

## 시나리오 3: 다른 리전의 VPC 도메인에 액세스하는 IAM 사용자
<a name="cross-region-scenario-3"></a>

이 시나리오에서는 한 리전에서 OpenSearch UI 애플리케이션을 생성하고 동일한 계정 내의 다른 리전에 있는 VPC OpenSearch 도메인에 연결합니다. VPC 도메인에는 리전 간 지원을 통해 추가 네트워크 구성 및 명시적 VPC 엔드포인트 권한이 필요합니다.

### 1단계: VPC(대상 리전) 설정
<a name="cross-region-scenario-3-step-1"></a>

대상 리전에 VPC가 이미 있는 경우이 단계를 건너뜁니다.

```
# Create VPC
aws ec2 create-vpc \
  --cidr-block 10.0.0.0/16 \
  --region {{target-region}}

# Create subnet
aws ec2 create-subnet \
  --vpc-id {{vpc-id}} \
  --cidr-block 10.0.1.0/24 \
  --availability-zone {{target-region}}a \
  --region {{target-region}}

# Create security group
aws ec2 create-security-group \
  --group-name {{opensearch-vpc-sg}} \
  --description "Security group for OpenSearch VPC domain" \
  --vpc-id {{vpc-id}} \
  --region {{target-region}}

# Allow inbound HTTPS
aws ec2 authorize-security-group-ingress \
  --group-id {{security-group-id}} \
  --protocol tcp \
  --port 443 \
  --cidr 10.0.0.0/16 \
  --region {{target-region}}
```

[VPC 도메인 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)에 대해 자세히 알아봅니다.

### 2단계: VPC 도메인 생성(대상 리전)
<a name="cross-region-scenario-3-step-2"></a>

```
aws opensearch create-domain \
  --domain-name {{vpc-domain-name}} \
  --engine-version OpenSearch_2.19 \
  --cluster-config InstanceType=m5.large.search,InstanceCount=1 \
  --ebs-options "EBSEnabled=true,VolumeType=gp3,VolumeSize=100" \
  --vpc-options "SubnetIds={{subnet-id}},SecurityGroupIds={{security-group-id}}" \
  --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"{{admin}}","MasterUserPassword":"{{master-password}}"}}' \
  --node-to-node-encryption-options '{"Enabled":true}' \
  --encryption-at-rest-options '{"Enabled":true}' \
  --domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
  --access-policies '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::{{account-id}}:root"},"Action":"es:ESHttp*","Resource":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{vpc-domain-name}}/*"}]}' \
  --region {{target-region}}
```

계속하기 `Active` 전에 도메인 상태가 될 때까지 기다립니다.

### 3단계: 교차 리전 지원을 통해 OpenSearch UI 서비스 보안 주체에 대한 VPC 엔드포인트 권한 부여(대상 리전)
<a name="cross-region-scenario-3-step-3"></a>

```
# Authorize the service principal with cross-region support
aws opensearch authorize-vpc-endpoint-access \
  --domain-name {{vpc-domain-name}} \
  --service "application.opensearchservice.amazonaws.com" \
  --service-options '{"SupportedRegions":["{{target-region}}","{{application-region}}"]}' \
  --region {{target-region}}

# Verify authorization
aws opensearch list-vpc-endpoint-access \
  --domain-name {{vpc-domain-name}} \
  --region {{target-region}}
```

예상 응답:

```
{
  "AuthorizedPrincipalList": [
    {
      "PrincipalType": "AWS_SERVICE",
      "Principal": "application.opensearchservice.amazonaws.com",
      "ServiceOptions": {
        "SupportedRegions": ["{{target-region}}", "{{application-region}}"]
      }
    }
  ]
}
```

### 4단계: OpenSearch UI 애플리케이션 생성(애플리케이션 리전)
<a name="cross-region-scenario-3-step-4"></a>

```
aws opensearch create-application \
  --region {{application-region}} \
  --name "{{cross-region-vpc-iam-app}}" \
  --data-sources '[{
    "dataSourceArn":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{vpc-domain-name}}",
    "dataSourceDescription":"{{Cross-region VPC domain}}"
  }]' \
  --app-configs '[{"key":"opensearchDashboards.dashboardAdmin.users","value":"[\"{{test-user}}\"]"}]'
```

### 5단계: 확인 및 액세스
<a name="cross-region-scenario-3-step-5"></a>

애플리케이션 세부 정보를 검색하여 엔드포인트 URL을 가져옵니다.

```
aws opensearch get-application \
  --region {{application-region}} \
  --id {{application-id}}
```
+ 응답에서 애플리케이션 엔드포인트 URL로 이동합니다.
+ IAM 자격 증명으로 로그인합니다.
+ IAM 사용자는 자신의 자격 증명으로 데이터 영역 요청에 서명합니다.
+ 대상 도메인의 액세스 정책 및 백엔드 역할 매핑은 사용자가 액세스할 수 있는 데이터를 제어합니다.

## 시나리오 4: 다른 리전의 VPC 도메인에 액세스하는 IAM Identity Center 사용자
<a name="cross-region-scenario-4"></a>

이 시나리오에서는 한 리전에서 IAM Identity Center 인증을 사용하여 OpenSearch UI 애플리케이션을 생성하고 동일한 계정 내의 다른 리전에 있는 VPC OpenSearch 도메인에 연결합니다.

### 1단계: VPC(대상 리전) 설정
<a name="cross-region-scenario-4-step-1"></a>

대상 리전에 VPC가 이미 있는 경우이 단계를 건너뜁니다.

```
# Create VPC
aws ec2 create-vpc \
  --cidr-block 10.0.0.0/16 \
  --region {{target-region}}

# Create subnet
aws ec2 create-subnet \
  --vpc-id {{vpc-id}} \
  --cidr-block 10.0.1.0/24 \
  --availability-zone {{target-region}}a \
  --region {{target-region}}

# Create security group
aws ec2 create-security-group \
  --group-name {{opensearch-vpc-sg}} \
  --description "Security group for OpenSearch VPC domain" \
  --vpc-id {{vpc-id}} \
  --region {{target-region}}

# Allow inbound HTTPS
aws ec2 authorize-security-group-ingress \
  --group-id {{security-group-id}} \
  --protocol tcp \
  --port 443 \
  --cidr 10.0.0.0/16 \
  --region {{target-region}}
```

[VPC 도메인 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)에 대해 자세히 알아봅니다.

### 2단계: IAM Identity Center가 활성화된 VPC 도메인 생성(대상 리전)
<a name="cross-region-scenario-4-step-2"></a>

세분화된 액세스 제어, IAM Identity Center 통합 및 VPC 구성이 활성화된 대상 리전에서 OpenSearch 도메인을 생성합니다. IAM Identity Center 애플리케이션 역할을 허용하도록 액세스 정책을 업데이트하고 `--identity-center-options` 파라미터를 추가합니다.

```
aws opensearch create-domain \
  --domain-name {{vpc-domain-name}} \
  --engine-version OpenSearch_2.19 \
  --cluster-config InstanceType=m5.large.search,InstanceCount=1 \
  --ebs-options "EBSEnabled=true,VolumeType=gp3,VolumeSize=100" \
  --vpc-options "SubnetIds={{subnet-id}},SecurityGroupIds={{security-group-id}}" \
  --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"{{admin}}","MasterUserPassword":"{{master-password}}"}}' \
  --node-to-node-encryption-options '{"Enabled":true}' \
  --encryption-at-rest-options '{"Enabled":true}' \
  --domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
  --identity-center-options '{"EnabledAPIAccess":true,"IdentityCenterInstanceARN":"arn:aws:sso:::instance/ssoins-{{instance-id}}","IdentityCenterInstanceRegion":"{{idc-region}}","RolesKey":"GroupId","SubjectKey":"UserId"}' \
  --access-policies '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::{{account-id}}:role/{{NeoIdCAppRole}}"},"Action":"es:ESHttp*","Resource":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{vpc-domain-name}}/*"}]}' \
  --region {{target-region}}
```

계속하기 `Active` 전에 도메인 상태가 될 때까지 기다립니다.

### 3단계: 교차 리전 지원을 통해 OpenSearch UI 서비스 보안 주체에 대한 VPC 엔드포인트 권한 부여(대상 리전)
<a name="cross-region-scenario-4-step-3"></a>

**중요**  
이는 리전 간 액세스 권한이 있는 VPC 도메인에 고유한 중요한 단계입니다. OpenSearch UI 서비스는 VPC 엔드포인트에 액세스할 수 있는 명시적 권한이 있어야 하며 `SupportedRegions` 목록에 애플리케이션 리전을 포함해야 합니다.

```
# Authorize the service principal with cross-region support
aws opensearch authorize-vpc-endpoint-access \
  --domain-name {{vpc-domain-name}} \
  --service "application.opensearchservice.amazonaws.com" \
  --service-options '{"SupportedRegions":["{{target-region}}","{{application-region}}"]}' \
  --region {{target-region}}

# Verify authorization
aws opensearch list-vpc-endpoint-access \
  --domain-name {{vpc-domain-name}} \
  --region {{target-region}}
```

예상 응답:

```
{
  "AuthorizedPrincipalList": [
    {
      "PrincipalType": "AWS_SERVICE",
      "Principal": "application.opensearchservice.amazonaws.com",
      "ServiceOptions": {
        "SupportedRegions": ["{{target-region}}", "{{application-region}}"]
      }
    }
  ]
}
```

### 4단계: IAM Identity Center 애플리케이션에 대한 IAM 역할 생성
<a name="cross-region-scenario-4-step-4"></a>

OpenSearch UI가 IAM Identity Center 사용자 데이터 영역 액세스에 사용하는 IAM 역할을 생성합니다.

**IAM Identity Center 애플리케이션 역할을 생성하려면**

1. `sts:AssumeRole` 문만 사용하여 신뢰 정책을 생성합니다. 다음 단계에서 애플리케이션을 생성한 후 `sts:SetContext` 문을 추가하도록이 정책을 업데이트합니다.

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "application.opensearchservice.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 권한 정책 생성:

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Sid": "OpenSearchDomain",
       "Effect": "Allow",
       "Action": ["es:ESHttp*"],
       "Resource": "arn:aws:es:{{target-region}}:{{account-id}}:domain/{{vpc-domain-name}}/*"
     }]
   }
   ```

1. 역할을 생성하고 정책을 연결합니다.

   ```
   aws iam create-role \
     --role-name {{NeoIdCAppRole}} \
     --assume-role-policy-document file://{{neoidc-trust-policy.json}}
   
   aws iam put-role-policy \
     --role-name {{NeoIdCAppRole}} \
     --policy-name {{NeoIdCAppPermissions}} \
     --policy-document file://{{neoidc-permissions-policy.json}}
   ```

### 5단계: IAM Identity Center를 사용하여 OpenSearch UI 애플리케이션 생성(애플리케이션 리전)
<a name="cross-region-scenario-4-step-5"></a>

```
aws opensearch create-application \
  --region {{application-region}} \
  --name "{{cross-region-vpc-idc-app}}" \
  --iam-identity-center-options '{
    "enabled":true,
    "iamIdentityCenterInstanceArn":"arn:aws:sso:::instance/ssoins-{{instance-id}}",
    "iamRoleForIdentityCenterApplicationArn":"arn:aws:iam::{{account-id}}:role/{{NeoIdCAppRole}}"
  }' \
  --data-sources '[{
    "dataSourceArn":"arn:aws:es:{{target-region}}:{{account-id}}:domain/{{vpc-domain-name}}",
    "dataSourceDescription":"{{Cross-region VPC domain}}"
  }]' \
  --app-configs '[{"key":"opensearchDashboards.dashboardAdmin.users","value":"[\"{{test-user}}\"]"}]'
```

애플리케이션을 생성한 후 응답의 SSO 애플리케이션 ID를 기록해 둡니다. 그런 다음 IAM Identity Center 애플리케이션 역할의 신뢰 정책을 업데이트하여 `sts:SetContext` 문을 추가합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "application.opensearchservice.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "application.opensearchservice.amazonaws.com"
      },
      "Action": "sts:SetContext",
      "Condition": {
        "ForAllValues:ArnEquals": {
          "sts:RequestContextProviders": "arn:aws:iam::{{account-id}}:oidc-provider/portal.sso.{{idc-region}}.amazonaws.com/apl/{{application-id}}"
        }
      }
    }
  ]
}
```

```
aws iam update-assume-role-policy \
  --role-name {{NeoIdCAppRole}} \
  --policy-document file://{{updated-trust-policy.json}}
```

### 6단계: IAM Identity Center 사용자 및 그룹 생성 및 할당
<a name="cross-region-scenario-4-step-6"></a>

와 동일한 단계에 따라 사용자, 그룹을 [4단계: IAM Identity Center 사용자 및 그룹 생성 및 할당](#cross-region-scenario-2-step-4) 생성하고 애플리케이션에 할당하며 대상 도메인에서 백엔드 역할 매핑을 구성합니다.

### 7단계: 확인 및 액세스
<a name="cross-region-scenario-4-step-7"></a>

애플리케이션 세부 정보를 검색하여 엔드포인트 URL을 가져옵니다.

```
aws opensearch get-application \
  --region {{application-region}} \
  --id {{application-id}}
```
+ 애플리케이션 엔드포인트 URL로 이동합니다.
+ IAM Identity Center 사용자 자격 증명으로 로그인합니다.
+ IAM Identity Center 사용자의 데이터 요청은 IAM Identity Center 애플리케이션 역할로 서명됩니다.
+ 도메인의 백엔드 역할 매핑은 데이터 액세스 권한을 제어합니다.

## 애플리케이션 관리
<a name="cross-region-managing-applications"></a>

**리전 간 데이터 소스로 애플리케이션 업데이트**  
다음 명령을 실행합니다. {{자리 표시자}}를 자신의 정보로 바꿉니다.

```
aws opensearch update-application \
  --region {{application-region}} \
  --id {{application-id}} \
  --data-sources '[{
    "dataSourceArn":"arn:aws:es:{{target-region-1}}:{{account-id}}:domain/{{domain-1}}",
    "dataSourceDescription":"{{Domain in target Region 1}}"
  },{
    "dataSourceArn":"arn:aws:es:{{target-region-2}}:{{account-id}}:domain/{{domain-2}}",
    "dataSourceDescription":"{{Domain in target Region 2}}"
  }]'
```

**중요**  
업데이트 작업은 전체 데이터 소스 배열을 대체합니다. 유지하려는 모든 데이터 소스를 포함합니다.

**애플리케이션 나열**  
다음 명령을 실행합니다.

```
aws opensearch list-applications \
  --region {{application-region}}
```

**애플리케이션 삭제**  
다음 명령을 실행합니다.

```
aws opensearch delete-application \
  --region {{application-region}} \
  --id {{application-id}}
```

**특정 리전에 대한 VPC 엔드포인트 액세스 취소**  
다른를 유지하면서 특정 AWS 리전에 대한 리전 간 액세스를 취소하려면 `--service-options` 파라미터를 리전과 함께 사용하여 취소합니다.

```
aws opensearch revoke-vpc-endpoint-access \
  --domain-name {{vpc-domain-name}} \
  --service "application.opensearchservice.amazonaws.com" \
  --service-options '{"SupportedRegions":["{{region-to-revoke}}"]}' \
  --region {{target-region}}
```

## 빠른 참조
<a name="cross-region-quick-reference"></a>

다음 표에는 도메인 유형, 인증 방법, 동일 리전 액세스와 교차 리전 액세스 간의 주요 차이점이 요약되어 있습니다.


**퍼블릭 도메인과 VPC 도메인 비교**  

| 속성 | 퍼블릭 도메인 | VPC 도메인 | 
| --- | --- | --- | 
| VPC 엔드포인트 권한 부여 | 불필요 | 필수 -에서 application.opensearchservice.amazonaws.com를 승인해야 합니다. SupportedRegions  | 
| 네트워크 설정 | 없음 | HTTPS(443) 인바운드가 있는 VPC, 서브넷, 보안 그룹 | 
| IAM 액세스 정책 | 필수 | 필수 | 


**IAM 사용자와 IAM Identity Center 사용자 비교**  

| 속성 | IAM 사용자 | IAM Identity Center 사용자 | 
| --- | --- | --- | 
| 데이터 영역 자격 증명 | 사용자의 자체 IAM 자격 증명 | IAM Identity Center 애플리케이션 역할 | 
| 액세스 관리 | 도메인 액세스 정책 및 백엔드 역할 매핑 | 도메인 액세스 정책 및 백엔드 역할 매핑 | 
| 애플리케이션 리전 제약 조건 | 모든 리전 | IAM Identity Center 인스턴스와 동일한 리전에 있어야 합니다. | 
| 도메인 구성 | 표준 | 에 필요 --identity-center-options IdentityCenterInstanceRegion | 
| 추가 설정 | 없음 | IAM Identity Center 애플리케이션 역할, 사용자/그룹 생성, 애플리케이션 할당, 백엔드 역할 매핑 | 


**교차 리전과 동일한 리전 비교**  

| 속성 | 동일 리전 | 교차 리전 | 
| --- | --- | --- | 
| 데이터 소스 ARN | 애플리케이션과 동일한 리전 | 애플리케이션과 다른 리전(동일한 파티션) | 
| VPC 엔드포인트 권한 부여 | 생략 --service-options | --service-options에 포함 SupportedRegions | 
| IAM Identity Center 도메인 구성 | IdentityCenterInstanceRegion 선택 사항 | IdentityCenterInstanceRegion 필수 | 
| 파티션 간 지원 | 해당 사항 없음 | 지원되지 않음 - 데이터 소스가 동일한 파티션에 있어야 합니다. | 

## 중요 정보
<a name="cross-region-important-notes"></a>
+ 교차 리전 데이터 소스 연결을 사용하려면 대상 도메인에서 세분화된 액세스 제어를 활성화해야 합니다.
+ 교차 리전 데이터 소스는 동일한 파티션 내에 있어야 합니다. 파티션 간 액세스(예:에서 `aws`로`aws-cn`)는 지원되지 않습니다.
+ 데이터 소스 리전은 데이터 소스 ARN에서 자동으로 추출됩니다. `CreateApplication` 또는 `UpdateApplication` APIs.
+ 동일 계정 교차 리전 데이터 소스의 경우 `iamRoleForDataSourceArn`는 필요하지 않습니다. 교차 계정 데이터 소스에만 필요합니다.
+ VPC 도메인의 경우를 호출할 때 `SupportedRegions` 파라미터에 애플리케이션 리전을 포함해야 합니다`AuthorizeVpcEndpointAccess`. 생략하면 동일한 리전 액세스만 `--service-options` 승인됩니다.
+ IAM Identity Center 흐름의 경우 OpenSearch UI 애플리케이션은 IAM Identity Center 인스턴스와 동일한 리전에 있어야 합니다.
+ 교차 리전 도메인이 있는 IAM Identity Center 흐름의 경우 교차 리전 토큰 내부 검사를 활성화`--identity-center-options`하려면 대상 도메인`IdentityCenterInstanceRegion`이에 포함되어야 합니다.
+ 지원되는 엔진 버전: OpenSearch 1.3 이상.

## 문제 해결
<a name="cross-region-troubleshooting"></a>


| 문제 | 해결 방법 | 
| --- | --- | 
| "도메인에 액세스할 수 없음"으로 애플리케이션 생성 실패 | 도메인이 대상 리전에 있고 세분화된 액세스 제어가 활성화되어 있는지 확인합니다. 교차 계정 시나리오의 경우 교차 계정 역할에 es:DescribeDomain 권한이 있고 신뢰 정책에서 소스 계정을 허용하는지 확인합니다. | 
| 교차 리전에 대한 VPC 도메인 액세스 실패 | 에 포함된 애플리케이션 리전application.opensearchservice.amazonaws.com을 사용하여 VPC 엔드포인트에에 대한 권한이 부여되었는지 확인합니다SupportedRegions. | 
| IAM 사용자에 대한 데이터 영역 액세스 거부 | 대상 도메인 액세스 정책이 IAM 사용자 또는 역할 보안 주체를 허용하고 세분화된 액세스 제어 백엔드 역할 매핑이 적절한 권한을 부여하는지 확인합니다. | 
| IAM Identity Center 사용자에 대한 데이터 영역 액세스 거부 | 백엔드 역할 매핑에 IAM Identity Center 그룹 IDIdentityCenterInstanceRegion가 포함되어 있고, 도메인 정책이 IAM Identity Center 애플리케이션 역할을 허용하며, 도메인의 OpenSearch UI 애플리케이션과 동일한 리전으로 올바르게 설정되어 있는지 확인합니다. | 
| 파티션 간 데이터 소스 거부됨 | 파티션 간 액세스는 지원되지 않습니다. 데이터 소스 ARN이 애플리케이션과 동일한 파티션에 있는지 확인합니다. | 
| 리전 간 도메인에 대한 IAM Identity Center 인증 실패 | IdentityCenterInstanceRegion가 IAM Identity Center 인스턴스가 활성화된 올바른 리전으로 설정되어 있는지 확인합니다. OpenSearch UI 애플리케이션도 동일한 리전에 있어야 합니다. | 