

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceso a datos multicuenta a dominios OpenSearch
<a name="application-cross-account-data-access-domains"></a>

Puede configurar sus aplicaciones de OpenSearch interfaz de usuario en una cuenta para acceder a los OpenSearch dominios de diferentes cuentas. Al crear una aplicación de OpenSearch interfaz de usuario con fuentes de datos multicuenta, se proporciona una `iamRoleForDataSourceArn` que apunta a una función de IAM en la cuenta de destino. OpenSearch La interfaz de usuario valida la solicitud asumiendo esta función y realizando una llamada `es:DescribeDomain` para verificar la accesibilidad del dominio. La función multicuenta se usa solo durante la asociación de fuentes de datos. El acceso al plano de datos se controla por separado mediante la política de acceso del dominio de destino.

La compatibilidad con fuentes de datos entre cuentas requiere que se habilite un control de acceso detallado en el dominio de destino. El control de acceso detallado proporciona una capa de autorización adicional que va más allá de la política de acceso al dominio, lo que le permite controlar el acceso a índices, documentos y campos individuales.

## Conceptos clave
<a name="cross-account-key-concepts"></a>

Cuenta de origen  
El Cuenta de AWS que aloja su OpenSearch aplicación de interfaz de usuario.

Cuenta objetivo  
Lugar Cuenta de AWS en el que reside el OpenSearch dominio.

Función multicuenta  
Un rol de IAM en la cuenta de destino que se usa únicamente durante la asociación de fuentes de datos. OpenSearch Al llamar`es:DescribeDomain`, la interfaz de usuario asume esta función, que recupera el punto final del dominio y verifica que el control de acceso detallado esté habilitado. Se trata de un paso de descubrimiento y validación, no de un límite de seguridad. La función multicuenta nunca se utiliza para el acceso al plano de datos. Tras la asociación, todas las solicitudes del plano de datos están autorizadas por la política de acceso del dominio y las asignaciones de funciones de backend, independientemente de la función entre cuentas.

Función de aplicación de IAM Identity Center  
Función de IAM en la cuenta de origen que se utiliza para acceder al plano de datos de los usuarios del IAM Identity Center.

## Cómo funciona la suposición de roles entre cuentas
<a name="cross-account-role-assumption"></a>

[Al crear o actualizar una aplicación de OpenSearch interfaz de usuario con una fuente de datos multicuenta, la OpenSearch interfaz de usuario asume la función multicuenta en la cuenta de destino mediante las sesiones de acceso reenviado (FAS).](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html) FAS propaga la propia identidad de IAM del principal que realiza la llamada. `sts:AssumeRole` Esto significa:
+ La política de confianza de la cuenta de destino controla qué directores de cuentas de origen pueden asumir la función de cuentas cruzadas.
+ La sesión de rol asumida contiene la identidad de la persona que llama y que inició la `CreateApplication` solicitud. `UpdateApplication`
+ La función multicuenta solo se asume durante la asociación con la llamada. `es:DescribeDomain` No se utiliza para ninguna operación posterior del plano de datos.

Para acceder al plano de datos:
+ Los usuarios de IAM firman las solicitudes con sus propias credenciales de IAM. La política de acceso del dominio de destino autoriza estas solicitudes directamente.
+ Los usuarios del Centro de Identidad de IAM firman sus solicitudes con el rol de aplicación del Centro de Identidad de IAM (`iamRoleForIdentityCenterApplicationArn`) en la cuenta de origen. La política de acceso del dominio de destino y las asignaciones de funciones de back-end autorizan estas solicitudes.

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

Antes de configurar el acceso a los datos entre cuentas, asegúrate de disponer de lo siguiente:
+ AWS CLI instalado y configurado
+ Acceso tanto al origen como al destino Cuenta de AWS
+ OpenSearch dominios con un [control de acceso detallado habilitado](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html). La asociación de fuentes de datos entre cuentas no se admite en dominios sin un control de acceso detallado.
+ Para los flujos del IAM Identity Center: una instancia de organización AWS IAM Identity Center 

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

