

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 durante a associação da fonte de dados. O acesso ao plano de dados é controlado separadamente pela política de acesso do domínio de destino.

O suporte a fontes de dados entre contas exige que um controle de acesso refinado seja ativado no domínio de destino. O controle de acesso refinado fornece uma camada de autorização adicional além da política de acesso ao domínio, permitindo que você controle o acesso a índices, documentos e campos individuais.

## 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 durante a associação da fonte de dados. OpenSearch A interface do usuário assume essa função para chamar`es:DescribeDomain`, o que recupera o endpoint do domínio e verifica se o controle de acesso refinado está ativado. Essa é uma etapa de descoberta e validação, não um limite de segurança. A função entre contas nunca é usada para acesso ao plano de dados. Após a associação, todas as solicitações do plano de dados são autorizadas pela política de acesso do domínio e pelos mapeamentos de funções de back-end, independentemente da função entre contas.

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

## Como funciona a suposição de funções entre contas
<a name="cross-account-role-assumption"></a>

[Quando você cria ou atualiza um aplicativo de OpenSearch interface de usuário com uma fonte de dados entre contas, a OpenSearch interface do usuário assume a função entre contas na conta de destino usando sessões de acesso encaminhado (FAS).](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html) O FAS propaga a identidade IAM do próprio diretor chamador para a `sts:AssumeRole` chamada. Isso significa que:
+ A política de confiança da conta de destino controla quais diretores da conta de origem podem assumir a função entre contas.
+ A sessão de função assumida carrega a identidade do chamador que iniciou a `UpdateApplication` solicitação `CreateApplication` ou.
+ A função entre contas é assumida somente durante a associação à chamada`es:DescribeDomain`. Ele não é usado para nenhuma operação subsequente do plano de dados.

Para acesso ao plano de dados:
+ Os usuários do IAM assinam solicitações com suas próprias credenciais do IAM. A política de acesso do domínio de destino autoriza essas solicitações diretamente.
+ Os usuários do IAM Identity Center têm suas solicitações assinadas com a função do aplicativo do IAM Identity Center (`iamRoleForIdentityCenterApplicationArn`) na conta de origem. A política de acesso e os mapeamentos de funções de back-end do domínio de destino autorizam essas solicitações.

## 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
+ OpenSearch domínios com controle de [acesso refinado ativado](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html). A associação de fontes de dados entre contas não é suportada para domínios sem controle de acesso refinado.
+ 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 seu 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":"arn:aws:iam::{{source-account-id}}:root"},"Action":"es:ESHttp*","Resource":"arn:aws:es:{{region}}:{{target-account-id}}:domain/{{domain-name}}/*"}]}' \
  --region {{region}}
```

**nota**  
Essa política de acesso define o escopo do acesso do plano de dados aos diretores do IAM a partir da conta de origem. Para um acesso mais restritivo, substitua o principal raiz da conta por um usuário ou função ARNs específica do IAM. O controle de acesso refinado fornece uma camada de autorização adicional para controlar o acesso a índices e documentos.

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

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":"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**  
Essa política de acesso define o escopo do acesso do plano de dados aos diretores do IAM a partir da conta de origem. Para um acesso mais restritivo, substitua o principal raiz da conta por um usuário ou função ARNs específica do IAM. O controle de acesso refinado fornece uma camada de autorização adicional para controlar o acesso a índices e documentos.

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

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.
+ A associação de fontes de dados entre contas exige que um controle de acesso refinado seja ativado no domínio de destino.

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