

# Configuración del acceso a un bucket de Amazon S3
<a name="USER_PostgreSQL.S3Import.AccessPermission"></a>

Para importar datos de un archivo de Amazon S3, conceda permiso a la instancia de base de datos de RDS for PostgreSQL del para obtener acceso al bucket de Amazon S3 en el que se encuentra el archivo. Puede proporcionar acceso a un bucket de Amazon S3 de una de las dos formas siguientes, tal y como se describe en los siguientes temas.

**Topics**
+ [Uso de un rol de IAM para obtener acceso a un bucket de Amazon S3](#USER_PostgreSQL.S3Import.ARNRole)
+ [Uso de credenciales de seguridad para obtener acceso a un bucket de Amazon S3](#USER_PostgreSQL.S3Import.Credentials)
+ [Solución de errores de acceso a Amazon S3](#USER_PostgreSQL.S3Import.troubleshooting)

## Uso de un rol de IAM para obtener acceso a un bucket de Amazon S3
<a name="USER_PostgreSQL.S3Import.ARNRole"></a>

Antes de cargar los datos de un archivo de Amazon S3, conceda permiso a la instancia de RDS para la base de datos de PostgreSQL para obtener acceso al bucket de Amazon S3 en el que se encuentra el archivo. De esta forma, no tiene que facilitar ni administrar información adicional de credenciales en la llamada a la función [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3).

Para ello, cree una política de IAM que proporcione acceso al bucket de Amazon S3. Cree un rol de IAM y conecte la política a dicho rol. A continuación, asigne el rol de IAM a la instancia de base de datos. 

**Para dar a una instancia de RDS para la base de datos PostgreSQL acceso a Amazon S3 a través de un rol de IAM, realice el siguiente procedimiento:**

1. Cree una política de IAM. 

   Esta política concede los permisos de bucket y objeto que permiten que la instancia de RDS para base de datos de PostgreSQL  tenga acceso a Amazon S3. 

   Incluya las siguientes acciones requeridas en la política para permitir la transferencia de archivos de un bucket de Amazon S3 a Amazon RDS: 
   + `s3:GetObject` 
   + `s3:ListBucket` 

   Incluya los siguientes recursos en la política para identificar el bucket de Amazon S3 y los objetos incluidos en este. A continuación se muestra el formato de nombre de recurso de Amazon (ARN) para obtener acceso a Amazon S3.
   + arn:aws:s3:::*amzn-s3-demo-bucket*
   + arn:aws:s3:::*amzn-s3-demo-bucket*/\$1

   Para obtener información adicional sobre cómo crear una política de IAM para RDS para PostgreSQL, consulte [Creación y uso de una política de IAM para el acceso a bases de datos de IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md). Consulte también el [Tutorial: Crear y asociar su primera política administrada por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html) en la *Guía del usuario de IAM*.

   El siguiente comando de la AWS CLI crea una política de IAM denominada `rds-s3-import-policy` con estas opciones. Otorga acceso a un bucket denominado *amzn-s3-demo-bucket*. 
**nota**  
Anote el Nombre de recurso de Amazon (ARN) de la política que devolvió este comando. Al asociar la política a un rol de IAM, se necesita el ARN para realizar un paso posterior.  
**Example**  

   Para Linux, macOS o Unix:

   ```
   aws iam create-policy \
      --policy-name rds-s3-import-policy \
      --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3import",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket", 
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

   Para Windows:

   ```
   aws iam create-policy ^
      --policy-name rds-s3-import-policy ^
      --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3import",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ], 
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket", 
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

1. Crear un rol de IAM. 

   Haga esto para que Amazon RDS pueda asumir este rol de IAM para obtener acceso a los buckets de Amazon S3. Para obtener más información, vea [Crear un rol para delegar permisos a un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) en *Guía del usuario de IAM. *

   Le recomendamos que utilice las claves de contexto de condición globales de `[aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)` y `[aws:SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)` en las políticas basadas en recursos para limitar los permisos del servicio a un recurso específico. Esta es la forma más eficaz de protegerse contra el [problema del suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). 

   Si utiliza claves de contexto de condición globales y el valor `aws:SourceArn` contiene el ID de cuenta, el valor `aws:SourceAccount` y la cuenta en el valor `aws:SourceArn` deben utilizar el mismo ID de cuenta cuando se utiliza en la misma instrucción de política.
   + Use `aws:SourceArn` si quiere acceso entre servicios para un único recurso. 
   + Use `aws:SourceAccount` si quiere permitir que cualquier recurso de esa cuenta se asocie al uso entre servicios.

   En la política, asegúrese de utilizar la clave de contexto de condición global `aws:SourceArn` con el ARN completo del recurso. En el siguiente ejemplo se muestra cómo se usa el comando de la AWS CLI para crear un rol denominado `rds-s3-import-role`.   
**Example**  

   Para Linux, macOS o Unix:

   ```
   aws iam create-role \
      --role-name rds-s3-import-role \
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

   Para Windows:

   ```
   aws iam create-role ^
      --role-name rds-s3-import-role ^
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

1. Asocie la política de IAM que creó al rol de IAM creado.

   El siguiente comando AWS CLI adjunta la política creada en el paso anterior al rol denominado `rds-s3-import-role`. Sustituya `your-policy-arn` por el ARN de la política que ha anotado en un paso anterior.   
**Example**  

   Para Linux, macOS o Unix:

   ```
   aws iam attach-role-policy \
      --policy-arn your-policy-arn \
      --role-name rds-s3-import-role
   ```

   Para Windows:

   ```
   aws iam attach-role-policy ^
      --policy-arn your-policy-arn ^
      --role-name rds-s3-import-role
   ```

1. Añada el rol de IAM a la instancia de base de datos. 

   Para ello, utilice la Consola de administración de AWS o la AWS CLI, tal y como se describe a continuación. 

### Consola
<a name="collapsible-section-1"></a>

**Para añadir un rol de IAM para una instancia de base de datos de PostgreSQL utilizando la consola**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Seleccione el nombre de instancia de base de datos de PostgreSQL para mostrar sus detalles.

1. En la pestaña **Connectivity & security (Conectividad y seguridad)**, en la sección **Manage IAM roles (Administrar roles de IAM)**, elija el rol que desee agregar en la instancia **Add IAM roles to this (Agregar roles de IAM a este clúster) **. 

1. En Feature **Feature** (Característica), elija **s3Import**.

1. Seleccione **Add role (Añadir rol)**.

### AWS CLI
<a name="collapsible-section-2"></a>

**Para añadir un rol de IAM para una instancia de base de datos de PostgreSQL utilizando la CLI**
+ Utilice el siguiente comando para añadir el rol a la instancia de base de datos de PostgreSQL denominada `my-db-instance`. Sustituya *`your-role-arn`* por el ARN del rol que ha anotado en el paso anterior. Utilice `s3Import` para el valor de la opción `--feature-name`.   
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws rds add-role-to-db-instance \
     --db-instance-identifier my-db-instance \
     --feature-name s3Import \
     --role-arn your-role-arn   \
     --region your-region
  ```

  Para Windows:

  ```
  aws rds add-role-to-db-instance ^
     --db-instance-identifier my-db-instance ^
     --feature-name s3Import ^
     --role-arn your-role-arn ^
     --region your-region
  ```

### API de RDS
<a name="collapsible-section-3"></a>

Para agregar un rol de IAM para una instancia de base de datos de PostgreSQL mediante la API de Amazon RDS, llame a la operación [AddRoleToDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddRoleToDBInstance.html). 

## Uso de credenciales de seguridad para obtener acceso a un bucket de Amazon S3
<a name="USER_PostgreSQL.S3Import.Credentials"></a>

Si lo prefiere, puede utilizar credenciales de seguridad para proporcionar acceso a un bucket de Amazon S3, en lugar de proporcionar acceso con un rol de IAM. Para ello, especifique el parámetro `credentials` en la llamada a la función [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3). 

El parámetro `credentials` es una estructura de tipo `aws_commons._aws_credentials_1`, que contiene credenciales de AWS. Utilice la función [aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) para establecer la clave de acceso y la clave secreta en una estructura `aws_commons._aws_credentials_1`, como se muestra a continuación. 

```
postgres=> SELECT aws_commons.create_aws_credentials(
   'sample_access_key', 'sample_secret_key', '')
AS creds \gset
```

Tras crear la estructura `aws_commons._aws_credentials_1 `, utilice la función [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) con el parámetro `credentials` para importar los datos, tal y como se muestra a continuación.

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't', '', '(format csv)',
   :'s3_uri', 
   :'creds'
);
```

O bien puede incluir la llamada a la función [aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) insertada dentro de la llamada a la función `aws_s3.table_import_from_s3`.

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't', '', '(format csv)',
   :'s3_uri', 
   aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
```

## Solución de errores de acceso a Amazon S3
<a name="USER_PostgreSQL.S3Import.troubleshooting"></a>

Si tiene problemas de conexión al intentar importar los datos de Amazon S3, consulte las recomendaciones que se indican a continuación:
+ [Solución de problemas de identidades y accesos en Amazon RDS](security_iam_troubleshoot.md)
+ [Solución de problemas de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html) en la *Guía del usuario de Amazon Simple Storage Service*
+ [Solución de problemas de Amazon S3 e IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-s3.html) en la *Guía del usuario de IAM*