

# Requisitos previos para la integración de RDS for SQL Server con S3
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

Antes de comenzar, busque o cree el bucket de S3 que desea utilizar. También tiene que añadir los permisos para que la instancia de base de datos de RDS pueda acceder al bucket de S3. Para configurar este acceso, cree una política de IAM y un rol de IAM.

## Consola
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Para crear una política de IAM para acceder a Amazon S3**

1. En la [IAM Management Console](https://console.aws.amazon.com/iam/home?#home), seleccione **Policies (Políticas)** en el panel de navegación.

1. Cree una nueva política y utilice la pestaña **Visual editor (Editor visual)** para los siguientes pasos.

1. En **Service (Servicio)**, introduzca **S3** y, a continuación, seleccione el servicio de **S3**.

1. En **Actions (Acciones)**, seleccione los siguientes elementos para conceder el acceso que requiere la instancia de base de datos:
   + `ListAllMyBuckets`: obligatorio
   + `ListBucket`: obligatorio
   + `GetBucketAcl`: obligatorio
   + `GetBucketLocation`: obligatorio
   + `GetObject` – obligatorio para descargar archivos desde S3 a `D:\S3\`
   + `PutObject`: obligatorio para cargar archivos desde `D:\S3\` a S3
   + `ListMultipartUploadParts`: obligatorio para cargar archivos desde `D:\S3\` a S3
   + `AbortMultipartUpload`: obligatorio para cargar archivos desde `D:\S3\` a S3

1. En **Resources (Recursos)**, las opciones que aparecen varían en función de las acciones que seleccione en el paso anterior. Es posible que vea opciones para **bucket**, **object (objeto)** o para ambos. En cada una de ellas, añada el nombre de recurso de Amazon (ARN) adecuado.

   En **bucket**, añada el ARN del bucket que desea utilizar. Por ejemplo, si el bucket se denomina *amzn-s3-demo-bucket*, establezca el ARN en `arn:aws:s3:::amzn-s3-demo-bucket`.

   En **object (objeto)**, introduzca el ARN del bucket y, a continuación, seleccione una de las siguientes opciones:
   + Para conceder acceso a todos los archivos del bucket especificado, seleccione **Any (Cualquiera)** en **Bucket name (Nombre de bucket)** y **Object name (Nombre de objeto)**.
   + Para conceder acceso a carpetas o archivos específicos del bucket, facilite los ARN de los objetos y buckets específicos a los que desea que SQL Server acceda. 

1. Siga las instrucciones de la consola hasta que termine de crear la política.

   Se trata de una guía resumida para configurar una política. Para obtener instrucciones más detalladas acerca de la creación de políticas de IAM, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM.*

**Para crear un rol de IAM que utiliza la política de IAM del procedimiento anterior**

1. En la [IAM Management Console](https://console.aws.amazon.com/iam/home?#home), seleccione **Roles** en el panel de navegación.

1. Cree un rol de IAM nuevo y seleccione las siguientes opciones a medida que aparecen en la consola:
   + **AWS Servicio de**
   + **RDS**
   + **RDS – Add Role to Database (RDS: Añadir rol a la base de datos**

   A continuación, seleccione **Next:Permissions (Siguiente:Permisos)** en la parte inferior.

1. En **Attach permissions policies (Asociar políticas de permisos)**, introduzca el nombre de la política de IAM que ha creado previamente. A continuación, seleccione la política de la lista.

1. Siga las instrucciones de la consola hasta que termine de crear el rol.

   Se trata de una guía resumida para configurar un rol. Si desea obtener instrucciones más detalladas acerca de la creación de roles, consulte [Roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) en la *Guía del usuario de IAM.*

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Para conceder a Amazon RDS acceso a un bucket de Simple Storage Service (Amazon S3), utilice el siguiente proceso:

1. Cree una política de IAM que conceda a Amazon RDS acceso a un bucket de S3.

1. Cree un rol de IAM que Amazon RDS pueda asumir en su nombre para acceder a los buckets de 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. *

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

**Creación de la política de IAM**

Incluya las acciones adecuadas para conceder el acceso que requiere la instancia de base de datos:
+ `ListAllMyBuckets`: obligatorio
+ `ListBucket`: obligatorio
+ `GetBucketAcl`: obligatorio
+ `GetBucketLocation`: obligatorio
+ `GetObject` – obligatorio para descargar archivos desde S3 a `D:\S3\`
+ `PutObject`: obligatorio para cargar archivos desde `D:\S3\` a S3
+ `ListMultipartUploadParts`: obligatorio para cargar archivos desde `D:\S3\` a S3
+ `AbortMultipartUpload`: obligatorio para cargar archivos desde `D:\S3\` a S3

1. El siguiente comando de la AWS CLI crea una política de IAM denominada `rds-s3-integration-policy` con estas opciones. Otorga acceso a un bucket denominado *amzn-s3-demo-bucket*.  
**Example**  

   Para Linux, macOS o Unix:

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Para Windows:

   Asegúrese de cambiar las terminaciones de las líneas a las que son compatibles con la interfaz (`^` en lugar de `\`). Además, en Windows, tiene que escapar todas las comillas dobles con `\`. Para evitar tener que escapar las comillas del JSON, puede guardarlo en un archivo y transferirlo como un parámetro. 

   En primer lugar, cree el archivo `policy.json` con la siguiente política de permisos:

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   A continuación, utilice el siguiente comando para crear la política:

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. Después de crear la política, anote el Nombre de recurso de Amazon (ARN) de la política. Necesita el ARN para un paso posterior.

**Creación del rol de IAM**
+ El siguiente comando de la AWS CLI crea el rol de IAM `rds-s3-integration-role` con este fin.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  Para Windows:

  Asegúrese de cambiar las terminaciones de las líneas a las que son compatibles con la interfaz (`^` en lugar de `\`). Además, en Windows, tiene que escapar todas las comillas dobles con `\`. Para evitar tener que escapar las comillas del JSON, puede guardarlo en un archivo y transferirlo como un parámetro. 

  En primer lugar, cree el archivo `assume_role_policy.json` con la siguiente política:

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

****  

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

------

  A continuación, utilice el siguiente comando para crear el rol de IAM:

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example de utilizar la clave de contexto de condición global para crear el rol de IAM**  

  Le recomendamos que utilice las claves de contexto de condición globales [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) y [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-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).

  Puede utilizar claves de contexto de condición globales y hacer que el valor de `aws:SourceArn` contenga el ID de cuenta. En estos casos, el valor de `aws:SourceAccount` y la cuenta del valor de `aws:SourceArn` deben utilizar el mismo ID de cuenta cuando se utilizan 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 nombre de recurso de Amazon (ARN) completo de los recursos que acceden al rol. Para la integración de S3, asegúrese de incluir los ARN de la instancia de base de datos, tal y como se muestra en el siguiente ejemplo.

  Para Linux, macOS o Unix:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Para Windows:

  Agregue la clave de contexto de condición global a `assume_role_policy.json`.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**Para adjuntar la política de IAM al rol de IAM**
+ El siguiente comando de la AWS CLI asocia la política al rol denominado `rds-s3-integration-role`. Sustituya `your-policy-arn` por el ARN de la política anotado en el paso anterior.  
**Example**  

  Para Linux, macOS o Unix:

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

  Para Windows:

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