

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Acesso a dados entre contas a domínios OpenSearch
<a name="application-cross-account-data-access-domains"></a>

Você pode configurar seus aplicativos de OpenSearch interface de usuário em uma conta para acessar OpenSearch domínios em contas diferentes. Ao criar um aplicativo de OpenSearch interface de usuário com fontes de dados entre contas, você fornece um `iamRoleForDataSourceArn` que aponta para uma função do IAM na conta de destino. OpenSearch A interface do usuário valida a solicitação assumindo essa função e ligando `es:DescribeDomain` para verificar a acessibilidade do domínio. A função entre contas é usada somente para validação do plano de controle. O acesso ao plano de dados é controlado separadamente pela política de acesso do domínio de destino.

**Código de exemplo**  
Os exemplos de código neste tópico são apenas para fins ilustrativos. Eles demonstram funcionalidade básica e podem não incluir tratamento de erros, melhores práticas de segurança ou recursos prontos para produção. Antes de usar o código de amostra na produção, revise-o e modifique-o para atender aos seus requisitos específicos e teste minuciosamente em seu ambiente.

## Principais conceitos
<a name="cross-account-key-concepts"></a>

Conta de origem  
O Conta da AWS que hospeda seu aplicativo de OpenSearch interface do usuário.

Conta de destino  
O Conta da AWS local onde o OpenSearch domínio reside.

Função entre contas  
Uma função do IAM na conta de destino que é usada somente para validação do plano de controle. Essa função requer somente a `es:DescribeDomain` permissão.

Função do aplicativo IAM Identity Center  
Uma função do IAM na conta de origem que é usada para acessar o plano de dados do usuário do IAM Identity Center.

## Pré-requisitos
<a name="cross-account-prerequisites"></a>

Antes de configurar o acesso a dados entre contas, verifique se você tem o seguinte:
+ AWS CLI instalado e configurado
+ Acesso à origem e ao destino Conta da AWS
+ Para fluxos do IAM Identity Center: uma instância Centro de Identidade do AWS IAM organizacional

## Cenários
<a name="cross-account-scenarios"></a>

