

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Accesso ai dati tra account diversi ai domini OpenSearch
<a name="application-cross-account-data-access-domains"></a>

Puoi configurare le applicazioni OpenSearch dell'interfaccia utente in un unico account per accedere ai OpenSearch domini di account diversi. Quando OpenSearch crei un'applicazione UI con fonti di dati tra account diversi, fornisci un elemento `iamRoleForDataSourceArn` che rimanda a un ruolo IAM nell'account di destinazione. OpenSearch L'interfaccia utente convalida la richiesta assumendo questo ruolo e chiamando `es:DescribeDomain` per verificare l'accessibilità del dominio. Il ruolo tra account diversi viene utilizzato solo durante l'associazione delle fonti di dati. L'accesso al piano dati è controllato separatamente dalla politica di accesso del dominio di destinazione.

Il supporto di origini dati tra account diversi richiede l'attivazione di un controllo granulare degli accessi sul dominio di destinazione. Il controllo granulare degli accessi fornisce un livello di autorizzazione aggiuntivo oltre alla politica di accesso al dominio, che consente di controllare l'accesso a singoli indici, documenti e campi.

## Concetti chiave
<a name="cross-account-key-concepts"></a>

Account di origine  
Il Account AWS che ospita la tua applicazione OpenSearch UI.

Account Target  
Il Account AWS luogo in cui risiede il OpenSearch dominio.

Ruolo tra account  
Un ruolo IAM nell'account di destinazione che viene utilizzato solo durante l'associazione dell'origine dati. OpenSearch L'interfaccia utente assume questo ruolo per la chiamata`es:DescribeDomain`, che recupera l'endpoint del dominio e verifica che il controllo granulare degli accessi sia abilitato. Si tratta di una fase di scoperta e convalida, non di un limite di sicurezza. Il ruolo tra account diversi non viene mai utilizzato per l'accesso al piano dati. Dopo l'associazione, tutte le richieste del piano dati sono autorizzate dalla politica di accesso del dominio e dalle mappature dei ruoli di backend, indipendentemente dal ruolo tra account.

Ruolo dell'applicazione IAM Identity Center  
Un ruolo IAM nell'account di origine utilizzato per l'accesso al piano dati degli utenti di IAM Identity Center.

## Come funziona l'ipotesi di ruolo tra account
<a name="cross-account-role-assumption"></a>

[Quando crei o aggiorni un'applicazione OpenSearch UI con un'origine dati multiaccount, l' OpenSearch interfaccia utente assume il ruolo tra account nell'account di destinazione utilizzando Forwarded Access Sessions (FAS).](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html) FAS propaga l'identità IAM del principale chiamante alla chiamata. `sts:AssumeRole` Ciò significa che:
+ La policy di fiducia dell'account di destinazione controlla quali principali account di origine possono assumere il ruolo tra account.
+ La sessione di ruolo assunta riporta l'identità del chiamante che ha avviato la richiesta or. `CreateApplication` `UpdateApplication`
+ Il ruolo tra account diversi viene assunto solo durante l'associazione alla chiamata. `es:DescribeDomain` Non viene utilizzato per operazioni successive sul piano dati.

Per l'accesso al piano dati:
+ Gli utenti IAM firmano le richieste con le proprie credenziali IAM. La politica di accesso del dominio di destinazione autorizza direttamente queste richieste.
+ Gli utenti di IAM Identity Center fanno firmare le loro richieste con il ruolo applicativo IAM Identity Center (`iamRoleForIdentityCenterApplicationArn`) nell'account di origine. La policy di accesso e le mappature dei ruoli di backend del dominio di destinazione autorizzano queste richieste.

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

Prima di configurare l'accesso ai dati tra account diversi, assicurati di disporre di quanto segue:
+ AWS CLI installato e configurato
+ Accesso sia ai file di origine che a quelli Account AWS di destinazione
+ OpenSearch domini con controllo [granulare degli accessi](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html) abilitato. L'associazione delle fonti di dati tra account non è supportata per i domini senza controllo granulare degli accessi.
+ Per i flussi di IAM Identity Center: un'istanza organizzativa AWS IAM Identity Center 

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

