

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Akses data lintas akun ke domain OpenSearch
<a name="application-cross-account-data-access-domains"></a>

Anda dapat mengonfigurasi aplikasi OpenSearch UI Anda dalam satu akun untuk mengakses OpenSearch domain di akun yang berbeda. Saat Anda membuat aplikasi OpenSearch UI dengan sumber data lintas akun, Anda memberikan `iamRoleForDataSourceArn` yang menunjuk ke peran IAM di akun target. OpenSearch UI memvalidasi permintaan dengan mengasumsikan peran ini dan memanggil `es:DescribeDomain` untuk memverifikasi aksesibilitas domain. Peran lintas akun hanya digunakan selama asosiasi sumber data. Akses pesawat data dikontrol secara terpisah oleh kebijakan akses domain target.

Dukungan sumber data lintas akun memerlukan kontrol akses berbutir halus untuk diaktifkan pada domain target. Kontrol akses berbutir halus menyediakan lapisan otorisasi tambahan di luar kebijakan akses domain, memungkinkan Anda mengontrol akses ke indeks, dokumen, dan bidang individual.

## Konsep utama
<a name="cross-account-key-concepts"></a>

Akun sumber  
Yang Akun AWS meng-host aplikasi OpenSearch UI Anda.

Akun target  
Di Akun AWS mana OpenSearch domain berada.

Peran lintas akun  
Peran IAM dalam akun target yang digunakan selama asosiasi sumber data saja. OpenSearch UI mengasumsikan peran ini untuk memanggil`es:DescribeDomain`, yang mengambil titik akhir domain dan memverifikasi bahwa kontrol akses berbutir halus diaktifkan. Ini adalah langkah penemuan dan validasi, bukan batas keamanan. Peran lintas akun tidak pernah digunakan untuk akses pesawat data. Setelah asosiasi, semua permintaan bidang data diotorisasi oleh kebijakan akses domain dan pemetaan peran backend, terlepas dari peran lintas akun.

Peran aplikasi IAM Identity Center  
Peran IAM dalam akun sumber yang digunakan untuk akses pesawat data pengguna IAM Identity Center.

## Bagaimana asumsi peran lintas akun bekerja
<a name="cross-account-role-assumption"></a>

[Saat Anda membuat atau memperbarui aplikasi OpenSearch UI dengan sumber data lintas akun, OpenSearch UI mengasumsikan peran lintas akun di akun target menggunakan Sesi Akses Terusan (FAS).](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html) FAS menyebarkan identitas IAM kepala sekolah pemanggil ke panggilan tersebut. `sts:AssumeRole` Ini berarti:
+ Kebijakan kepercayaan akun target mengontrol prinsip akun sumber mana yang dapat mengambil peran lintas akun.
+ Sesi peran yang diasumsikan membawa identitas penelepon yang memulai `CreateApplication` atau `UpdateApplication` meminta.
+ Peran lintas akun diasumsikan hanya selama asosiasi untuk menelepon`es:DescribeDomain`. Ini tidak digunakan untuk operasi pesawat data berikutnya.

Untuk akses pesawat data:
+ Pengguna IAM menandatangani permintaan dengan kredensi IAM mereka sendiri. Kebijakan akses domain target mengotorisasi permintaan ini secara langsung.
+ Pengguna IAM Identity Center memiliki permintaan mereka ditandatangani dengan peran aplikasi IAM Identity Center (`iamRoleForIdentityCenterApplicationArn`) di akun sumber. Kebijakan akses domain target dan pemetaan peran backend mengotorisasi permintaan ini.

## Prasyarat
<a name="cross-account-prerequisites"></a>

Sebelum Anda mengatur akses data lintas akun, pastikan Anda memiliki yang berikut:
+ AWS CLI diinstal dan dikonfigurasi
+ Akses ke sumber dan target Akun AWS s
+ OpenSearch domain dengan kontrol akses [berbutir halus diaktifkan](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html). Asosiasi sumber data lintas akun tidak didukung untuk domain tanpa kontrol akses berbutir halus.
+ Untuk alur Pusat Identitas IAM: Sebuah instance AWS IAM Identity Center organisasi

