

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.

# Encadenamiento de roles de IAM en Amazon Neptune
<a name="bulk-load-tutorial-chain-roles"></a>

**importante**  
La nueva característica multicuenta de carga masiva introducida en la [versión 1.2.1.0.R3 del motor](engine-releases-1.2.1.0.R3.md), que aprovecha la posibilidad de encadenar roles de IAM, en algunos casos, puede provocar una degradación del rendimiento de la carga masiva. En consecuencia, las actualizaciones de las versiones del motor que admiten esta característica se han suspendido temporalmente hasta que se resuelva el problema.

Cuando asocia un rol a su clúster, este puede asumir dicho rol para obtener acceso a los datos almacenados en Amazon S3. A partir de la [versión 1.2.1.0.R3 del motor](engine-releases-1.2.1.0.R3.md), si ese rol no tiene acceso a todos los recursos que necesita, puede encadenar uno o más roles adicionales que el clúster puede asumir para acceder a otros recursos. Cada rol de la cadena asume el siguiente rol de la cadena, hasta que su clúster haya asumido el rol al final de la cadena.

Para encadenar roles, debe establecer una relación de confianza entre ellos. Por ejemplo, para encadenar `RoleB` a `RoleA`, `RoleA` debe tener una política de permisos que le permita asumir `RoleB` y `RoleB` debe tener una política de confianza que le permita volver a transferir sus permisos a `RoleA`. Para obtener más información, consulte [Uso de roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).

El primer rol de una cadena debe estar asociado al clúster que está cargando los datos.

El primer rol, y cada rol subsiguiente que asuma el siguiente rol en la cadena, debe tener:
+ Una política que incluye una instrucción específica con el efecto `Allow` sobre la acción `sts:AssumeRole`.
+ El nombre de recurso de Amazon (ARN) del siguiente rol de un elemento `Resource`.

**nota**  
El bucket de Amazon S3 de destino debe estar en la misma AWS región que el clúster.

## Acceso entre cuentas mediante roles encadenados
<a name="bulk-load-tutorial-chain-cross-account"></a>

Puede conceder el acceso entre cuentas encadenando un rol o roles que pertenezcan a otra cuenta. Cuando su clúster asuma temporalmente un rol que pertenece a otra cuenta, puede acceder a los recursos de esa cuenta.

Por ejemplo, imagine que la **cuenta A** desea obtener acceso a los datos de un bucket de Amazon S3 que pertenece a la **cuenta B**:
+ La **cuenta A** crea un rol de AWS servicio para Neptune denominado `RoleA` y lo adjunta a un clúster.
+ La **cuenta B** crea un rol denominado `RoleB` que está autorizado para obtener acceso a los datos de un bucket de la **cuenta B**.
+ La **cuenta A** asocia una política de permisos a `RoleA` que le permite asumir `RoleB`.
+ La **cuenta B** asocia una política de confianza a `RoleB`, que le permite transferir sus permisos a `RoleA`.
+ Para obtener acceso a los datos del bucket de la **cuenta B**, la **cuenta A** ejecuta un comando del programa de carga utilizando un parámetro `iamRoleArn` que encadena `RoleA` y `RoleB`. Durante la operación del programa de carga, `RoleA` asume de forma temporal el `RoleB` para obtener acceso al bucket de Amazon S3 en la **cuenta B**.

