

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# OpenSearch ドメインへのクロスアカウントデータアクセス
<a name="application-cross-account-data-access-domains"></a>

1 つのアカウントで OpenSearch UI アプリケーションを設定して、異なるアカウントの OpenSearch ドメインにアクセスできます。クロスアカウントデータソースを使用して OpenSearch UI アプリケーションを作成するときは、ターゲットアカウントの IAM ロール`iamRoleForDataSourceArn`を指す を指定します。OpenSearch UI は、このロールを引き受け、 `es:DescribeDomain`を呼び出してドメインアクセシビリティを検証することで、リクエストを検証します。クロスアカウントロールは、コントロールプレーンの検証にのみ使用されます。データプレーンへのアクセスは、ターゲットドメインのアクセスポリシーによって個別に制御されます。

**「サンプルコード」**  
このトピックのコード例は、説明のみを目的としています。基本的な機能を示しており、エラー処理、セキュリティのベストプラクティス、本番稼働用の機能が含まれていない場合があります。本番環境でサンプルコードを使用する前に、特定の要件を満たすようにサンプルコードを確認して変更し、環境で徹底的にテストします。

## 主要なコンセプト
<a name="cross-account-key-concepts"></a>

ソースアカウント  
OpenSearch UI アプリケーションをホスト AWS アカウント する 。

ターゲットアカウント  
OpenSearch ドメイン AWS アカウント が存在する 。

クロスアカウントロール  
コントロールプレーンの検証にのみ使用されるターゲットアカウントの IAM ロール。このロールには アクセス`es:DescribeDomain`許可のみが必要です。

IAM Identity Center アプリケーションロール  
IAM Identity Center ユーザーデータプレーンアクセスに使用されるソースアカウントの IAM ロール。

## 前提条件
<a name="cross-account-prerequisites"></a>

クロスアカウントデータアクセスを設定する前に、以下があることを確認してください。
+ AWS CLI のインストールと設定
+ ソースとターゲットの両方へのアクセス AWS アカウント
+ IAM Identity Center フローの場合: AWS IAM アイデンティティセンター 組織インスタンス

## シナリオ
<a name="cross-account-scenarios"></a>