## Skenario
<a name="cross-account-scenarios"></a>

Pilih skenario yang cocok dengan metode otentikasi dan konfigurasi domain Anda:
+ [Skenario 1: Pengguna IAM mengakses domain publik](#cross-account-scenario-1)
+ [Skenario 2: Pengguna IAM Identity Center mengakses domain publik](#cross-account-scenario-2)
+ [Skenario 3: Pengguna IAM mengakses domain VPC](#cross-account-scenario-3)
+ [Skenario 4: Pengguna Pusat Identitas IAM mengakses domain VPC](#cross-account-scenario-4)

## Skenario 1: Pengguna IAM mengakses domain publik
<a name="cross-account-scenario-1"></a>

### Langkah 1: Buat peran IAM lintas akun (akun target)
<a name="scenario-1-step-1"></a>

Buat peran IAM di akun target yang memungkinkan akun sumber untuk menganggapnya sebagai validasi domain.

**Untuk membuat peran lintas akun**

1. Buat kebijakan kepercayaan yang memungkinkan akun sumber untuk mengambil peran:

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

1. Buat peran:

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

1. Buat kebijakan izin hanya dengan `es:DescribeDomain` tindakan:

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

1. Lampirkan kebijakan izin ke peran:

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

### Langkah 2: Buat OpenSearch domain (akun target)
<a name="scenario-1-step-2"></a>

Buat OpenSearch domain di akun target dengan kontrol akses halus dan enkripsi diaktifkan:

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

**catatan**  
Kebijakan akses ini mencakup akses pesawat data ke prinsipal IAM dari akun sumber. Untuk akses yang lebih ketat, ganti prinsip akar akun dengan pengguna atau peran IAM tertentu. ARNs Kontrol akses berbutir halus menyediakan lapisan otorisasi tambahan untuk mengontrol akses ke indeks dan dokumen.

Tunggu status domain menjadi `Active` sebelum melanjutkan.

### Langkah 3: Buat aplikasi OpenSearch UI (akun sumber)
<a name="scenario-1-step-3"></a>

Buat aplikasi di akun sumber dengan sumber data lintas akun:

```
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":"[\"*\"]"}]'
```

### Langkah 4: Verifikasi dan akses
<a name="scenario-1-step-4"></a>

Ambil detail aplikasi untuk mendapatkan URL endpoint:

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Arahkan ke URL titik akhir aplikasi dari respons.
+ Masuk dengan kredensi IAM.
+ Pengguna IAM menandatangani permintaan pesawat data dengan kredensialnya sendiri.
+ Kebijakan akses domain target mengontrol data apa yang dapat diakses pengguna.

## Skenario 2: Pengguna IAM Identity Center mengakses domain publik
<a name="cross-account-scenario-2"></a>

### Langkah 1: Buat peran IAM lintas akun (akun target)
<a name="scenario-2-step-1"></a>

Buat peran IAM di akun target yang memungkinkan akun sumber untuk menganggapnya sebagai validasi domain.

**Untuk membuat peran lintas akun**

1. Buat kebijakan kepercayaan yang memungkinkan akun sumber untuk mengambil peran:

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

1. Buat peran:

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

1. Buat kebijakan izin hanya dengan `es:DescribeDomain` tindakan:

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

1. Lampirkan kebijakan izin ke peran:

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

### Langkah 2: Buat OpenSearch domain (akun target)
<a name="scenario-2-step-2"></a>

Buat OpenSearch domain di akun target. Gunakan perintah yang sama seperti[Langkah 2: Buat OpenSearch domain (akun target)](#scenario-1-step-2), tetapi perbarui kebijakan akses untuk mengizinkan peran aplikasi Pusat Identitas IAM dari akun sumber:

```
{
  "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}}/*"
  }]
}
```

Tunggu status domain menjadi `Active` sebelum melanjutkan.

### Langkah 3: Buat peran IAM untuk aplikasi IAM Identity Center (akun sumber)
<a name="scenario-2-step-3"></a>

Buat peran IAM di akun sumber yang digunakan OpenSearch UI untuk akses pesawat data pengguna IAM Identity Center.

**Untuk membuat peran aplikasi IAM Identity Center**

1. Buat kebijakan kepercayaan:

   ```
   {
     "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. Membuat kebijakan izin:

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

1. Buat peran dan lampirkan kebijakan:

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

### Langkah 4: Buat aplikasi OpenSearch UI dengan IAM Identity Center (akun sumber)
<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":"[\"*\"]"}]'
```

### Langkah 5: Buat dan tetapkan pengguna dan grup IAM Identity Center
<a name="scenario-2-step-5"></a>

**Buat pengguna Pusat Identitas IAM**  
Jalankan perintah berikut. Ganti {{placeholder values}} dengan informasi Anda sendiri.

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

**Buat grup Pusat Identitas IAM dan tambahkan pengguna**  
Jalankan perintah berikut:

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

**Tetapkan pengguna atau grup ke aplikasi**  
Jalankan perintah berikut:

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

**Konfigurasikan pemetaan peran backend pada domain target**  
Petakan grup Pusat Identitas IAM ke peran OpenSearch keamanan pada domain target:

```
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": []
  }'
```

### Langkah 6: Verifikasi dan akses
<a name="scenario-2-step-6"></a>

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Arahkan ke URL titik akhir aplikasi.
+ Masuk dengan kredensi pengguna IAM Identity Center.
+ Permintaan data pengguna IAM Identity Center ditandatangani dengan peran aplikasi IAM Identity Center, bukan peran lintas akun.
+ Pemetaan peran backend pada izin akses data kontrol domain.

## Skenario 3: Pengguna IAM mengakses domain VPC
<a name="cross-account-scenario-3"></a>

### Langkah 1: Buat peran IAM lintas akun (akun target)
<a name="scenario-3-step-1"></a>

Buat peran IAM di akun target yang memungkinkan akun sumber untuk menganggapnya sebagai validasi domain.

**Untuk membuat peran lintas akun**

1. Buat kebijakan kepercayaan yang memungkinkan akun sumber untuk mengambil peran:

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

1. Buat peran:

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

1. Buat kebijakan izin hanya dengan `es:DescribeDomain` tindakan:

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

1. Lampirkan kebijakan izin ke peran:

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

### Langkah 2: Siapkan VPC (akun target)
<a name="scenario-3-step-2"></a>

Lewati langkah ini jika VPC sudah ada di akun target.

```
# 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 {{region}}a \
  --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}}
```

Pelajari lebih lanjut tentang [pembuatan domain VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Langkah 3: Buat domain VPC (akun target)
<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":"arn:aws:iam::{{source-account-id}}:root"},"Action":"es:ESHttp*","Resource":"arn:aws:es:{{region}}:{{target-account-id}}:domain/{{vpc-domain-name}}/*"}]}' \
  --region {{region}}
```

**catatan**  
Kebijakan akses ini mencakup akses pesawat data ke prinsipal IAM dari akun sumber. Untuk akses yang lebih ketat, ganti prinsip akar akun dengan pengguna atau peran IAM tertentu. ARNs Kontrol akses berbutir halus menyediakan lapisan otorisasi tambahan untuk mengontrol akses ke indeks dan dokumen.

Tunggu status domain menjadi `Active` sebelum melanjutkan.

### Langkah 4: Otorisasi titik akhir VPC untuk OpenSearch prinsipal layanan UI (akun target)
<a name="scenario-3-step-4"></a>

**penting**  
Ini adalah langkah penting yang unik untuk domain VPC. Layanan OpenSearch UI harus diotorisasi secara eksplisit untuk mengakses titik akhir 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}}
```

Tanggapan yang diharapkan:

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

### Langkah 5: Buat aplikasi OpenSearch UI (akun sumber)
<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":"[\"*\"]"}]'
```

### Langkah 6: Verifikasi dan akses
<a name="scenario-3-step-6"></a>

Ambil detail aplikasi untuk mendapatkan URL endpoint:

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Arahkan ke URL titik akhir aplikasi dari respons.
+ Masuk dengan kredensi IAM.
+ Pengguna IAM menandatangani permintaan pesawat data dengan kredensialnya sendiri.
+ Kebijakan akses domain target mengontrol data apa yang dapat diakses pengguna.

## Skenario 4: Pengguna Pusat Identitas IAM mengakses domain VPC
<a name="cross-account-scenario-4"></a>

### Langkah 1: Buat peran IAM lintas akun (akun target)
<a name="scenario-4-step-1"></a>

Buat peran IAM di akun target yang memungkinkan akun sumber untuk menganggapnya sebagai validasi domain.

**Untuk membuat peran lintas akun**

1. Buat kebijakan kepercayaan yang memungkinkan akun sumber untuk mengambil peran:

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

1. Buat peran:

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

1. Buat kebijakan izin hanya dengan `es:DescribeDomain` tindakan:

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

1. Lampirkan kebijakan izin ke peran:

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

### Langkah 2: Siapkan VPC (akun target)
<a name="scenario-4-step-2"></a>

Lewati langkah ini jika VPC sudah ada di akun target.

```
# 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 {{region}}a \
  --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}}
```

Pelajari lebih lanjut tentang [pembuatan domain VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Langkah 3: Buat domain VPC (akun target)
<a name="scenario-4-step-3"></a>

Gunakan perintah yang sama seperti[Langkah 3: Buat domain VPC (akun target)](#scenario-3-step-3), tetapi perbarui kebijakan akses untuk mengizinkan peran aplikasi Pusat Identitas IAM dari akun sumber:

```
{
  "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}}/*"
  }]
}
```

Tunggu status domain menjadi `Active` sebelum melanjutkan.

### Langkah 4: Otorisasi titik akhir VPC untuk OpenSearch prinsipal layanan UI (akun target)
<a name="scenario-4-step-4"></a>

**penting**  
Ini adalah langkah penting yang unik untuk domain VPC. Layanan OpenSearch UI harus diotorisasi secara eksplisit untuk mengakses titik akhir 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}}
```

Tanggapan yang diharapkan:

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

### Langkah 5: Buat peran IAM untuk aplikasi IAM Identity Center (akun sumber)
<a name="scenario-4-step-5"></a>

Buat peran IAM di akun sumber yang digunakan OpenSearch UI untuk akses pesawat data pengguna IAM Identity Center.

**Untuk membuat peran aplikasi IAM Identity Center**

1. Buat kebijakan kepercayaan:

   ```
   {
     "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. Membuat kebijakan izin:

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

1. Buat peran dan lampirkan kebijakan:

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

### Langkah 6: Buat aplikasi OpenSearch UI dengan IAM Identity Center (akun sumber)
<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":"[\"*\"]"}]'
```

### Langkah 7: Buat dan tetapkan pengguna dan grup IAM Identity Center
<a name="scenario-4-step-7"></a>

**Buat pengguna Pusat Identitas IAM**  
Jalankan perintah berikut. Ganti {{placeholder values}} dengan informasi Anda sendiri.

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

**Buat grup Pusat Identitas IAM dan tambahkan pengguna**  
Jalankan perintah berikut:

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

**Tetapkan pengguna atau grup ke aplikasi**  
Jalankan perintah berikut:

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

**Konfigurasikan pemetaan peran backend pada domain target**  
Petakan grup Pusat Identitas IAM ke peran OpenSearch keamanan pada domain target:

```
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": []
  }'
```

### Langkah 8: Verifikasi dan akses
<a name="scenario-4-step-8"></a>

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Arahkan ke URL titik akhir aplikasi.
+ Masuk dengan kredensi pengguna IAM Identity Center.
+ Permintaan data pengguna IAM Identity Center ditandatangani dengan peran aplikasi IAM Identity Center, bukan peran lintas akun.
+ Pemetaan peran backend pada izin akses data kontrol domain.

## Mengelola aplikasi
<a name="cross-account-managing-applications"></a>

**Perbarui aplikasi dengan sumber data lintas akun**  
Jalankan perintah berikut. Ganti {{placeholder values}} dengan informasi Anda sendiri.

```
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}}"
  }]'
```

**penting**  
Operasi pembaruan menggantikan seluruh array sumber data. Sertakan semua sumber data yang ingin Anda simpan.

**Daftar aplikasi**  
Jalankan perintah berikut:

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

**Menghapus sebuah aplikasi**  
Jalankan perintah berikut:

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

**Cabut akses titik akhir VPC**  
Jalankan perintah berikut:

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

## Referensi cepat
<a name="cross-account-quick-reference"></a>

Tabel berikut merangkum perbedaan utama antara jenis domain dan metode otentikasi.


**Domain publik dibandingkan dengan domain VPC**  

| Aspek | Domain publik | Domain VPC | 
| --- | --- | --- | 
| Otorisasi titik akhir VPC | Tidak diperlukan | Wajib — harus mengotorisasi application.opensearchservice.amazonaws.com | 
| Pengaturan jaringan | Tidak ada | VPC, subnet, grup keamanan dengan HTTPS (443) masuk | 
| Kebijakan akses IAM | Diperlukan | Diperlukan | 
| Peran lintas akun | Diperlukan untuk cross-account | Diperlukan untuk cross-account | 


**Pengguna IAM dibandingkan dengan pengguna IAM Identity Center**  

| Aspek | Pengguna IAM | Pengguna Pusat Identitas IAM | 
| --- | --- | --- | 
| Kredensial bidang data | Kredensi IAM milik pengguna sendiri | Peran aplikasi IAM Identity Center | 
| Kontrol akses | Kebijakan akses domain | Kebijakan akses domain dan pemetaan peran backend | 
| Pengaturan tambahan | Tidak ada | Peran aplikasi IAM Identity Center, user/group pembuatan, penugasan aplikasi, pemetaan peran backend | 
| OpenSearch Konfigurasi aplikasi UI | Tidak ada opsi Pusat Identitas IAM | --iam-identity-center-optionsdiperlukan | 

## Catatan penting
<a name="cross-account-important-notes"></a>
+ `iamRoleForDataSourceArn`Harus dalam akun yang sama dengan`dataSourceArn`.
+ Hanya `iamRoleForDataSourceArn` diperlukan untuk sumber data lintas akun. Hilangkan untuk sumber data akun yang sama.
+ Peran lintas akun hanya membutuhkan `es:DescribeDomain` izin. Ini tidak pernah digunakan untuk akses pesawat data.
+ Untuk domain VPC, kebijakan IAM dan otorisasi titik akhir VPC harus dikonfigurasi.
+ Versi mesin yang didukung: OpenSearch 1.3 dan di atas.
+ Asosiasi sumber data lintas akun memerlukan kontrol akses berbutir halus untuk diaktifkan pada domain target.

## Pemecahan masalah
<a name="cross-account-troubleshooting"></a>


| Isu | Resolusi | 
| --- | --- | 
| Pembuatan aplikasi gagal dengan “Tidak dapat mengakses domain” | Verifikasi bahwa peran lintas akun memiliki es:DescribeDomain izin dan kebijakan kepercayaan mengizinkan akun sumber. | 
| Asosiasi domain VPC gagal | Pastikan titik akhir VPC diotorisasi. application.opensearchservice.amazonaws.com | 
| Akses pesawat data ditolak untuk pengguna IAM | Periksa apakah kebijakan akses domain target memungkinkan pengguna IAM atau kepala peran. | 
| Akses pesawat data ditolak untuk pengguna IAM Identity Center | Verifikasi bahwa pemetaan peran backend menyertakan ID grup Pusat Identitas IAM, dan kebijakan domain mengizinkan peran aplikasi Pusat Identitas IAM. | 
| Kesalahan ketidakcocokan akun | Pastikan itu iamRoleForDataSourceArn berada di akun yang sama dengan domain didataSourceArn. | 