Scegli lo scenario che corrisponde al tuo metodo di autenticazione e alla configurazione del dominio:
+ [Scenario 1: utente IAM che accede a un dominio pubblico](#cross-account-scenario-1)
+ [Scenario 2: utente di IAM Identity Center che accede a un dominio pubblico](#cross-account-scenario-2)
+ [Scenario 3: utente IAM che accede a un dominio VPC](#cross-account-scenario-3)
+ [Scenario 4: utente IAM Identity Center che accede a un dominio VPC](#cross-account-scenario-4)

## Scenario 1: utente IAM che accede a un dominio pubblico
<a name="cross-account-scenario-1"></a>

### Fase 1: Creare il ruolo IAM per più account (account di destinazione)
<a name="scenario-1-step-1"></a>

Crea un ruolo IAM nell'account di destinazione che consenta all'account di origine di assumerlo per la convalida del dominio.

**Per creare il ruolo tra account**

1. Crea una politica di fiducia che consenta all'account di origine di assumere il ruolo:

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

1. Crea il ruolo:

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

1. Crea una politica di autorizzazioni con la sola `es:DescribeDomain` azione:

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

1. Allega la politica delle autorizzazioni al ruolo:

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

### Fase 2: Creare il OpenSearch dominio (account di destinazione)
<a name="scenario-1-step-2"></a>

Crea un OpenSearch dominio nell'account di destinazione con il controllo granulare degli accessi e la crittografia abilitati:

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

**Nota**  
Questa policy di accesso riguarda l'accesso dal piano dati ai principali IAM dal piano dati dall'account di origine. Per un accesso più restrittivo, sostituisci il principale principale dell'account con un utente o un ruolo IAM specifico. ARNs Il controllo granulare degli accessi fornisce un livello di autorizzazione aggiuntivo per controllare l'accesso a indici e documenti.

Attendi che lo stato del dominio diventi tale prima di procedere. `Active`

### Fase 3: Creare l'applicazione OpenSearch UI (account di origine)
<a name="scenario-1-step-3"></a>

Crea l'applicazione nell'account di origine con l'origine dati tra account:

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

### Fase 4: Verifica e accedi
<a name="scenario-1-step-4"></a>

Recupera i dettagli dell'applicazione per ottenere l'URL dell'endpoint:

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Passa all'URL dell'endpoint dell'applicazione dalla risposta.
+ Accedi con le credenziali IAM.
+ L'utente IAM firma le richieste del piano dati con le proprie credenziali.
+ La policy di accesso al dominio di destinazione controlla a quali dati l'utente può accedere.

## Scenario 2: utente di IAM Identity Center che accede a un dominio pubblico
<a name="cross-account-scenario-2"></a>

### Fase 1: Creare il ruolo IAM per più account (account di destinazione)
<a name="scenario-2-step-1"></a>

Crea un ruolo IAM nell'account di destinazione che consenta all'account di origine di assumerlo per la convalida del dominio.

**Per creare il ruolo tra account**

1. Crea una politica di fiducia che consenta all'account di origine di assumere il ruolo:

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

1. Crea il ruolo:

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

1. Crea una politica di autorizzazioni con la sola `es:DescribeDomain` azione:

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

1. Allega la politica delle autorizzazioni al ruolo:

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

### Fase 2: Creare il OpenSearch dominio (account di destinazione)
<a name="scenario-2-step-2"></a>

Crea un OpenSearch dominio nell'account di destinazione. Utilizza lo stesso comando[Fase 2: Creare il OpenSearch dominio (account di destinazione)](#scenario-1-step-2), ma aggiorna la policy di accesso per consentire il ruolo dell'applicazione IAM Identity Center dall'account di origine:

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

Attendi che lo stato del dominio diventi tale `Active` prima di procedere.

### Fase 3: Creare il ruolo IAM per l'applicazione IAM Identity Center (account di origine)
<a name="scenario-2-step-3"></a>

Crea un ruolo IAM nell'account di origine che l' OpenSearch interfaccia utente utilizza per l'accesso al piano dati degli utenti di IAM Identity Center.

**Per creare il ruolo applicativo IAM Identity Center**

1. Crea una politica di fiducia:

   ```
   {
     "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. Crea una politica di autorizzazioni:

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

1. Crea il ruolo e allega le politiche:

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

### Fase 4: Creare l'applicazione OpenSearch UI con IAM Identity Center (account di origine)
<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":"[\"*\"]"}]'
```

### Fase 5: Creare e assegnare utenti e gruppi di IAM Identity Center
<a name="scenario-2-step-5"></a>

**Crea un utente IAM Identity Center**  
Eseguire il seguente comando seguente. Sostituisci {{placeholder values}} con le informazioni appropriate.

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

**Crea un gruppo IAM Identity Center e aggiungi l'utente**  
Esegui i comandi seguenti:

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

**Assegna l'utente o il gruppo all'applicazione**  
Esegui il comando seguente:

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

**Configura la mappatura dei ruoli di backend sul dominio di destinazione**  
Mappa il gruppo IAM Identity Center su un ruolo OpenSearch di sicurezza nel dominio di destinazione:

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

### Fase 6: Verifica e accesso
<a name="scenario-2-step-6"></a>

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Vai all'URL dell'endpoint dell'applicazione.
+ Accedi con le credenziali utente di IAM Identity Center.
+ Le richieste di dati degli utenti di IAM Identity Center vengono firmate con il ruolo applicativo IAM Identity Center, non con il ruolo tra account.
+ Le mappature dei ruoli di backend sul dominio controllano le autorizzazioni di accesso ai dati.

## Scenario 3: utente IAM che accede a un dominio VPC
<a name="cross-account-scenario-3"></a>

### Fase 1: Creare il ruolo IAM per più account (account di destinazione)
<a name="scenario-3-step-1"></a>

Crea un ruolo IAM nell'account di destinazione che consenta all'account di origine di assumerlo per la convalida del dominio.

**Per creare il ruolo tra account**

1. Crea una politica di fiducia che consenta all'account di origine di assumere il ruolo:

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

1. Crea il ruolo:

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

1. Crea una politica di autorizzazioni con la sola `es:DescribeDomain` azione:

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

1. Allega la politica delle autorizzazioni al ruolo:

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

### Fase 2: Configurare il VPC (account di destinazione)
<a name="scenario-3-step-2"></a>

Salta questo passaggio se nell'account di destinazione esiste già un 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 {{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}}
```

Scopri di più sulla [creazione di domini VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Fase 3: Creare il dominio VPC (account di destinazione)
<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}}
```

**Nota**  
Questa politica di accesso riguarda l'accesso dal piano dati ai principali IAM dall'account di origine. Per un accesso più restrittivo, sostituisci il principale principale dell'account con un utente o un ruolo IAM specifico. ARNs Il controllo granulare degli accessi fornisce un livello di autorizzazione aggiuntivo per controllare l'accesso a indici e documenti.

Attendi che lo stato del dominio diventi tale prima di procedere. `Active`

### Passaggio 4: autorizzare l'endpoint VPC per il principale OpenSearch del servizio UI (account di destinazione)
<a name="scenario-3-step-4"></a>

**Importante**  
Si tratta di un passaggio fondamentale che riguarda esclusivamente i domini VPC. Il servizio OpenSearch UI deve essere esplicitamente autorizzato ad accedere all'endpoint 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}}
```

Risposta prevista:

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

### Fase 5: Creare l'applicazione OpenSearch UI (account di origine)
<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":"[\"*\"]"}]'
```

### Passaggio 6: verifica e accesso
<a name="scenario-3-step-6"></a>

Recupera i dettagli dell'applicazione per ottenere l'URL dell'endpoint:

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Passa all'URL dell'endpoint dell'applicazione dalla risposta.
+ Accedi con le credenziali IAM.
+ L'utente IAM firma le richieste del piano dati con le proprie credenziali.
+ La policy di accesso al dominio di destinazione controlla a quali dati l'utente può accedere.

## Scenario 4: utente IAM Identity Center che accede a un dominio VPC
<a name="cross-account-scenario-4"></a>

### Fase 1: Creare il ruolo IAM per più account (account di destinazione)
<a name="scenario-4-step-1"></a>

Crea un ruolo IAM nell'account di destinazione che consenta all'account di origine di assumerlo per la convalida del dominio.

**Per creare il ruolo tra account**

1. Crea una politica di fiducia che consenta all'account di origine di assumere il ruolo:

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

1. Crea il ruolo:

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

1. Crea una politica di autorizzazioni con la sola `es:DescribeDomain` azione:

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

1. Allega la politica delle autorizzazioni al ruolo:

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

### Fase 2: Configurare il VPC (account di destinazione)
<a name="scenario-4-step-2"></a>

Salta questo passaggio se nell'account di destinazione esiste già un 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 {{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}}
```

Scopri di più sulla [creazione di domini VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Fase 3: Creare il dominio VPC (account di destinazione)
<a name="scenario-4-step-3"></a>

Utilizza lo stesso comando[Fase 3: Creare il dominio VPC (account di destinazione)](#scenario-3-step-3), ma aggiorna la policy di accesso per consentire il ruolo dell'applicazione IAM Identity Center dall'account di origine:

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

Attendi che lo stato del dominio diventi tale `Active` prima di procedere.

### Passaggio 4: autorizzare l'endpoint VPC per il principale OpenSearch del servizio UI (account di destinazione)
<a name="scenario-4-step-4"></a>

**Importante**  
Si tratta di un passaggio fondamentale che riguarda esclusivamente i domini VPC. Il servizio OpenSearch UI deve essere esplicitamente autorizzato ad accedere all'endpoint 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}}
```

Risposta prevista:

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

### Fase 5: Creare il ruolo IAM per l'applicazione IAM Identity Center (account di origine)
<a name="scenario-4-step-5"></a>

Crea un ruolo IAM nell'account di origine che l' OpenSearch interfaccia utente utilizza per l'accesso al piano dati degli utenti di IAM Identity Center.

**Per creare il ruolo applicativo IAM Identity Center**

1. Crea una politica di fiducia:

   ```
   {
     "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. Crea una politica di autorizzazioni:

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

1. Crea il ruolo e allega le politiche:

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

### Fase 6: Creare l'applicazione OpenSearch UI con IAM Identity Center (account di origine)
<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":"[\"*\"]"}]'
```

### Fase 7: Creare e assegnare utenti e gruppi di IAM Identity Center
<a name="scenario-4-step-7"></a>

**Crea un utente IAM Identity Center**  
Eseguire il seguente comando seguente. Sostituisci {{placeholder values}} con le informazioni appropriate.

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

**Crea un gruppo IAM Identity Center e aggiungi l'utente**  
Esegui i comandi seguenti:

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

**Assegna l'utente o il gruppo all'applicazione**  
Esegui il comando seguente:

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

**Configura la mappatura dei ruoli di backend sul dominio di destinazione**  
Mappa il gruppo IAM Identity Center su un ruolo OpenSearch di sicurezza nel dominio di destinazione:

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

### Fase 8: Verifica e accesso
<a name="scenario-4-step-8"></a>

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Vai all'URL dell'endpoint dell'applicazione.
+ Accedi con le credenziali utente di IAM Identity Center.
+ Le richieste di dati degli utenti di IAM Identity Center vengono firmate con il ruolo applicativo IAM Identity Center, non con il ruolo tra account.
+ Le mappature dei ruoli di backend sul dominio controllano le autorizzazioni di accesso ai dati.

## Gestione delle applicazioni
<a name="cross-account-managing-applications"></a>

**Aggiorna un'applicazione con fonti di dati tra account diversi**  
Eseguire il seguente comando seguente. Sostituisci {{placeholder values}} con le informazioni appropriate.

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

**Importante**  
L'operazione di aggiornamento sostituisce l'intero array di fonti di dati. Includi tutte le fonti di dati che desideri conservare.

**Elenca le applicazioni**  
Esegui il comando seguente:

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

**Eliminazione di un'applicazione**  
Esegui il comando seguente:

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

**Revoca l'accesso agli endpoint VPC**  
Esegui il comando seguente:

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

## Riferimento rapido
<a name="cross-account-quick-reference"></a>

Le tabelle seguenti riassumono le principali differenze tra i tipi di dominio e i metodi di autenticazione.


**Dominio pubblico rispetto al dominio VPC**  

| Aspetto | Dominio pubblico | Dominio VPC | 
| --- | --- | --- | 
| Autorizzazione degli endpoint VPC | Campo non obbligatorio | Obbligatoria: deve autorizzare application.opensearchservice.amazonaws.com | 
| Configurazione della rete | Nessuno | VPC, sottorete, gruppo di sicurezza con HTTPS (443) in ingresso | 
| Politica di accesso IAM | Richiesto | Richiesto | 
| Ruolo tra account | Obbligatorio per più account | Obbligatorio per più account | 


**Utente IAM rispetto all'utente IAM Identity Center**  

| Aspetto | Utente IAM | Utente IAM Identity Center | 
| --- | --- | --- | 
| Credenziali del piano dati | Credenziali IAM proprie dell'utente | Ruolo applicativo IAM Identity Center | 
| Controllo accessi | Policy di accesso al dominio | Policy di accesso al dominio e mappatura dei ruoli di backend | 
| Configurazione aggiuntiva | Nessuno | Ruolo dell'applicazione IAM Identity Center, user/group creazione, assegnazione delle applicazioni, mappatura dei ruoli di backend | 
| OpenSearch Configurazione dell'applicazione UI | Nessuna opzione IAM Identity Center | --iam-identity-center-options obbligatorio | 

## Note importanti
<a name="cross-account-important-notes"></a>
+ `iamRoleForDataSourceArn`Deve essere nello stesso account del`dataSourceArn`.
+ `iamRoleForDataSourceArn`È richiesto solo per le fonti di dati tra account diversi. Omettilo per le fonti di dati dello stesso account.
+ Il ruolo tra account diversi richiede solo l'autorizzazione. `es:DescribeDomain` Non viene mai utilizzato per l'accesso al piano dati.
+ Per i domini VPC, è necessario configurare sia la policy IAM che l'autorizzazione degli endpoint VPC.
+ Versioni del motore supportate: OpenSearch 1.3 e successive.
+ L'associazione delle fonti di dati tra account richiede l'attivazione di un controllo granulare degli accessi sul dominio di destinazione.

## Risoluzione dei problemi
<a name="cross-account-troubleshooting"></a>


| Problema | Risoluzione | 
| --- | --- | 
| La creazione dell'applicazione non riesce con «Impossibile accedere al dominio» | Verifica che il ruolo interaccount disponga dell'es:DescribeDomainautorizzazione e che la politica di attendibilità consenta l'accesso all'account di origine. | 
| L'associazione del dominio VPC non riesce | Assicurati che l'endpoint VPC sia autorizzato per. application.opensearchservice.amazonaws.com | 
| Accesso al piano dati negato per l'utente IAM | Verifica che la policy di accesso al dominio di destinazione consenta l'utente o il responsabile del ruolo IAM. | 
| Accesso al piano dati negato per l'utente IAM Identity Center | Verifica che la mappatura dei ruoli di backend includa l'ID del gruppo IAM Identity Center e che la policy del dominio consenta il ruolo dell'applicazione IAM Identity Center. | 
| Errore di mancata corrispondenza dell'account | Assicurati che iamRoleForDataSourceArn si trovi nello stesso account del dominio indataSourceArn. | 