認証方法とドメイン設定に一致するシナリオを選択します。
+ [シナリオ 1: パブリックドメインにアクセスする IAM ユーザー](#cross-account-scenario-1)
+ [シナリオ 2: パブリックドメインにアクセスする IAM Identity Center ユーザー](#cross-account-scenario-2)
+ [シナリオ 3: VPC ドメインにアクセスする IAM ユーザー](#cross-account-scenario-3)
+ [シナリオ 4: VPC ドメインにアクセスする IAM Identity Center ユーザー](#cross-account-scenario-4)

## シナリオ 1: パブリックドメインにアクセスする IAM ユーザー
<a name="cross-account-scenario-1"></a>

### ステップ 1: クロスアカウント IAM ロールを作成する (ターゲットアカウント)
<a name="scenario-1-step-1"></a>

ソースアカウントがドメイン検証のために引き受けることを許可する IAM ロールをターゲットアカウントに作成します。

**クロスアカウントロールを作成するには**

1. ソースアカウントがロールを引き受けることを許可する信頼ポリシーを作成します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "AWS": "arn:aws:iam::source-account-id:root"
       },
       "Action": "sts:AssumeRole"
     }]
   }
   ```

1. ロールを作成します。

   ```
   aws iam create-role \
     --role-name OpenSearchUIAccessRole \
     --assume-role-policy-document file://trust-policy.json
   ```

1. `es:DescribeDomain` アクションのみを使用してアクセス許可ポリシーを作成します。

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

1. アクセス許可ポリシーをロールにアタッチします:

   ```
   aws iam put-role-policy \
     --role-name OpenSearchUIAccessRole \
     --policy-name ValidationOnly \
     --policy-document file://permissions-policy.json
   ```

### ステップ 2: OpenSearch ドメインを作成する (ターゲットアカウント)
<a name="scenario-1-step-2"></a>

きめ細かなアクセスコントロールと暗号化を有効にして、ターゲットアカウントに OpenSearch ドメインを作成します。

```
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":"*"},"Action":"es:ESHttp*","Resource":"arn:aws:es:region:target-account-id:domain/domain-name/*"}]}' \
  --region region
```

続行する`Active`前に、ドメインのステータスが になるまで待ちます。

### ステップ 3: OpenSearch UI アプリケーションを作成する (ソースアカウント)
<a name="scenario-1-step-3"></a>

クロスアカウントデータソースを使用してソースアカウントにアプリケーションを作成します。

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

### ステップ 4: 検証とアクセス
<a name="scenario-1-step-4"></a>

アプリケーションの詳細を取得してエンドポイント URL を取得します。

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ レスポンスからアプリケーションエンドポイント URL に移動します。
+ IAM 認証情報を使用してサインインします。
+ IAM ユーザーは、独自の認証情報を使用してデータプレーンリクエストに署名します。
+ ターゲットドメインアクセスポリシーは、ユーザーがアクセスできるデータを制御します。

## シナリオ 2: パブリックドメインにアクセスする IAM Identity Center ユーザー
<a name="cross-account-scenario-2"></a>

### ステップ 1: クロスアカウント IAM ロールを作成する (ターゲットアカウント)
<a name="scenario-2-step-1"></a>

ソースアカウントがドメイン検証のために引き受けることを許可する IAM ロールをターゲットアカウントに作成します。

**クロスアカウントロールを作成するには**

1. ソースアカウントがロールを引き受けることを許可する信頼ポリシーを作成します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "AWS": "arn:aws:iam::source-account-id:root"
       },
       "Action": "sts:AssumeRole"
     }]
   }
   ```

1. ロールを作成します。

   ```
   aws iam create-role \
     --role-name OpenSearchUIAccessRole \
     --assume-role-policy-document file://trust-policy.json
   ```

1. `es:DescribeDomain` アクションのみを使用してアクセス許可ポリシーを作成します。

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

1. アクセス許可ポリシーをロールにアタッチします:

   ```
   aws iam put-role-policy \
     --role-name OpenSearchUIAccessRole \
     --policy-name ValidationOnly \
     --policy-document file://permissions-policy.json
   ```

### ステップ 2: OpenSearch ドメインを作成する (ターゲットアカウント)
<a name="scenario-2-step-2"></a>

ターゲットアカウントに OpenSearch ドメインを作成します。と同じコマンドを使用しますが[ステップ 2: OpenSearch ドメインを作成する (ターゲットアカウント)](#scenario-1-step-2)、アクセスポリシーを更新して、ソースアカウントからの IAM Identity Center アプリケーションロールを許可します。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::source-account-id:role/NeoIdCAppRole"
    },
    "Action": "es:ESHttp*",
    "Resource": "arn:aws:es:region:target-account-id:domain/domain-name/*"
  }]
}
```

続行する`Active`前に、ドメインのステータスが になるまで待ちます。

### ステップ 3: IAM Identity Center アプリケーションの IAM ロールを作成する (ソースアカウント)
<a name="scenario-2-step-3"></a>

OpenSearch UI が IAM Identity Center ユーザーデータプレーンアクセスに使用するソースアカウントに IAM ロールを作成します。

**IAM Identity Center アプリケーションロールを作成するには**

1. 信頼ポリシーを作成します。

   ```
   {
     "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::source-account-id:oidc-provider/portal.sso.region.amazonaws.com/apl/application-id"
           }
         }
       }
     ]
   }
   ```

1. アクセス許可ポリシーを作成します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Sid": "OpenSearchDomain",
       "Effect": "Allow",
       "Action": ["es:ESHttp*"],
       "Resource": "*"
     }]
   }
   ```

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
   ```

### ステップ 4: IAM Identity Center を使用して OpenSearch UI アプリケーションを作成する (ソースアカウント)
<a name="scenario-2-step-4"></a>

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

### ステップ 5: IAM Identity Center ユーザーとグループを作成して割り当てる
<a name="scenario-2-step-5"></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:::source-account-id:application/ssoins-instance-id/apl-application-id" \
  --principal-id user-id-or-group-id \
  --principal-type USER
```

**ターゲットドメインでバックエンドロールマッピングを設定する**  
IAM Identity Center グループをターゲットドメインの OpenSearch セキュリティロールにマッピングします。

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

### ステップ 6: 検証とアクセス
<a name="scenario-2-step-6"></a>

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ アプリケーションエンドポイント URL に移動します。
+ IAM Identity Center ユーザー認証情報を使用してサインインします。
+ IAM Identity Center ユーザーのデータリクエストは、クロスアカウントロールではなく、IAM Identity Center アプリケーションロールで署名されます。
+ ドメインコントロールデータアクセス許可のバックエンドロールマッピング。

## シナリオ 3: VPC ドメインにアクセスする IAM ユーザー
<a name="cross-account-scenario-3"></a>

### ステップ 1: クロスアカウント IAM ロールを作成する (ターゲットアカウント)
<a name="scenario-3-step-1"></a>

ソースアカウントがドメイン検証のために引き受けることを許可する IAM ロールをターゲットアカウントに作成します。

**クロスアカウントロールを作成するには**

1. ソースアカウントがロールを引き受けることを許可する信頼ポリシーを作成します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "AWS": "arn:aws:iam::source-account-id:root"
       },
       "Action": "sts:AssumeRole"
     }]
   }
   ```

1. ロールを作成します。

   ```
   aws iam create-role \
     --role-name OpenSearchUIAccessRole \
     --assume-role-policy-document file://trust-policy.json
   ```

1. `es:DescribeDomain` アクションのみを使用してアクセス許可ポリシーを作成します。

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

1. アクセス許可ポリシーをロールにアタッチします:

   ```
   aws iam put-role-policy \
     --role-name OpenSearchUIAccessRole \
     --policy-name ValidationOnly \
     --policy-document file://permissions-policy.json
   ```

### ステップ 2: VPC をセットアップする (ターゲットアカウント)
<a name="scenario-3-step-2"></a>

ターゲットアカウントに VPC がすでに存在する場合は、このステップをスキップします。

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

# Create subnet
aws ec2 create-subnet \
  --vpc-id vpc-id \
  --cidr-block 10.0.1.0/24 \
  --availability-zone regiona \
  --region 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 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 region
```

[VPC ドメインの作成](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)について詳しく説明します。

### ステップ 3: VPC ドメインを作成する (ターゲットアカウント)
<a name="scenario-3-step-3"></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":"*"},"Action":"es:ESHttp*","Resource":"arn:aws:es:region:target-account-id:domain/vpc-domain-name/*"}]}' \
  --region region
```

続行する`Active`前に、ドメインのステータスが になるまで待ちます。

### ステップ 4: OpenSearch UI サービスプリンシパル (ターゲットアカウント) の VPC エンドポイントを承認する
<a name="scenario-3-step-4"></a>

**重要**  
これは VPC ドメインに固有の重要なステップです。OpenSearch UI サービスには、VPC エンドポイントへのアクセスを明示的に許可する必要があります。

```
# Authorize the service principal
aws opensearch authorize-vpc-endpoint-access \
  --domain-name vpc-domain-name \
  --service "application.opensearchservice.amazonaws.com" \
  --region region

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

予想されるレスポンス

```
{
  "AuthorizedPrincipalList": [
    {
      "PrincipalType": "AWS_SERVICE",
      "Principal": "application.opensearchservice.amazonaws.com"
    }
  ]
}
```

### ステップ 5: OpenSearch UI アプリケーションを作成する (ソースアカウント)
<a name="scenario-3-step-5"></a>

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

### ステップ 6: 検証とアクセス
<a name="scenario-3-step-6"></a>

アプリケーションの詳細を取得してエンドポイント URL を取得します。

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ レスポンスからアプリケーションエンドポイント URL に移動します。
+ IAM 認証情報を使用してサインインします。
+ IAM ユーザーは、独自の認証情報を使用してデータプレーンリクエストに署名します。
+ ターゲットドメインアクセスポリシーは、ユーザーがアクセスできるデータを制御します。

## シナリオ 4: VPC ドメインにアクセスする IAM Identity Center ユーザー
<a name="cross-account-scenario-4"></a>

### ステップ 1: クロスアカウント IAM ロールを作成する (ターゲットアカウント)
<a name="scenario-4-step-1"></a>

ソースアカウントがドメイン検証のために引き受けることを許可する IAM ロールをターゲットアカウントに作成します。

**クロスアカウントロールを作成するには**

1. ソースアカウントがロールを引き受けることを許可する信頼ポリシーを作成します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "AWS": "arn:aws:iam::source-account-id:root"
       },
       "Action": "sts:AssumeRole"
     }]
   }
   ```

1. ロールを作成します。

   ```
   aws iam create-role \
     --role-name OpenSearchUIAccessRole \
     --assume-role-policy-document file://trust-policy.json
   ```

1. `es:DescribeDomain` アクションのみを使用してアクセス許可ポリシーを作成します。

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

1. アクセス許可ポリシーをロールにアタッチします:

   ```
   aws iam put-role-policy \
     --role-name OpenSearchUIAccessRole \
     --policy-name ValidationOnly \
     --policy-document file://permissions-policy.json
   ```

### ステップ 2: VPC をセットアップする (ターゲットアカウント)
<a name="scenario-4-step-2"></a>

ターゲットアカウントに VPC がすでに存在する場合は、このステップをスキップします。

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

# Create subnet
aws ec2 create-subnet \
  --vpc-id vpc-id \
  --cidr-block 10.0.1.0/24 \
  --availability-zone regiona \
  --region 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 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 region
```

[VPC ドメインの作成](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)について詳しく説明します。

### ステップ 3: VPC ドメインを作成する (ターゲットアカウント)
<a name="scenario-4-step-3"></a>

と同じコマンドを使用しますが[ステップ 3: VPC ドメインを作成する (ターゲットアカウント)](#scenario-3-step-3)、アクセスポリシーを更新して、ソースアカウントからの IAM Identity Center アプリケーションロールを許可します。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::source-account-id:role/NeoIdCAppRole"
    },
    "Action": "es:ESHttp*",
    "Resource": "arn:aws:es:region:target-account-id:domain/vpc-domain-name/*"
  }]
}
```

続行する`Active`前に、ドメインのステータスが になるまで待ちます。

### ステップ 4: OpenSearch UI サービスプリンシパル (ターゲットアカウント) の VPC エンドポイントを承認する
<a name="scenario-4-step-4"></a>

**重要**  
これは VPC ドメインに固有の重要なステップです。OpenSearch UI サービスには、VPC エンドポイントへのアクセスを明示的に許可する必要があります。

```
# Authorize the service principal
aws opensearch authorize-vpc-endpoint-access \
  --domain-name vpc-domain-name \
  --service "application.opensearchservice.amazonaws.com" \
  --region region

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

予想されるレスポンス

```
{
  "AuthorizedPrincipalList": [
    {
      "PrincipalType": "AWS_SERVICE",
      "Principal": "application.opensearchservice.amazonaws.com"
    }
  ]
}
```

### ステップ 5: IAM Identity Center アプリケーションの IAM ロールを作成する (ソースアカウント)
<a name="scenario-4-step-5"></a>

OpenSearch UI が IAM Identity Center ユーザーデータプレーンアクセスに使用するソースアカウントに IAM ロールを作成します。

**IAM Identity Center アプリケーションロールを作成するには**

1. 信頼ポリシーを作成します。

   ```
   {
     "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::source-account-id:oidc-provider/portal.sso.region.amazonaws.com/apl/application-id"
           }
         }
       }
     ]
   }
   ```

1. アクセス許可ポリシーを作成します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [{
       "Sid": "OpenSearchDomain",
       "Effect": "Allow",
       "Action": ["es:ESHttp*"],
       "Resource": "*"
     }]
   }
   ```

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
   ```

### ステップ 6: IAM Identity Center を使用して OpenSearch UI アプリケーションを作成する (ソースアカウント)
<a name="scenario-4-step-6"></a>

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

### ステップ 7: IAM Identity Center ユーザーとグループを作成して割り当てる
<a name="scenario-4-step-7"></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:::source-account-id:application/ssoins-instance-id/apl-application-id" \
  --principal-id user-id-or-group-id \
  --principal-type USER
```

**ターゲットドメインでバックエンドロールマッピングを設定する**  
IAM Identity Center グループをターゲットドメインの OpenSearch セキュリティロールにマッピングします。

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

### ステップ 8: 検証とアクセス
<a name="scenario-4-step-8"></a>

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ アプリケーションエンドポイント URL に移動します。
+ IAM Identity Center ユーザー認証情報を使用してサインインします。
+ IAM Identity Center ユーザーのデータリクエストは、クロスアカウントロールではなく、IAM Identity Center アプリケーションロールで署名されます。
+ ドメインコントロールデータアクセス許可のバックエンドロールマッピング。

## アプリケーションの管理
<a name="cross-account-managing-applications"></a>

**クロスアカウントデータソースを使用してアプリケーションを更新する**  
以下のコマンドを実行してください。*プレースホルダー値*を、ユーザー自身の情報に置き換えます。

```
aws opensearch update-application \
  --region region \
  --id application-id \
  --data-sources '[{
    "dataSourceArn":"arn:aws:es:region:target-account-id:domain/domain-1",
    "dataSourceDescription":"First cross-account domain",
    "iamRoleForDataSourceArn":"arn:aws:iam::target-account-id:role/OpenSearchUIAccessRole"
  },{
    "dataSourceArn":"arn:aws:es:region:target-account-id:domain/domain-2",
    "dataSourceDescription":"Second cross-account domain",
    "iamRoleForDataSourceArn":"arn:aws:iam::target-account-id:role/OpenSearchUIAccessRole"
  }]'
```

**重要**  
更新オペレーションは、データソース配列全体を置き換えます。保持するすべてのデータソースを含めます。

**アプリケーションを一覧表示する**  
次のコマンドを実行します。

```
aws opensearch list-applications \
  --region region
```

**アプリケーションの削除**  
次のコマンドを実行します。

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

**VPC エンドポイントアクセスの取り消し**  
次のコマンドを実行します。

```
aws opensearch revoke-vpc-endpoint-access \
  --domain-name vpc-domain-name \
  --service "application.opensearchservice.amazonaws.com" \
  --region region
```

## クイックリファレンス
<a name="cross-account-quick-reference"></a>

次の表は、ドメインタイプと認証方法の主な違いをまとめたものです。


**VPC ドメインと比較したパブリックドメイン**  

| 側面 | パブリックドメイン | VPC ドメイン | 
| --- | --- | --- | 
| VPC エンドポイント認可 | 不要 | 必須 – 認可する必要があります application.opensearchservice.amazonaws.com | 
| ネットワーク設定 | なし | HTTPS (443) インバウンドの VPC、サブネット、セキュリティグループ | 
| IAM アクセスポリシー | 必須 | 必須 | 
| クロスアカウントロール | クロスアカウントで必須 | クロスアカウントで必須 | 


**IAM ユーザーと IAM Identity Center ユーザーの比較**  

| 側面 | IAM ユーザー | IAM Identity Center ユーザー | 
| --- | --- | --- | 
| データプレーンの認証情報 | ユーザー独自の IAM 認証情報 | IAM Identity Center アプリケーションロール | 
| アクセスコントロール | ドメインアクセスポリシー | ドメインアクセスポリシーとバックエンドロールマッピング | 
| 追加セットアップ | なし | IAM Identity Center アプリケーションロール、ユーザー/グループの作成、アプリケーションの割り当て、バックエンドロールマッピング | 
| OpenSearch UI アプリケーション設定 | IAM Identity Center オプションなし | --iam-identity-center-options が必須 | 

## 重要な注意事項
<a name="cross-account-important-notes"></a>
+ は、 と同じアカウントにある`iamRoleForDataSourceArn`必要があります`dataSourceArn`。
+ `iamRoleForDataSourceArn` は、クロスアカウントデータソースにのみ必要です。同じアカウントデータソースの場合は省略します。
+ クロスアカウントロールには アクセス`es:DescribeDomain`許可のみが必要です。データプレーンへのアクセスには使用されません。
+ VPC ドメインの場合、IAM ポリシーと VPC エンドポイント認可の両方を設定する必要があります。
+ サポートされているエンジンバージョン: OpenSearch 1.3 以降。

## トラブルシューティング
<a name="cross-account-troubleshooting"></a>


| 問題 | 解決方法 | 
| --- | --- | 
| 「ドメインにアクセスできません」でアプリケーションの作成が失敗する | クロスアカウントロールに アクセスes:DescribeDomain許可があり、信頼ポリシーでソースアカウントが許可されていることを確認します。 | 
| VPC ドメインの関連付けが失敗する | VPC エンドポイントが に対して承認されていることを確認しますapplication.opensearchservice.amazonaws.com。 | 
| IAM ユーザーのデータプレーンアクセスが拒否されました | ターゲットドメインアクセスポリシーが IAM ユーザーまたはロールプリンシパルを許可していることを確認します。 | 
| IAM Identity Center ユーザーのデータプレーンアクセスが拒否されました | バックエンドロールマッピングに IAM Identity Center グループ ID が含まれ、ドメインポリシーで IAM Identity Center アプリケーションロールが許可されていることを確認します。 | 
| アカウントの不一致エラー | iamRoleForDataSourceArn が のドメインと同じアカウントにあることを確認しますdataSourceArn。 | 