

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Accès aux données entre comptes aux domaines OpenSearch
<a name="application-cross-account-data-access-domains"></a>

Vous pouvez configurer vos applications d' OpenSearch interface utilisateur dans un seul compte pour accéder aux OpenSearch domaines de différents comptes. Lorsque vous créez une application d' OpenSearch interface utilisateur avec des sources de données inter-comptes, vous fournissez un `iamRoleForDataSourceArn` qui pointe vers un rôle IAM dans le compte cible. OpenSearch L'interface utilisateur valide la demande en assumant ce rôle et en appelant `es:DescribeDomain` pour vérifier l'accessibilité du domaine. Le rôle multi-comptes est utilisé uniquement pour la validation du plan de contrôle. L'accès au plan de données est contrôlé séparément par la politique d'accès du domaine cible.

**Exemple de code**  
Les exemples de code présentés dans cette rubrique sont fournis à titre d'illustration uniquement. Ils présentent des fonctionnalités de base et peuvent ne pas inclure la gestion des erreurs, les meilleures pratiques de sécurité ou les fonctionnalités prêtes pour la production. Avant d'utiliser un exemple de code en production, passez-le en revue et modifiez-le pour répondre à vos exigences spécifiques, puis testez-le de manière approfondie dans votre environnement.

## Concepts clés
<a name="cross-account-key-concepts"></a>

Compte source  
Celui Compte AWS qui héberge votre application d' OpenSearch interface utilisateur.

Compte cible  
L' Compte AWS endroit où réside le OpenSearch domaine.

Rôle multicompte  
Rôle IAM dans le compte cible utilisé uniquement pour la validation du plan de contrôle. Ce rôle ne nécessite que l'`es:DescribeDomain`autorisation.

Rôle d'application IAM Identity Center  
Rôle IAM dans le compte source utilisé pour accéder au plan de données utilisateur d'IAM Identity Center.

## Conditions préalables
<a name="cross-account-prerequisites"></a>

Avant de configurer l'accès aux données entre comptes, assurez-vous de disposer des éléments suivants :
+ AWS CLI installé et configuré
+ Accès à la fois à la source et à la cible Compte AWS
+ Pour les flux IAM Identity Center : une instance d' AWS IAM Identity Center organisation

## Scénarios
<a name="cross-account-scenarios"></a>

