

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

# Encadear perfis do IAM no Amazon Neptune
<a name="bulk-load-tutorial-chain-roles"></a>

**Importante**  
O novo atributo de carregamento em massa entre contas introduzido na [versão 1.2.1.0.R3 do mecanismo](engine-releases-1.2.1.0.R3.md), que utiliza o encadeamento de perfis do IAM, pode, em alguns casos, causar degradação do desempenho de carregamento em massa. Como resultado, as atualizações das versões do mecanismo compatíveis com esse atributo foram temporariamente suspensas até que o problema seja resolvido.

Ao associar um perfil ao cluster, seu cluster poderá assumir esse perfil para obter acesso aos dados armazenados no Amazon S3. A partir da [versão 1.2.1.0.R3 do mecanismo](engine-releases-1.2.1.0.R3.md), se esse perfil não tiver acesso a todos os recursos necessários, você poderá encadear um ou mais perfis adicionais que o cluster poderá assumir para obter acesso a outros recursos. Cada perfil na cadeia assume o próximo perfil na cadeia, até que o cluster assuma o perfil no final da cadeia.

Para encadear perfis, você estabelece uma relação de confiança entre eles. Por exemplo, para encadear o `RoleB` com o `RoleA`, o `RoleA` precisa ter uma política de permissões que o possibilite assumir o `RoleB` e `RoleB` deve ter uma política de confiança que o permita transmitir as permissões de volta ao `RoleA`. Para obter mais informações, consulte [Using IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).

O primeiro perfil da cadeia deve ser associado ao cluster que está carregando dados.

O primeiro perfil e cada perfil subsequente que assumir o perfil seguinte na cadeia devem ter:
+ Uma política que inclua uma declaração específica com o efeito `Allow` na ação `sts:AssumeRole`.
+ O nome do recurso da Amazon (ARN) do próximo perfil em um elemento `Resource`.

**nota**  
O bucket de destino do Amazon S3 deve estar na mesma AWS região do cluster.

## Acesso entre contas usando perfis encadeados
<a name="bulk-load-tutorial-chain-cross-account"></a>

É possível conceder acesso entre contas encadeando um perfil ou perfis pertencentes a outra conta. Quando o cluster assume temporariamente um perfil pertencente a outra conta, ele pode obter acesso aos recursos dessa conta.

Por exemplo, suponha que a **Conta A** queira acessar dados em um bucket do Amazon S3 que pertença à **Conta B**:
+ A **conta A cria uma** função AWS de serviço para Neptune `RoleA` chamada e a anexa a um cluster.
+ A **Conta B** cria um perfil chamado `RoleB` que é autorizado a acessar os dados no bucket da **Conta B**.
+ A **Conta A** associa uma política de permissões ao `RoleA` que permite a ele assumir o `RoleB`.
+ A **Conta B** atribui uma política de confiança ao `RoleB` que permite a ele transmitir as permissões de volta ao `RoleA`.
+ Para acessar os dados no bucket da **Conta B**, a **Conta A** executa um comando do carregador usando um parâmetro `iamRoleArn` que encadeia `RoleA` e `RoleB`. Durante a operação do carregador, `RoleA` assume temporariamente `RoleB` para acessar o bucket do Amazon S3 na **Conta B**.

![Diagrama que ilustra o acesso entre contas usando perfis encadeados](http://docs.aws.amazon.com/pt_br/neptune/latest/userguide/images/cross-account-bulk-load.png)


Por exemplo, o `RoleA` teria uma política de confiança que estabelecesse uma relação de confiança com o Neptune:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
          "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

O `RoleA` também teria uma política de permissão que permitisse a ele assumir o `RoleB`, que é de propriedade da **Conta B**:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1487639602000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::{{111122223333}}:role/RoleB"
        }
    ]
}
```

------

Por outro lado, o `RoleB` teria uma política de confiança para estabelecer uma relação de confiança com o `RoleA`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/RoleA"
            }
        }
    ]
}
```

------

O `RoleB` também precisaria de permissão para acessar dados no bucket do Amazon S3 localizado na **Conta B**.

## Criação de um AWS Security Token Service endpoint VPC (STS)
<a name="bulk-load-tutorial-sts-endpoint"></a>

O carregador Neptune exige um VPC AWS STS endpoint para quando você está encadeando funções do IAM para acesso privado por meio de endereços IP privados. AWS STS APIs Você pode se conectar diretamente de uma Amazon VPC a AWS STS um VPC Endpoint de forma segura e escalável. Quando você usa um endpoint da VPC de interface, ele fornece um melhor procedimento de segurança, pois você não precisa abrir firewalls de tráfego de saída. Ele também oferece os outros benefícios do uso de endpoints da Amazon VPC.

Ao usar um VPC Endpoint, o tráfego para AWS STS não é transmitido pela Internet e nunca sai da rede Amazon. Sua VPC está conectada com segurança, AWS STS sem riscos de disponibilidade ou restrições de largura de banda no tráfego da rede. Para obter mais informações, consulte [Using AWS STS interface VPC endpoints](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts_vpce.html).

