

# Configurar o acesso entre contas do Athena aos buckets do Amazon S3
<a name="cross-account-permissions"></a>

Um cenário comum do Amazon Athena é conceder acesso a usuários em uma conta diferente do proprietário do bucket de maneira que eles possam realizar as consultas. Neste caso, use uma política de bucket para conceder acesso.

**nota**  
Para obter informações sobre o acesso entre contas aos catálogos de dados do AWS Glue pelo Athena, consulte [Configurar o acesso entre contas aos catálogos de dados do AWS Glue](security-iam-cross-account-glue-catalog-access.md).

A política de bucket de exemplo a seguir, criada e aplicada ao bucket `s3://amzn-s3-demo-bucket` pelo proprietário do bucket, concede acesso a todos os usuários na conta `123456789123`, que é uma conta diferente.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "MyPolicyID",
   "Statement": [
      {
          "Sid": "MyStatementSid",
          "Effect": "Allow",
          "Principal": {
             "AWS": "arn:aws:iam::123456789123:root"
          },
          "Action": [
             "s3:GetBucketLocation",
             "s3:GetObject",
             "s3:ListBucket",
             "s3:ListBucketMultipartUploads",
             "s3:ListMultipartUploadParts",
             "s3:AbortMultipartUpload"
          ],
          "Resource": [
             "arn:aws:s3:::amzn-s3-demo-bucket",
             "arn:aws:s3:::amzn-s3-demo-bucket/*"
          ]
       }
    ]
 }
```

------

Para conceder acesso a um determinado usuário em uma conta, substitua a chave `Principal` por uma chave que especifique o usuário, em vez de `root`. Por exemplo, para o perfil do usuário `Dave`, use `arn:aws:iam::123456789123:user/Dave`.

## Configurar o acesso entre contas a um bucket criptografado com uma chave personalizada do AWS KMS
<a name="cross-account-permissions-kms"></a>

Se você tem um bucket do Amazon S3 criptografado com uma chave personalizada do AWS Key Management Service (AWS KMS), talvez seja necessário conceder aos usuários acesso a ele de outra conta da Amazon Web Services.

Conceder acesso a um bucket criptografado de AWS KMS na Conta A a um usuário na Conta B requer as seguintes permissões:
+ A política de bucket na Conta A deve conceder acesso ao perfil assumido pela Conta B.
+ A política de chaves do AWS KMS na Conta A deve conceder acesso ao perfil assumido pelo usuário na Conta B.
+ O perfil do AWS Identity and Access Management (IAM) assumido na Conta B deve conceder acesso ao bucket e à chave na Conta A.

Os procedimentos a seguir descrevem como conceder cada uma dessas permissões.

**Para conceder acesso ao bucket na Conta A para o usuário na Conta B**
+ Na Conta A, [revise a política de bucket do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html) e confirme se há uma instrução que permita o acesso a partir do ID da conta da Conta B.

  Por exemplo, a política de bucket a seguir permite o acesso `s3:GetObject` à conta ID `111122223333`:

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

****  

  ```
  {
    "Id": "ExamplePolicy1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "ExampleStmt1",
        "Action": [
          "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Principal": {
          "AWS": [
            "111122223333"
          ]
        }
      }
    ]
  }
  ```

------

**Para conceder acesso ao usuário na Conta B a partir da política de chave do AWS KMS na Conta A**

1. Na política de chaves do AWS KMS para a Conta A, conceda permissões ao perfil assumido na Conta B para as ações a seguir:
   +  `kms:Encrypt` 
   +  `kms:Decrypt` 
   +  `kms:ReEncrypt*` 
   +  `kms:GenerateDataKey*` 
   +  `kms:DescribeKey` 

   O exemplo a seguir concede acesso de chave a somente um perfil do IAM.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "{{AllowUseOfTheKey}}",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{111122223333}}:role/{{role_name}}"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Na Conta A, revise a política de chave [usando a visualização de políticas do Console de gerenciamento da AWS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view).

1. Na política de chave, verifique se a seguinte declaração lista a Conta B como principal.

   ```
   "Sid": "Allow use of the key" 
   ```

1. Se a instrução `"Sid": "Allow use of the key"` não estiver presente, execute as seguintes etapas:

   1. Alterne para exibir a política de chave [usando a exibição padrão do console](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-default-view). 

   1.  Adicione o ID da conta B como uma conta externa com acesso à chave.

**Para conceder acesso ao bucket e à chave na Conta A do perfil do IAM assumido pela Conta B**

1. Na Conta B, abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Abra o perfil do IAM associado ao usuário na Conta B.

1. Analise a lista de políticas de permissões aplicadas ao perfil do IAM.

1. Certifique-se de aplicar uma política que conceda acesso ao bucket.

   A instrução exemplificada a seguir concede ao perfil do IAM acesso às operações `s3:GetObject` e `s3:PutObject` no bucket `amzn-s3-demo-bucket`:

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt2",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
     ]
   }
   ```

------

1. Certifique-se de que seja aplicada uma política que conceda acesso à chave.
**nota**  
Se o perfil do IAM assumido na Conta B já tiver [acesso de administrador](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html), não será necessário conceder acesso à chave usando as políticas do IAM do usuário.

   A instrução exemplificada a seguir concede ao perfil do IAM acesso para usar a chave `arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd`.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt3",
         "Action": [
           "kms:Decrypt",
           "kms:DescribeKey",
           "kms:Encrypt",
           "kms:GenerateDataKey",
           "kms:ReEncrypt*"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:kms:{{us-west-2}}:{{123456789098}}:key/{{111aa2bb-333c-4d44-5555-a111bb2c33dd}}"
       }
     ]
   }
   ```

------

## Configurar o acesso entre contas a objetos de buckets
<a name="cross-account-permissions-objects"></a>

Os objetos carregados por uma conta (Conta C) que não seja a conta proprietária do bucket (Conta A) podem exigir ACLs explícitas em nível de objeto que concedam acesso de leitura à conta de consulta (Conta B). Para evitar esse requisito, a Conta C deve assumir uma função na Conta A antes de colocar objetos no bucket da Conta A. Para obter mais informações, consulte [Como posso fornecer acesso entre contas a objetos que estão em buckets do Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/).