Choisissez le scénario qui correspond à votre méthode d'authentification et à la configuration de votre domaine :
+ [Scénario 1 : accès d'un utilisateur IAM à un domaine public](#cross-account-scenario-1)
+ [Scénario 2 : accès d'un utilisateur de l'IAM Identity Center à un domaine public](#cross-account-scenario-2)
+ [Scénario 3 : accès d'un utilisateur IAM à un domaine VPC](#cross-account-scenario-3)
+ [Scénario 4 : accès d'un utilisateur du centre d'identité IAM à un domaine VPC](#cross-account-scenario-4)

## Scénario 1 : accès d'un utilisateur IAM à un domaine public
<a name="cross-account-scenario-1"></a>

### Étape 1 : créer le rôle IAM entre comptes (compte cible)
<a name="scenario-1-step-1"></a>

Créez un rôle IAM dans le compte cible qui permet au compte source de l'assumer pour la validation du domaine.

**Pour créer le rôle multi-comptes**

1. Créez une politique de confiance qui autorise le compte source à assumer le rôle :

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

1. Créez le rôle :

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

1. Créez une politique d'autorisation avec uniquement l'`es:DescribeDomain`action suivante :

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

1. Associez la politique d'autorisation au rôle :

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

### Étape 2 : Création du OpenSearch domaine (compte cible)
<a name="scenario-1-step-2"></a>

Créez un OpenSearch domaine dans le compte cible avec un contrôle d'accès et un cryptage précis activés :

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

Attendez que le statut du domaine change `Active` avant de continuer.

### Étape 3 : Création de l'application d' OpenSearch interface utilisateur (compte source)
<a name="scenario-1-step-3"></a>

Créez l'application dans le compte source avec la source de données multi-comptes :

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

### Étape 4 : vérification et accès
<a name="scenario-1-step-4"></a>

Récupérez les détails de l'application pour obtenir l'URL du point de terminaison :

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Accédez à l'URL du point de terminaison de l'application depuis la réponse.
+ Connectez-vous à l'aide des informations d'identification IAM.
+ L'utilisateur IAM signe les demandes de plan de données avec ses propres informations d'identification.
+ La politique d'accès au domaine cible contrôle les données auxquelles l'utilisateur peut accéder.

## Scénario 2 : accès d'un utilisateur de l'IAM Identity Center à un domaine public
<a name="cross-account-scenario-2"></a>

### Étape 1 : créer le rôle IAM entre comptes (compte cible)
<a name="scenario-2-step-1"></a>

Créez un rôle IAM dans le compte cible qui permet au compte source de l'assumer pour la validation du domaine.

**Pour créer le rôle multi-comptes**

1. Créez une politique de confiance qui autorise le compte source à assumer le rôle :

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

1. Créez le rôle :

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

1. Créez une politique d'autorisation avec uniquement l'`es:DescribeDomain`action suivante :

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

1. Associez la politique d'autorisation au rôle :

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

### Étape 2 : Création du OpenSearch domaine (compte cible)
<a name="scenario-2-step-2"></a>

Créez un OpenSearch domaine dans le compte cible. Utilisez la même commande que[Étape 2 : Création du OpenSearch domaine (compte cible)](#scenario-1-step-2), mais mettez à jour la politique d'accès pour autoriser le rôle d'application IAM Identity Center à partir du compte source :

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

Attendez que le statut du domaine change `Active` avant de continuer.

### Étape 3 : Création du rôle IAM pour l'application IAM Identity Center (compte source)
<a name="scenario-2-step-3"></a>

Créez un rôle IAM dans le compte source que l' OpenSearch interface utilisateur utilise pour accéder au plan de données utilisateur d'IAM Identity Center.

**Pour créer le rôle d'application IAM Identity Center**

1. Créez une politique de confiance :

   ```
   {
     "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. Créez une politique d'autorisation :

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

1. Créez le rôle et associez les politiques :

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

### Étape 4 : Création de l'application d' OpenSearch interface utilisateur avec IAM Identity Center (compte source)
<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":"[\"*\"]"}]'
```

### Étape 5 : créer et attribuer des utilisateurs et des groupes IAM Identity Center
<a name="scenario-2-step-5"></a>

**Création d'un utilisateur IAM Identity Center**  
Exécutez la commande suivante. Remplacez les *placeholder values* par vos propres informations.

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

**Créez un groupe IAM Identity Center et ajoutez l'utilisateur**  
Exécutez les commandes suivantes :

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

**Affecter l'utilisateur ou le groupe à l'application**  
Exécutez la commande suivante :

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

**Configurer le mappage des rôles principaux sur le domaine cible**  
Associez le groupe IAM Identity Center à un rôle OpenSearch de sécurité sur le domaine cible :

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

### Étape 6 : vérification et accès
<a name="scenario-2-step-6"></a>

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Accédez à l'URL du point de terminaison de l'application.
+ Connectez-vous à l'aide des informations d'identification utilisateur d'IAM Identity Center.
+ Les demandes de données des utilisateurs d'IAM Identity Center sont signées avec le rôle d'application IAM Identity Center, et non avec le rôle multi-comptes.
+ Mappages des rôles principaux sur les autorisations d'accès aux données de contrôle de domaine.

## Scénario 3 : accès d'un utilisateur IAM à un domaine VPC
<a name="cross-account-scenario-3"></a>

### Étape 1 : créer le rôle IAM entre comptes (compte cible)
<a name="scenario-3-step-1"></a>

Créez un rôle IAM dans le compte cible qui permet au compte source de l'assumer pour la validation du domaine.

**Pour créer le rôle multi-comptes**

1. Créez une politique de confiance qui autorise le compte source à assumer le rôle :

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

1. Créez le rôle :

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

1. Créez une politique d'autorisation avec uniquement l'`es:DescribeDomain`action suivante :

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

1. Associez la politique d'autorisation au rôle :

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

### Étape 2 : configurer le VPC (compte cible)
<a name="scenario-3-step-2"></a>

Ignorez cette étape si un VPC existe déjà dans le compte cible.

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

En savoir plus sur la [création de domaines VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Étape 3 : Création du domaine VPC (compte cible)
<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
```

Attendez que le statut du domaine change `Active` avant de continuer.

### Étape 4 : Autoriser le point de terminaison VPC pour le principal du service d' OpenSearch interface utilisateur (compte cible)
<a name="scenario-3-step-4"></a>

**Important**  
Il s'agit d'une étape critique propre aux domaines VPC. Le service d' OpenSearch interface utilisateur doit être explicitement autorisé à accéder au point de terminaison 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
```

Réponse attendue :

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

### Étape 5 : Création de l'application d' OpenSearch interface utilisateur (compte source)
<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":"[\"*\"]"}]'
```

### Étape 6 : vérification et accès
<a name="scenario-3-step-6"></a>

Récupérez les détails de l'application pour obtenir l'URL du point de terminaison :

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Accédez à l'URL du point de terminaison de l'application depuis la réponse.
+ Connectez-vous à l'aide des informations d'identification IAM.
+ L'utilisateur IAM signe les demandes de plan de données avec ses propres informations d'identification.
+ La politique d'accès au domaine cible contrôle les données auxquelles l'utilisateur peut accéder.

## Scénario 4 : accès d'un utilisateur du centre d'identité IAM à un domaine VPC
<a name="cross-account-scenario-4"></a>

### Étape 1 : créer le rôle IAM entre comptes (compte cible)
<a name="scenario-4-step-1"></a>

Créez un rôle IAM dans le compte cible qui permet au compte source de l'assumer pour la validation du domaine.

**Pour créer le rôle multi-comptes**

1. Créez une politique de confiance qui autorise le compte source à assumer le rôle :

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

1. Créez le rôle :

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

1. Créez une politique d'autorisation avec uniquement l'`es:DescribeDomain`action suivante :

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

1. Associez la politique d'autorisation au rôle :

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

### Étape 2 : configurer le VPC (compte cible)
<a name="scenario-4-step-2"></a>

Ignorez cette étape si un VPC existe déjà dans le compte cible.

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

En savoir plus sur la [création de domaines VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Étape 3 : Création du domaine VPC (compte cible)
<a name="scenario-4-step-3"></a>

Utilisez la même commande que[Étape 3 : Création du domaine VPC (compte cible)](#scenario-3-step-3), mais mettez à jour la politique d'accès pour autoriser le rôle d'application IAM Identity Center à partir du compte source :

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

Attendez que le statut du domaine change `Active` avant de continuer.

### Étape 4 : Autoriser le point de terminaison VPC pour le principal du service d' OpenSearch interface utilisateur (compte cible)
<a name="scenario-4-step-4"></a>

**Important**  
Il s'agit d'une étape critique propre aux domaines VPC. Le service d' OpenSearch interface utilisateur doit être explicitement autorisé à accéder au point de terminaison 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
```

Réponse attendue :

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

### Étape 5 : Création du rôle IAM pour l'application IAM Identity Center (compte source)
<a name="scenario-4-step-5"></a>

Créez un rôle IAM dans le compte source que l' OpenSearch interface utilisateur utilise pour accéder au plan de données utilisateur d'IAM Identity Center.

**Pour créer le rôle d'application IAM Identity Center**

1. Créez une politique de confiance :

   ```
   {
     "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. Créez une politique d'autorisation :

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

1. Créez le rôle et associez les politiques :

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

### Étape 6 : Création de l'application d' OpenSearch interface utilisateur avec IAM Identity Center (compte source)
<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":"[\"*\"]"}]'
```

### Étape 7 : créer et attribuer des utilisateurs et des groupes IAM Identity Center
<a name="scenario-4-step-7"></a>

**Création d'un utilisateur IAM Identity Center**  
Exécutez la commande suivante. Remplacez les *placeholder values* par vos propres informations.

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

**Créez un groupe IAM Identity Center et ajoutez l'utilisateur**  
Exécutez les commandes suivantes :

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

**Affecter l'utilisateur ou le groupe à l'application**  
Exécutez la commande suivante :

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

**Configurer le mappage des rôles principaux sur le domaine cible**  
Associez le groupe IAM Identity Center à un rôle OpenSearch de sécurité sur le domaine cible :

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

### Étape 8 : Vérification et accès
<a name="scenario-4-step-8"></a>

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Accédez à l'URL du point de terminaison de l'application.
+ Connectez-vous à l'aide des informations d'identification utilisateur d'IAM Identity Center.
+ Les demandes de données des utilisateurs d'IAM Identity Center sont signées avec le rôle d'application IAM Identity Center, et non avec le rôle multi-comptes.
+ Mappages des rôles principaux sur les autorisations d'accès aux données de contrôle de domaine.

## Gestion des applications
<a name="cross-account-managing-applications"></a>

**Mettre à jour une application avec des sources de données multicomptes**  
Exécutez la commande suivante. Remplacez les *placeholder values* par vos propres informations.

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

**Important**  
L'opération de mise à jour remplace l'ensemble du tableau de sources de données. Incluez toutes les sources de données que vous souhaitez conserver.

**Lister les applications**  
Exécutez la commande suivante :

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

**Supprimer une application**  
Exécutez la commande suivante :

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

**Révoquer l'accès au point de terminaison VPC**  
Exécutez la commande suivante :

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

## Référence rapide
<a name="cross-account-quick-reference"></a>

Les tableaux suivants résument les principales différences entre les types de domaines et les méthodes d'authentification.


**Comparaison entre le domaine public et le domaine VPC**  

| Aspect | Domaine public | Domaine VPC | 
| --- | --- | --- | 
| Autorisation du point de terminaison VPC | Facultatif | Obligatoire — doit autoriser application.opensearchservice.amazonaws.com | 
| Configuration du réseau | Aucune | VPC, sous-réseau, groupe de sécurité avec HTTPS (443) entrant | 
| Politique d'accès IAM | Obligatoire | Obligatoire | 
| Rôle multicompte | Nécessaire pour les comptes multiples | Nécessaire pour les comptes multiples | 


**Comparaison entre un utilisateur IAM et un utilisateur IAM Identity Center**  

| Aspect | Utilisateur IAM | Utilisateur du centre d'identité IAM | 
| --- | --- | --- | 
| Informations d'identification du plan de données | Informations d'identification IAM propres à l'utilisateur | Rôle d'application IAM Identity Center | 
| Contrôle d’accès | Stratégie d'accès au domaine | Politique d'accès au domaine et mappage des rôles principaux | 
| Configuration supplémentaire | Aucune | Rôle de l'application IAM Identity Center, user/group création, attribution des applications, mappage des rôles principaux | 
| OpenSearch Configuration de l'application d'interface utilisateur | Aucune option de centre d'identité IAM | --iam-identity-center-options obligatoire | 

## Remarques importantes
<a name="cross-account-important-notes"></a>
+ `iamRoleForDataSourceArn`Il doit figurer sur le même compte que le`dataSourceArn`.
+ Le n'`iamRoleForDataSourceArn`est requis que pour les sources de données entre comptes. Omettez-le pour les sources de données du même compte.
+ Le rôle multi-comptes ne nécessite que l'`es:DescribeDomain`autorisation. Il n'est jamais utilisé pour accéder au plan de données.
+ Pour les domaines VPC, la politique IAM et l'autorisation des points de terminaison VPC doivent être configurées.
+ Versions du moteur prises en charge : OpenSearch 1.3 et versions ultérieures.

## Résolution des problèmes
<a name="cross-account-troubleshooting"></a>


| Problème | Résolution | 
| --- | --- | 
| La création de l'application échoue avec le message « Impossible d'accéder au domaine » | Vérifiez que le rôle multi-comptes dispose de l'es:DescribeDomainautorisation requise et que la politique de confiance autorise le compte source. | 
| L'association de domaines VPC échoue | Assurez-vous que le point de terminaison VPC est autorisé pour. application.opensearchservice.amazonaws.com | 
| Accès au plan de données refusé à l'utilisateur IAM | Vérifiez que la politique d'accès au domaine cible autorise l'utilisateur IAM ou le principal de rôle. | 
| Accès au plan de données refusé à l'utilisateur d'IAM Identity Center | Vérifiez que le mappage des rôles principaux inclut l'ID de groupe IAM Identity Center et que la politique de domaine autorise le rôle d'application IAM Identity Center. | 
| Erreur d'incompatibilité du compte | Assurez-vous qu'il iamRoleForDataSourceArn se trouve dans le même compte que le domaine dansdataSourceArn. | 