![\[Diagrama que muestra el acceso entre cuentas mediante roles encadenados\]](http://docs.aws.amazon.com/es_es/neptune/latest/userguide/images/cross-account-bulk-load.png)


Por ejemplo, `RoleA` tendría una política de confianza que establece una relación de confianza con Neptune:

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

****  

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

------

`RoleA` también tendría una política de permisos que le permitiría asumir el `RoleB`, que es propiedad de la **cuenta B**:

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

****  

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

------

Por el contrario, `RoleB` tendría una política de confianza para establecer una relación de confianza con`RoleA`:

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

****  

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

------

`RoleB` también necesitaría permiso para acceder a los datos del bucket de Amazon S3 ubicado en la **cuenta B**.

## Creación de un punto AWS Security Token Service final de VPC (STS)
<a name="bulk-load-tutorial-sts-endpoint"></a>

El cargador Neptune requiere un punto final de VPC para encadenar funciones de IAM para AWS STS acceder de forma privada a través de direcciones IP privadas. AWS STS APIs Puede conectarse directamente desde una Amazon VPC a AWS STS través de un punto final de VPC de forma segura y escalable. Cuando utiliza un punto de conexión de VPC de interfaz, ofrece una mejor postura de seguridad, ya que no necesita abrir firewalls de tráfico saliente. También ofrece las demás ventajas del uso de puntos de conexión de Amazon VPC.

Cuando se utiliza un punto final de VPC, el tráfico AWS STS no se transmite por Internet y nunca sale de la red de Amazon. Su VPC está conectada de forma segura AWS STS sin riesgos de disponibilidad ni restricciones de ancho de banda en el tráfico de su red. Para obtener más información, consulte [Uso de puntos de conexión de VPC de interfaz en AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts_vpce.html).

**Para configurar el acceso para AWS Security Token Service (STS)**

1. Inicie sesión en la consola de Amazon VPC Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. En el panel de navegación, elija **Puntos de conexión**.

1. Elija **Crear punto de conexión**.

1. Elija el **Nombre del servicio**: `com.amazonaws.region.sts` para el punto de conexión de tipo Interfaz.

1. Elija la **VPC** que contiene la instancia de base de datos de Neptune y la instancia EC2.

1. Seleccione la casilla de verificación junto a la subred en la que se encuentra su instancia EC2. No puede seleccionar varias subredes de la misma zona de disponibilidad.

1. En Tipo de dirección IP, elija entre las siguientes opciones:
   + **IPv4**— Asigne IPv4 direcciones a las interfaces de red de sus puntos finales. Esta opción solo se admite si todas las subredes seleccionadas tienen rangos de IPv4 direcciones.
   + **IPv6**— Asigne IPv6 direcciones a las interfaces de red de sus puntos finales. Esta opción solo se admite si todas las subredes seleccionadas son subredes IPv6 exclusivas.
   + **Dualstack**: asigne ambas IPv6 direcciones a las interfaces de red IPv4 de sus puntos finales. Esta opción solo se admite si todas las subredes seleccionadas tienen ambos IPv4 rangos de direcciones. IPv6 

1. En **Security groups** (Grupos de seguridad), seleccione los grupos de seguridad para asociarlas a las interfaces de red del punto de conexión para el punto de conexión de VPC. Debería seleccionar todos los grupos de seguridad que están asociados a la instancia de base de datos de Neptune y a la instancia EC2.

1. En **Política**, seleccione **Acceso completo** para permitir todas las operaciones de todas las entidades principales en todos los recursos del punto de conexión de VPC. De lo contrario, seleccione **Personalizar** para adjuntar una política de punto de conexión de VPC que controle los permisos que tienen las entidades principales para realizar acciones en los recursos a través del punto de conexión de VPC. Esta opción solo está disponible si el servicio admite las políticas de punto de conexión de VPC. Para obtener más información, consulte [Políticas de puntos de conexión](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html).

1. (*Opcional*) Para añadir una etiqueta, elija **Agregar etiqueta nueva** e introduzca la clave y el valor de la etiqueta.

1. Seleccione **Crear punto de conexión**.

Para obtener más información acerca de la creación del punto de conexión, consulte [Puntos de conexión de la VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) en la Guía del usuario de Amazon VPC. Tenga en cuenta que el punto de conexión de VPC de Amazon STS es un requisito previo obligatorio para el encadenamiento de roles de IAM.

Ahora que ha concedido el acceso al AWS STS punto final, puede prepararse para cargar los datos. Para obtener más información acerca de los formatos admitidos, consulte [Load Data Formats](bulk-load-tutorial-format.md).

## Encadenamiento de roles en un comando del programa de carga
<a name="bulk-load-tutorial-loader-chain"></a>

Puede especificar el encadenamiento de roles al ejecutar un comando de carga incluyendo una lista de roles separados por comas ARNs en el parámetro. `iamRoleArn`

Aunque la mayoría de las veces solo necesitará tener dos roles en una cadena, es posible encadenar tres o más. Por ejemplo, este comando del programa de carga encadena tres roles:

------
#### [ 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 obtener más información, consulte la Referencia de [start-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/start-loader-job.html)comandos. AWS CLI 

------
#### [ 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**  
En este ejemplo se supone que sus AWS credenciales están configuradas en su entorno. *us-east-1*Sustitúyala por la región de tu cúmulo de Neptuno.

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

------