Elija el escenario que coincida con su método de autenticación y configuración de dominio:
+ [Escenario 1: un usuario de IAM accede a un dominio público](#cross-account-scenario-1)
+ [Escenario 2: un usuario del IAM Identity Center accede a un dominio público](#cross-account-scenario-2)
+ [Escenario 3: usuario de IAM que accede a un dominio de VPC](#cross-account-scenario-3)
+ [Escenario 4: Un usuario del IAM Identity Center accede a un dominio de VPC](#cross-account-scenario-4)

## Escenario 1: un usuario de IAM accede a un dominio público
<a name="cross-account-scenario-1"></a>

### Paso 1: Crear el rol de IAM multicuenta (cuenta de destino)
<a name="scenario-1-step-1"></a>

Cree un rol de IAM en la cuenta de destino que permita a la cuenta de origen asumirlo para la validación del dominio.

**Para crear el rol multicuenta**

1. Cree una política de confianza que permita a la cuenta de origen asumir el rol:

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

1. Cree el rol:

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

1. Crea una política de permisos con solo la siguiente `es:DescribeDomain` acción:

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

1. Asocie la política de permisos al rol:

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

### Paso 2: Crea el OpenSearch dominio (cuenta de destino)
<a name="scenario-1-step-2"></a>

Cree un OpenSearch dominio en la cuenta de destino con un control de acceso detallado y un cifrado habilitados:

```
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**  
Esta política de acceso limita el acceso al plano de datos a los principales de IAM desde la cuenta de origen. Para un acceso más restrictivo, sustituya el director raíz de la cuenta por un usuario o rol de IAM específico. ARNs El control de acceso detallado proporciona una capa de autorización adicional para controlar el acceso a los índices y documentos.

Espere a que el estado del dominio cambie antes de continuar. `Active`

### Paso 3: Crear la aplicación de OpenSearch interfaz de usuario (cuenta de origen)
<a name="scenario-1-step-3"></a>

Cree la aplicación en la cuenta de origen con la fuente de datos multicuenta:

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

### Paso 4: Verificar y acceder
<a name="scenario-1-step-4"></a>

Recupere los detalles de la aplicación para obtener la URL del punto final:

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Navegue hasta la URL del punto final de la aplicación desde la respuesta.
+ Inicie sesión con las credenciales de IAM.
+ El usuario de IAM firma las solicitudes del plano de datos con sus propias credenciales.
+ La política de acceso al dominio de destino controla los datos a los que puede acceder el usuario.

## Escenario 2: un usuario del IAM Identity Center accede a un dominio público
<a name="cross-account-scenario-2"></a>

### Paso 1: Crear el rol de IAM multicuenta (cuenta de destino)
<a name="scenario-2-step-1"></a>

Cree un rol de IAM en la cuenta de destino que permita a la cuenta de origen asumirlo para la validación del dominio.

**Para crear el rol multicuenta**

1. Cree una política de confianza que permita a la cuenta de origen asumir el rol:

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

1. Cree el rol:

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

1. Crea una política de permisos con solo la siguiente `es:DescribeDomain` acción:

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

1. Asocie la política de permisos al rol:

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

### Paso 2: Crea el OpenSearch dominio (cuenta de destino)
<a name="scenario-2-step-2"></a>

Crea un OpenSearch dominio en la cuenta de destino. Utilice el mismo comando que[Paso 2: Crea el OpenSearch dominio (cuenta de destino)](#scenario-1-step-2), pero actualice la política de acceso para permitir el rol de aplicación del Centro de Identidad de IAM desde la cuenta de origen:

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

Espere a que el estado del dominio cambie `Active` antes de continuar.

### Paso 3: Cree la función de IAM para la aplicación IAM Identity Center (cuenta de origen)
<a name="scenario-2-step-3"></a>

Cree una función de IAM en la cuenta de origen que la OpenSearch interfaz de usuario utiliza para acceder al plano de datos de los usuarios del IAM Identity Center.

**Para crear el rol de aplicación del Centro de Identidad de IAM**

1. Cree una política de confianza:

   ```
   {
     "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. Cree una política de permisos:

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

1. Cree el rol y adjunte las políticas:

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

### Paso 4: Cree la aplicación de OpenSearch interfaz de usuario con IAM Identity Center (cuenta de origen)
<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":"[\"*\"]"}]'
```

### Paso 5: Crear y asignar usuarios y grupos del Centro de Identidad de IAM
<a name="scenario-2-step-5"></a>

**Cree un usuario del Centro de Identidad de IAM**  
Ejecute el comando siguiente. Sustituya {{placeholder values}} por su propia información.

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

**Cree un grupo del Centro de identidades de IAM y añada el usuario**  
Ejecute los siguientes comandos :

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

**Asigne el usuario o el grupo a la aplicación**  
Use el siguiente comando:

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

**Configure la asignación de roles de backend en el dominio de destino**  
Asigne el grupo del centro de identidad de IAM a un rol OpenSearch de seguridad en el dominio de destino:

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

### Paso 6: Verificar y acceder
<a name="scenario-2-step-6"></a>

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Navegue hasta la URL del punto final de la aplicación.
+ Inicie sesión con las credenciales de usuario del IAM Identity Center.
+ Las solicitudes de datos de los usuarios del IAM Identity Center se firman con el rol de aplicación del Centro de Identidad de IAM, no con el rol multicuenta.
+ Las asignaciones de funciones de backend en el dominio controlan los permisos de acceso a los datos.

## Escenario 3: usuario de IAM que accede a un dominio de VPC
<a name="cross-account-scenario-3"></a>

### Paso 1: Crear el rol de IAM multicuenta (cuenta de destino)
<a name="scenario-3-step-1"></a>

Cree un rol de IAM en la cuenta de destino que permita a la cuenta de origen asumirlo para la validación del dominio.

**Para crear el rol multicuenta**

1. Cree una política de confianza que permita a la cuenta de origen asumir el rol:

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

1. Cree el rol:

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

1. Crea una política de permisos con solo la siguiente `es:DescribeDomain` acción:

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

1. Asocie la política de permisos al rol:

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

### Paso 2: Configurar la VPC (cuenta de destino)
<a name="scenario-3-step-2"></a>

Omita este paso si ya existe una VPC en la cuenta de destino.

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

Más información sobre la creación de [dominios de VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Paso 3: Crear el dominio de VPC (cuenta de destino)
<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**  
Esta política de acceso abarca el acceso al plano de datos a los principales de IAM desde la cuenta de origen. Para un acceso más restrictivo, sustituya el director raíz de la cuenta por un usuario o rol de IAM específico. ARNs El control de acceso detallado proporciona una capa de autorización adicional para controlar el acceso a los índices y documentos.

Espere a que el estado del dominio cambie antes de continuar. `Active`

### Paso 4: Autorizar el punto final de la VPC para el principal del servicio de OpenSearch interfaz de usuario (cuenta de destino)
<a name="scenario-3-step-4"></a>

**importante**  
Este es un paso fundamental que es exclusivo de los dominios de VPC. El servicio de OpenSearch interfaz de usuario debe estar autorizado explícitamente para acceder al punto final de la 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}}
```

Respuesta esperada:

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

### Paso 5: Crear la aplicación de OpenSearch interfaz de usuario (cuenta de origen)
<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":"[\"*\"]"}]'
```

### Paso 6: Verificar y acceder
<a name="scenario-3-step-6"></a>

Recupere los detalles de la aplicación para obtener la URL del punto final:

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Navegue hasta la URL del punto final de la aplicación desde la respuesta.
+ Inicie sesión con las credenciales de IAM.
+ El usuario de IAM firma las solicitudes del plano de datos con sus propias credenciales.
+ La política de acceso al dominio de destino controla los datos a los que puede acceder el usuario.

## Escenario 4: Un usuario del IAM Identity Center accede a un dominio de VPC
<a name="cross-account-scenario-4"></a>

### Paso 1: Crear el rol de IAM multicuenta (cuenta de destino)
<a name="scenario-4-step-1"></a>

Cree un rol de IAM en la cuenta de destino que permita a la cuenta de origen asumirlo para la validación del dominio.

**Para crear el rol multicuenta**

1. Cree una política de confianza que permita a la cuenta de origen asumir el rol:

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

1. Cree el rol:

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

1. Crea una política de permisos con solo la siguiente `es:DescribeDomain` acción:

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

1. Asocie la política de permisos al rol:

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

### Paso 2: Configurar la VPC (cuenta de destino)
<a name="scenario-4-step-2"></a>

Omita este paso si ya existe una VPC en la cuenta de destino.

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

Más información sobre la creación de [dominios de VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Paso 3: Crear el dominio de VPC (cuenta de destino)
<a name="scenario-4-step-3"></a>

Utilice el mismo comando que[Paso 3: Crear el dominio de VPC (cuenta de destino)](#scenario-3-step-3), pero actualice la política de acceso para permitir el rol de aplicación de IAM Identity Center desde la cuenta de origen:

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

Espere a que el estado del dominio cambie `Active` antes de continuar.

### Paso 4: Autorizar el punto final de la VPC para el principal del servicio de OpenSearch interfaz de usuario (cuenta de destino)
<a name="scenario-4-step-4"></a>

**importante**  
Este es un paso fundamental que es exclusivo de los dominios de VPC. El servicio de OpenSearch interfaz de usuario debe estar autorizado explícitamente para acceder al punto final de la 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}}
```

Respuesta esperada:

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

### Paso 5: Cree la función de IAM para la aplicación IAM Identity Center (cuenta de origen)
<a name="scenario-4-step-5"></a>

Cree una función de IAM en la cuenta de origen que la OpenSearch interfaz de usuario utiliza para acceder al plano de datos de los usuarios del IAM Identity Center.

**Para crear el rol de aplicación del Centro de Identidad de IAM**

1. Cree una política de confianza:

   ```
   {
     "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. Cree una política de permisos:

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

1. Cree el rol y adjunte las políticas:

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

### Paso 6: Cree la aplicación de OpenSearch interfaz de usuario con IAM Identity Center (cuenta de origen)
<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":"[\"*\"]"}]'
```

### Paso 7: Crear y asignar usuarios y grupos del Centro de Identidad de IAM
<a name="scenario-4-step-7"></a>

**Cree un usuario del Centro de Identidad de IAM**  
Ejecute el comando siguiente. Sustituya {{placeholder values}} por su propia información.

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

**Cree un grupo del Centro de identidades de IAM y añada el usuario**  
Ejecute los siguientes comandos :

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

**Asigne el usuario o el grupo a la aplicación**  
Use el siguiente comando:

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

**Configure la asignación de roles de backend en el dominio de destino**  
Asigne el grupo del centro de identidad de IAM a un rol OpenSearch de seguridad en el dominio de destino:

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

### Paso 8: Verificar y acceder
<a name="scenario-4-step-8"></a>

```
aws opensearch get-application \
  --region {{region}} \
  --id {{application-id}}
```
+ Navegue hasta la URL del punto final de la aplicación.
+ Inicie sesión con las credenciales de usuario del IAM Identity Center.
+ Las solicitudes de datos de los usuarios del IAM Identity Center se firman con el rol de aplicación del Centro de Identidad de IAM, no con el rol multicuenta.
+ Las asignaciones de funciones de backend en el dominio controlan los permisos de acceso a los datos.

## Administración de las aplicaciones de
<a name="cross-account-managing-applications"></a>

**Actualice una aplicación con fuentes de datos multicuenta**  
Ejecute el comando siguiente. Sustituya {{placeholder values}} por su propia información.

```
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**  
La operación de actualización reemplaza toda la matriz de fuentes de datos. Incluya todas las fuentes de datos que desee conservar.

**Enumerar aplicaciones**  
Use el siguiente comando:

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

**Eliminación de una aplicación de**  
Use el siguiente comando:

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

**Revocar el acceso al punto final de la VPC**  
Use el siguiente comando:

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

## Referencia rápida
<a name="cross-account-quick-reference"></a>

En las siguientes tablas se resumen las principales diferencias entre los tipos de dominio y los métodos de autenticación.


**Dominio público comparado con el dominio de VPC**  

| Aspecto | Dominio público | Dominio de VPC | 
| --- | --- | --- | 
| Autorización de puntos finales de VPC | No obligatorio | Obligatorio: debe autorizar application.opensearchservice.amazonaws.com | 
| Configuración de la red | Ninguno | VPC, subred y grupo de seguridad con HTTPS (443) entrante | 
| Política de acceso de IAM | Obligatorio | Obligatorio | 
| Función multicuenta | Necesario para el uso de varias cuentas | Necesario para cuentas cruzadas | 


**Un usuario de IAM comparado con un usuario de IAM Identity Center**  

| Aspecto | Usuario de IAM | Usuario de IAM Identity Center | 
| --- | --- | --- | 
| Credenciales del plano de datos | Credenciales de IAM propias del usuario | Función de aplicación del IAM Identity Center | 
| Control de acceso | Política de acceso al dominio | Política de acceso al dominio y asignación de funciones de back-end | 
| Configuración adicional | Ninguno | Rol de aplicación de IAM Identity Center, user/group creación, asignación de aplicaciones, mapeo de roles de back-end | 
| OpenSearch Configuración de aplicaciones de interfaz de usuario | No hay opciones de IAM Identity Center | --iam-identity-center-options obligatorio | 

## Notas importantes
<a name="cross-account-important-notes"></a>
+ `iamRoleForDataSourceArn`Debe estar en la misma cuenta que. `dataSourceArn`
+ Solo `iamRoleForDataSourceArn` es obligatorio para las fuentes de datos entre cuentas. Omita esta opción para las fuentes de datos de la misma cuenta.
+ La función multicuenta solo necesita el permiso. `es:DescribeDomain` Nunca se usa para acceder al plano de datos.
+ Para los dominios de VPC, se deben configurar tanto la política de IAM como la autorización de puntos de conexión de VPC.
+ Versiones de motor compatibles: OpenSearch 1.3 y superiores.
+ La asociación de fuentes de datos entre cuentas requiere que se habilite un control de acceso detallado en el dominio de destino.

## Resolución de problemas
<a name="cross-account-troubleshooting"></a>


| Problema | Resolución | 
| --- | --- | 
| La creación de la aplicación falla y aparece el mensaje «No se puede acceder al dominio» | Compruebe que la función multicuenta tiene el es:DescribeDomain permiso y que la política de confianza permite la cuenta de origen. | 
| Se produce un error en la asociación de dominios de VPC | Asegúrese de que el punto final de la VPC esté autorizado para. application.opensearchservice.amazonaws.com | 
| Se ha denegado el acceso al plano de datos al usuario de IAM | Compruebe que la política de acceso al dominio de destino permita al usuario o rol principal de IAM. | 
| Se ha denegado el acceso al plano de datos para el usuario del IAM Identity Center | Compruebe que la asignación de funciones de backend incluya el ID de grupo del IAM Identity Center y que la política de dominio permita la función de aplicación del IAM Identity Center. | 
| Error de discordancia de cuentas | Asegúrese de que iamRoleForDataSourceArn está en la misma cuenta que el dominio. dataSourceArn | 