Escolha o cenário que corresponda ao método de autenticação e à configuração do domínio:
+ [Cenário 1: usuário do IAM acessando um domínio público](#cross-account-scenario-1)
+ [Cenário 2: usuário do IAM Identity Center acessando um domínio público](#cross-account-scenario-2)
+ [Cenário 3: usuário do IAM acessando um domínio VPC](#cross-account-scenario-3)
+ [Cenário 4: usuário do IAM Identity Center acessando um domínio VPC](#cross-account-scenario-4)

## Cenário 1: usuário do IAM acessando um domínio público
<a name="cross-account-scenario-1"></a>

### Etapa 1: criar a função IAM entre contas (conta de destino)
<a name="scenario-1-step-1"></a>

Crie uma função do IAM na conta de destino que permita que a conta de origem a assuma para validação do domínio.

**Para criar a função entre contas**

1. Crie uma política de confiança que permita que a conta de origem assuma a função:

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

1. Crie a função:

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

1. Crie uma política de permissões com apenas a `es:DescribeDomain` ação:

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

1. Anexe a política de permissões ao perfil:

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

### Etapa 2: criar o OpenSearch domínio (conta de destino)
<a name="scenario-1-step-2"></a>

Crie um OpenSearch domínio na conta de destino com controle de acesso refinado e criptografia 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":"*"},"Action":"es:ESHttp*","Resource":"arn:aws:es:region:target-account-id:domain/domain-name/*"}]}' \
  --region region
```

Aguarde até que o status do domínio se torne `Active` antes de continuar.

### Etapa 3: criar o aplicativo de OpenSearch interface do usuário (conta de origem)
<a name="scenario-1-step-3"></a>

Crie o aplicativo na conta de origem com a fonte de dados entre contas:

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

### Etapa 4: verificar e acessar
<a name="scenario-1-step-4"></a>

Recupere os detalhes do aplicativo para obter o URL do endpoint:

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Navegue até o URL do endpoint do aplicativo a partir da resposta.
+ Faça login com as credenciais do IAM.
+ O usuário do IAM assina as solicitações do plano de dados com suas próprias credenciais.
+ A política de acesso ao domínio de destino controla quais dados o usuário pode acessar.

## Cenário 2: usuário do IAM Identity Center acessando um domínio público
<a name="cross-account-scenario-2"></a>

### Etapa 1: criar a função IAM entre contas (conta de destino)
<a name="scenario-2-step-1"></a>

Crie uma função do IAM na conta de destino que permita que a conta de origem a assuma para validação do domínio.

**Para criar a função entre contas**

1. Crie uma política de confiança que permita que a conta de origem assuma a função:

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

1. Crie a função:

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

1. Crie uma política de permissões com apenas a `es:DescribeDomain` ação:

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

1. Anexe a política de permissões ao perfil:

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

### Etapa 2: criar o OpenSearch domínio (conta de destino)
<a name="scenario-2-step-2"></a>

Crie um OpenSearch domínio na conta de destino. Use o mesmo comando de[Etapa 2: criar o OpenSearch domínio (conta de destino)](#scenario-1-step-2), mas atualize a política de acesso para permitir o papel do aplicativo IAM Identity Center na conta de origem:

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

Aguarde até que o status do domínio se torne `Active` antes de continuar.

### Etapa 3: criar a função do IAM para o aplicativo IAM Identity Center (conta de origem)
<a name="scenario-2-step-3"></a>

Crie uma função do IAM na conta de origem que a OpenSearch UI usa para acessar o plano de dados do usuário do IAM Identity Center.

**Para criar a função do aplicativo IAM Identity Center**

1. Crie uma política de confiança:

   ```
   {
     "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. Crie uma política de permissões:

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

1. Crie a função e anexe as 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
   ```

### Etapa 4: criar o aplicativo de OpenSearch interface do usuário com o IAM Identity Center (conta de origem)
<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":"[\"*\"]"}]'
```

### Etapa 5: criar e atribuir usuários e grupos do IAM Identity Center
<a name="scenario-2-step-5"></a>

**Crie um usuário do IAM Identity Center**  
Execute o comando a seguir. Substitua *placeholder values* por suas próprias informações.

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

**Crie um grupo do IAM Identity Center e adicione o usuário**  
Execute os seguintes 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
```

**Atribua o usuário ou grupo ao aplicativo**  
Execute este 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
```

**Configurar o mapeamento de funções de back-end no domínio de destino**  
Mapeie o grupo do IAM Identity Center para uma função de OpenSearch segurança no domínio 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": []
  }'
```

### Etapa 6: verificar e acessar
<a name="scenario-2-step-6"></a>

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Navegue até o URL do endpoint do aplicativo.
+ Faça login com as credenciais de usuário do IAM Identity Center.
+ As solicitações de dados dos usuários do IAM Identity Center são assinadas com a função de aplicativo do IAM Identity Center, não com a função entre contas.
+ Mapeamentos de funções de back-end nas permissões de acesso aos dados de controle de domínio.

## Cenário 3: usuário do IAM acessando um domínio VPC
<a name="cross-account-scenario-3"></a>

### Etapa 1: criar a função IAM entre contas (conta de destino)
<a name="scenario-3-step-1"></a>

Crie uma função do IAM na conta de destino que permita que a conta de origem a assuma para validação do domínio.

**Para criar a função entre contas**

1. Crie uma política de confiança que permita que a conta de origem assuma a função:

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

1. Crie a função:

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

1. Crie uma política de permissões com apenas a `es:DescribeDomain` ação:

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

1. Anexe a política de permissões ao perfil:

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

### Etapa 2: configurar a VPC (conta de destino)
<a name="scenario-3-step-2"></a>

Ignore essa etapa se já existir uma VPC na conta 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 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
```

Saiba mais sobre a [criação de domínios VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Etapa 3: criar o domínio VPC (conta 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":"*"},"Action":"es:ESHttp*","Resource":"arn:aws:es:region:target-account-id:domain/vpc-domain-name/*"}]}' \
  --region region
```

Aguarde até que o status do domínio se torne `Active` antes de continuar.

### Etapa 4: autorizar o VPC endpoint para o principal do serviço de interface OpenSearch do usuário (conta de destino)
<a name="scenario-3-step-4"></a>

**Importante**  
Essa é uma etapa crítica exclusiva dos domínios VPC. O serviço de OpenSearch interface do usuário deve ser explicitamente autorizado a acessar o VPC endpoint.

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

Resposta esperada:

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

### Etapa 5: criar o aplicativo de OpenSearch interface do usuário (conta de origem)
<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":"[\"*\"]"}]'
```

### Etapa 6: verificar e acessar
<a name="scenario-3-step-6"></a>

Recupere os detalhes do aplicativo para obter o URL do endpoint:

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Navegue até o URL do endpoint do aplicativo a partir da resposta.
+ Faça login com as credenciais do IAM.
+ O usuário do IAM assina as solicitações do plano de dados com suas próprias credenciais.
+ A política de acesso ao domínio de destino controla quais dados o usuário pode acessar.

## Cenário 4: usuário do IAM Identity Center acessando um domínio VPC
<a name="cross-account-scenario-4"></a>

### Etapa 1: criar a função IAM entre contas (conta de destino)
<a name="scenario-4-step-1"></a>

Crie uma função do IAM na conta de destino que permita que a conta de origem a assuma para validação do domínio.

**Para criar a função entre contas**

1. Crie uma política de confiança que permita que a conta de origem assuma a função:

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

1. Crie a função:

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

1. Crie uma política de permissões com apenas a `es:DescribeDomain` ação:

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

1. Anexe a política de permissões ao perfil:

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

### Etapa 2: configurar a VPC (conta de destino)
<a name="scenario-4-step-2"></a>

Ignore essa etapa se já existir uma VPC na conta 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 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
```

Saiba mais sobre a [criação de domínios VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html).

### Etapa 3: criar o domínio VPC (conta de destino)
<a name="scenario-4-step-3"></a>

Use o mesmo comando de[Etapa 3: criar o domínio VPC (conta de destino)](#scenario-3-step-3), mas atualize a política de acesso para permitir o papel do aplicativo IAM Identity Center na conta de origem:

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

Aguarde até que o status do domínio se torne `Active` antes de continuar.

### Etapa 4: autorizar o VPC endpoint para o principal do serviço de interface OpenSearch do usuário (conta de destino)
<a name="scenario-4-step-4"></a>

**Importante**  
Essa é uma etapa crítica exclusiva dos domínios VPC. O serviço de OpenSearch interface do usuário deve ser explicitamente autorizado a acessar o VPC endpoint.

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

Resposta esperada:

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

### Etapa 5: criar a função do IAM para o aplicativo IAM Identity Center (conta de origem)
<a name="scenario-4-step-5"></a>

Crie uma função do IAM na conta de origem que a OpenSearch UI usa para acessar o plano de dados do usuário do IAM Identity Center.

**Para criar a função do aplicativo IAM Identity Center**

1. Crie uma política de confiança:

   ```
   {
     "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. Crie uma política de permissões:

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

1. Crie a função e anexe as 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
   ```

### Etapa 6: criar o aplicativo de OpenSearch interface do usuário com o IAM Identity Center (conta de origem)
<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":"[\"*\"]"}]'
```

### Etapa 7: criar e atribuir usuários e grupos do IAM Identity Center
<a name="scenario-4-step-7"></a>

**Crie um usuário do IAM Identity Center**  
Execute o comando a seguir. Substitua *placeholder values* por suas próprias informações.

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

**Crie um grupo do IAM Identity Center e adicione o usuário**  
Execute os seguintes 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
```

**Atribua o usuário ou grupo ao aplicativo**  
Execute este 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
```

**Configurar o mapeamento de funções de back-end no domínio de destino**  
Mapeie o grupo do IAM Identity Center para uma função de OpenSearch segurança no domínio 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": []
  }'
```

### Etapa 8: verificar e acessar
<a name="scenario-4-step-8"></a>

```
aws opensearch get-application \
  --region region \
  --id application-id
```
+ Navegue até o URL do endpoint do aplicativo.
+ Faça login com as credenciais de usuário do IAM Identity Center.
+ As solicitações de dados dos usuários do IAM Identity Center são assinadas com a função de aplicativo do IAM Identity Center, não com a função entre contas.
+ Mapeamentos de funções de back-end nas permissões de acesso aos dados de controle de domínio.

## Como gerenciar aplicações do
<a name="cross-account-managing-applications"></a>

**Atualizar um aplicativo com fontes de dados entre contas**  
Execute o comando a seguir. Substitua *placeholder values* por suas próprias informações.

```
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**  
A operação de atualização substitui toda a matriz de fontes de dados. Inclua todas as fontes de dados que você deseja manter.

**Listar aplicativos**  
Execute este comando: .

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

**Deleta a aplicação**  
Execute este comando: .

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

**Revogar o acesso ao VPC endpoint**  
Execute este comando: .

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

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

As tabelas a seguir resumem as principais diferenças entre os tipos de domínio e os métodos de autenticação.


**Domínio público comparado ao domínio VPC**  

| Aspecto | Domínio público | Domínio VPC | 
| --- | --- | --- | 
| Autorização de VPC endpoint | Não obrigatório | Obrigatório — deve autorizar application.opensearchservice.amazonaws.com | 
| Configuração da rede | Nenhum | VPC, sub-rede, grupo de segurança com entrada HTTPS (443) | 
| Política de acesso do IAM | Obrigatório | Obrigatório | 
| Função entre contas | Obrigatório para contas cruzadas | Obrigatório para contas cruzadas | 


**Usuário do IAM comparado ao usuário do IAM Identity Center**  

| Aspecto | IAM user (Usuário do IAM) | Usuários do IAM Identity Center | 
| --- | --- | --- | 
| Credenciais do plano de dados | Credenciais do IAM do próprio usuário | Função do aplicativo IAM Identity Center | 
| Controle de acesso | Política de acesso ao domínio | Política de acesso ao domínio e mapeamentos de funções de back-end | 
| Configuração adicional | Nenhum | Função do aplicativo IAM Identity Center, user/group criação, atribuição de aplicativos, mapeamento de funções de back-end | 
| OpenSearch Configuração do aplicativo de interface do usuário | Nenhuma opção do IAM Identity Center | --iam-identity-center-options obrigatório | 

## Observações importantes
<a name="cross-account-important-notes"></a>
+ O `iamRoleForDataSourceArn` deve estar na mesma conta do`dataSourceArn`.
+ Isso só `iamRoleForDataSourceArn` é necessário para fontes de dados entre contas. Omita-o para fontes de dados da mesma conta.
+ A função entre contas só precisa da `es:DescribeDomain` permissão. Ele nunca é usado para acesso ao plano de dados.
+ Para domínios VPC, tanto a política do IAM quanto a autorização do VPC endpoint devem ser configuradas.
+ Versões de motor suportadas: OpenSearch 1.3 e superiores.

## Solução de problemas
<a name="cross-account-troubleshooting"></a>


| Problema | Resolução | 
| --- | --- | 
| A criação do aplicativo falha com “Não é possível acessar o domínio” | Verifique se a função entre contas tem a es:DescribeDomain permissão e se a política de confiança permite a conta de origem. | 
| Falha na associação de domínio VPC | Certifique-se de que o VPC endpoint esteja autorizado para. application.opensearchservice.amazonaws.com | 
| Acesso ao plano de dados negado para o usuário do IAM | Verifique se a política de acesso ao domínio de destino permite o usuário ou o responsável pela função do IAM. | 
| Acesso ao plano de dados negado para o usuário do IAM Identity Center | Verifique se o mapeamento da função de back-end inclui o ID do grupo do IAM Identity Center e se a política de domínio permite a função do aplicativo do IAM Identity Center. | 
| Erro de incompatibilidade de conta | Certifique-se de que iamRoleForDataSourceArn esteja na mesma conta do domínio emdataSourceArn. | 