

# Pré-requisitos para integrar o RDS for SQL Server com o S3
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

Antes de começar, encontre e crie o bucket do S3 que você deseja usar. Além disso, adicione permissões para que a instância de banco de dados do RDS possa acessar o bucket do S3. Para configurar esse acesso, crie uma política do IAM e uma função do IAM.

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

**Como criar uma política do IAM para acesso ao Amazon S3**

1. No [Console de gerenciamento do IAM](https://console.aws.amazon.com/iam/home?#home), escolha **Policies (Políticas)** no painel de navegação.

1. Crie uma nova política e use a guia **Visual editor (Editor visual)** para as etapas a seguir.

1. Para **Service (Serviço)**, insira **S3** e escolha o serviço do **S3**.

1. Para **Actions (Ações)**, escolha o seguinte para conceder o acesso que a instância de banco de dados exige:
   + `ListAllMyBuckets`: obrigatório.
   + `ListBucket`: obrigatório.
   + `GetBucketAcl`: obrigatório.
   + `GetBucketLocation`: obrigatório.
   + `GetObject`: necessário para baixar arquivos do S3 em `D:\S3\`.
   + `PutObject` – necessário para fazer upload de arquivos de `D:\S3\` no S3
   + `ListMultipartUploadParts` – necessário para fazer upload de arquivos de `D:\S3\` no S3
   + `AbortMultipartUpload` – necessário para fazer upload de arquivos de `D:\S3\` no S3

1. Para **Resources (Recursos)**, as opções exibidas dependem de quais ações são escolhidas na etapa anterior. É possível ver opções para **bucket**, **object (objeto)** ou os dois. Para cada um deles, adicione o nome de recurso da Amazon (ARN) adequado.

   Em **bucket**, adicione o ARN do bucket que você deseja usar. Por exemplo, se o bucket for chamado de *amzn-s3-demo-bucket*, defina o ARN como `arn:aws:s3:::amzn-s3-demo-bucket`.

   Em **object (objeto)**, insira o ARN do bucket e escolha uma das seguintes opções:
   + Para conceder acesso a todos os arquivos no bucket especificado, escolha **Any (Qualquer um)** para **Bucket name (Nome do bucket)** e **Object name (Nome do objeto)**.
   + Para conceder acesso a pastas ou arquivos específicos no bucket, forneça os ARNs dos objetos e buckets específicos que você deseja que o SQL Server acesse. 

1. Siga as instruções no console até terminar a criação da política.

   O conteúdo anterior é um guia resumido para configurar uma política. Para instruções mais detalhadas sobre como criar políticas do IAM, consulte [Criar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do usuário do IAM.*

**Como criar uma função do IAM que usa a política do IAM do procedimento anterior**

1. No [Console de gerenciamento do IAM](https://console.aws.amazon.com/iam/home?#home), escolha **Roles (Funções)** no painel de navegação.

1. Crie uma nova função do IAM e escolha as seguintes opções à medida que elas forem exibidas no console:
   + **AWS Serviço da**
   + **RDS**
   + **RDS – adicionar função ao banco de dados**

   Escolha **Next:Permissions (Próximo: permissões)** na parte inferior.

1. Para **Attach permissions policies (Anexar políticas de permissões)**, insira o nome da política do IAM criada anteriormente. Depois disso, escolha essa política na lista.

1. Siga as instruções no console até terminar a criação da função.

   O anterior é um guia resumido para configurar uma função. Se quiser informações mais detalhadas sobre como criar funções, consulte [Funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) no *Guia do usuário do IAM.*

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

Para conceder acesso do Amazon RDS a um bucket do Simple Storage Service (Simple Storage Service (Amazon S3)), use o seguinte processo:

1. Crie uma política do IAM que conceda ao Amazon RDS acesso a um bucket do S3.

1. Crie uma função do IAM que o Amazon RDS possa assumir em seu nome para acessar seus buckets do S3.

   Para ter mais informações, consulte [Criar um perfil para delegar permissões a um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) no *Guia do usuário do IAM*.

1. Anexe a política do IAM que você criou ao perfil do IAM que você criou.

**Para criar a política do IAM**

Inclua as ações adequadas para conceder o acesso que a instância de banco de dados exige:
+ `ListAllMyBuckets`: obrigatório.
+ `ListBucket`: obrigatório.
+ `GetBucketAcl`: obrigatório.
+ `GetBucketLocation`: obrigatório.
+ `GetObject`: necessário para baixar arquivos do S3 em `D:\S3\`.
+ `PutObject` – necessário para fazer upload de arquivos de `D:\S3\` no S3
+ `ListMultipartUploadParts` – necessário para fazer upload de arquivos de `D:\S3\` no S3
+ `AbortMultipartUpload` – necessário para fazer upload de arquivos de `D:\S3\` no S3

1. O comando da AWS CLI a seguir cria uma política do IAM denominada `rds-s3-integration-policy` com essas opções. Ele concede acesso a um bucket denominado *amzn-s3-demo-bucket*.  
**Example**  

   Para Linux, macOS ou 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:

   Altere os finais de linha para os que são compatíveis com a interface (`^`, em vez de `\`). Além disso, no Windows, é necessário inserir um caractere de escape em todas as aspas duplas com um `\`. Para evitar a necessidade de inserir um caractere de escape em aspas no JSON, é possível salvá-lo em um arquivo e passá-lo como um parâmetro. 

   Primeiro, crie o arquivo `policy.json` com a seguinte política de permissão:

------
#### [ 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/*"
           }
       ]
   }
   ```

------

   Depois disso, use o seguinte comando para criar a política:

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

1. Após a criação da política, observe o nome de recurso da Amazon (ARN) da política. O ARN é necessário para uma etapa subsequente.

**Para criar perfil do IAM**
+ O comando da AWS CLI a seguir cria a função do IAM `rds-s3-integration-role` para essa finalidade.  
**Example**  

  Para Linux, macOS ou 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:

  Altere os finais de linha para os que são compatíveis com a interface (`^`, em vez de `\`). Além disso, no Windows, é necessário inserir um caractere de escape em todas as aspas duplas com um `\`. Para evitar a necessidade de inserir um caractere de escape em aspas no JSON, é possível salvá-lo em um arquivo e passá-lo como um parâmetro. 

  Primeiro, crie o arquivo `assume_role_policy.json` com a seguinte política:

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

****  

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

------

  Depois disso, use o comando a seguir para criar a função do IAM:

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example de usar a chave de contexto de condição global para criar a função do IAM**  

  Recomendamos usar as chaves de contexto de condição global [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) e [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) em políticas baseadas em recursos para limitar as permissões do serviço a um recurso específico. Essa é a maneira mais eficiente de se proteger contra o [problema "confused deputy"](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html).

  Você pode usar as duas chaves de contexto de condição global e fazer com que o valor `aws:SourceArn` contenha o ID da conta. Nesses casos, verifique se o valor `aws:SourceAccount` e a conta no valor `aws:SourceArn` usa o mesmo ID de conta quando eles são usados na mesma instrução de política.
  + Use `aws:SourceArn` se quiser acesso entre serviços para um único recurso.
  + Use `aws:SourceAccount` se você quiser permitir que qualquer recurso nessa conta seja associado ao uso entre serviços.

  Na política, certifique-se de usar a chave de contexto de condição global `aws:SourceArn` com o nome do recurso da Amazon (ARN) completo dos recursos acessando a função. Para integração do S3, certifique-se de incluir os ARNs de instância de banco de dados, conforme mostrado no exemplo a seguir.

  Para Linux, macOS ou 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:

  Adicione as chaves de contexto de condição globais à `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 anexar a política do IAM à função do IAM**
+ O seguinte comando da AWS CLI anexa a política à função denominada `rds-s3-integration-role`. Substitua `your-policy-arn` pelo ARN da política que você anotou em uma etapa anterior.  
**Example**  

  Para Linux, macOS ou 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
  ```