**Para configurar o acesso para AWS Security Token Service (STS)**

1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC em. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. No painel de navegação, escolha **Endpoints**.

1. Escolha **Create Endpoint** (Criar endpoint).

1. Selecione o **Nome do serviço** `com.amazonaws.region.sts` para o endpoint do tipo Interface.

1. Selecione a **VPC** que contém a instância de banco de dados do Neptune e a instância do EC2.

1. Marque a caixa de seleção ao lado da sub-rede na qual a instância do EC2 está presente. Não é possível selecionar várias sub-redes em uma mesma zona de disponibilidade.

1. Em IP address type (Tipo de endereço IP), escolha uma das seguintes opções:
   + **IPv4**— Atribua IPv4 endereços às interfaces de rede do seu terminal. Essa opção é suportada somente se todas as sub-redes selecionadas tiverem intervalos de IPv4 endereços.
   + **IPv6**— Atribua IPv6 endereços às interfaces de rede do seu terminal. Essa opção é suportada somente se todas as sub-redes selecionadas forem IPv6 sub-redes somente.
   + **Dualstack** — atribua IPv6 endereços IPv4 e endereços às suas interfaces de rede de endpoints. Essa opção é suportada somente se todas as sub-redes selecionadas tiverem intervalos de IPv6 endereços IPv4 e ambos.

1. Em **Grupos de segurança**, selecione os grupos de segurança para associar às interfaces de rede do endpoint para o endpoint da VPC. Você precisaria selecionar todos os grupos de segurança associados à instância de banco de dados do Neptune e à instância do EC2.

1. Em **Policy** (Política), selecione **Full access** (Acesso total) para permitir todas as operações de todas as entidades principais em todos os recursos no endpoint da VPC. Ou então selecione **Custom** (Personalizar) para anexar uma política de endpoint da VPC que controle as permissões das entidades principais para realizar ações em recursos sobre o endpoint da VPC. Essa opção ficará disponível somente se o serviço for compatível com as políticas de endpoint da VPC. Para obter mais informações, consulte [Endpoint policies](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html).

1. (*Opcional*) Para adicionar uma tag, escolha **Adicionar nova tag** e insira a chave e o valor da tag que você deseja.

1. Escolha **Criar endpoint**.

Para obter mais informações sobre criação de endpoints, consulte [VPC Endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) no Guia do usuário do Amazon VPC. Observe que o endpoint da VPC do Amazon STS é um pré-requisito obrigatório para o encadeamento de perfis do IAM.

Agora que você concedeu acesso ao AWS STS endpoint, pode se preparar para carregar os dados. Para obter informações sobre os formatos compatíveis, consulte [Formatos de dados de carga](bulk-load-tutorial-format.md).

## Encadear perfis em um comando de carregador
<a name="bulk-load-tutorial-loader-chain"></a>

Você pode especificar o encadeamento de funções ao executar um comando do carregador incluindo uma lista de funções ARNs separada por vírgula no parâmetro. `iamRoleArn`

Embora na maioria das vezes você precise ter apenas dois perfis em uma cadeia, certamente é possível encadear três ou mais. Por exemplo, esse comando do carregador encadeia três perfis:

------
#### [ AWS CLI ]

```
aws neptunedata start-loader-job \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --source "s3://{{(the target bucket name)}}/{{(the target date file name)}}" \
  --format "csv" \
  --iam-role-arn "arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}" \
  --s3-bucket-region "{{us-east-1}}"
```

Para obter mais informações, consulte [start-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/start-loader-job.html)na Referência de AWS CLI Comandos.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.start_loader_job(
    source='s3://{{(the target bucket name)}}/{{(the target date file name)}}',
    format='csv',
    iamRoleArn='arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}',
    s3BucketRegion='{{us-east-1}}'
)

print(response)
```

------
#### [ awscurl ]

```
awscurl https://{{your-neptune-endpoint}}:{{port}}/loader \
  --region {{us-east-1}} \
  --service neptune-db \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{
        "source" : "s3://{{(the target bucket name)}}/{{(the target date file name)}}",
        "iamRoleArn" : "arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}",
        "format" : "csv",
        "region" : "us-east-1"
      }'
```

**nota**  
Este exemplo pressupõe que suas AWS credenciais estejam configuradas em seu ambiente. {{us-east-1}}Substitua pela região do seu cluster Neptune.

------
#### [ curl ]

```
curl -X POST https://{{your-neptune-endpoint}}:{{port}}/loader \
  -H 'Content-Type: application/json' \
  -d '{
        "source" : "s3://{{(the target bucket name)}}/{{(the target date file name)}}",
        "iamRoleArn" : "arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}",
        "format" : "csv",
        "region" : "us-east-1"
      }'
```

------