Como oferecer acesso entre contas a objetos que estão em buckets do Amazon S3?

11 minuto de leitura
0

Quero conceder acesso para outra conta da AWS a um objeto que está em um bucket do Amazon Simple Storage Service (Amazon S3).

Breve descrição

No Amazon S3, você pode conceder aos usuários de outra conta da AWS acesso granular entre contas aos objetos existentes na sua conta.

Com base no tipo de acesso que você deseja fornecer, use uma das seguintes soluções para conceder acesso entre contas a objetos:

  • Políticas do AWS Identity and Access Management (IAM) e políticas de bucket baseadas em recursos para acesso somente programático a objetos de buckets do S3
  • Políticas do IAM e listas de controle de acesso (ACLs) baseadas em recursos para acesso somente programático a objetos de buckets do S3
    Observação: quando a configuração Imposto pelo proprietário do bucket está ativada, todas as ACLs de buckets e objetos são desativadas. Portanto, você não pode usar ACLs para conceder acesso entre contas. Por padrão, todos os buckets recém-criados têm a configuração Imposto pelo proprietário do bucket ativada. Para gerenciar o acesso entre contas, também é uma prática recomendada usar políticas do IAM e políticas de bucket em vez de ACLs. Para obter mais informações, consulte Controlar a propriedade de objetos e a desativação de ACLs do seu bucket.
  • Perfis do IAM entre contas para acesso programático e via console a objetos de buckets do S3

Se o solicitante for uma entidade principal do IAM, a conta proprietária da entidade principal deverá conceder as permissões do S3 por meio de uma política do IAM. Com base no seu caso de uso, o proprietário do bucket também deve conceder permissões por meio de uma política de bucket ou do ACL. Depois que o acesso for concedido, o acesso programático de buckets entre contas será o mesmo que o acesso aos buckets da conta.

Para acesso entre contas com Pontos de Acesso Amazon S3 ou com o AWS Key Management Service (AWS KMS), consulte Por que os usuários de várias contas estão recebendo erros de acesso negado quando tentam acessar objetos do S3 criptografados por uma chave personalizada do AWS KMS?

Para conjuntos de dados grandes que você precisa acessar como objetos entre contas, uma prática recomendada é usar os Pontos de acesso S3. Para obter mais informações, consulte Simplifique e escale o gerenciamento do acesso a conjuntos de dados compartilhados com Pontos de acesso Amazon S3 entre contas.

Resolução

Políticas do IAM e políticas de bucket baseadas em recursos

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucione erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para gerenciar o controle de acesso entre contas e auditar as permissões do objeto do S3, use políticas de bucket baseadas em recursos. Aplique uma política de bucket no nível do bucket para definir os seguintes valores:

  • Elemento de entidade principal: quem pode acessar os objetos dentro do bucket
  • Elemento de recurso: os objetos que eles podem acessar
  • Elemento de ação: como eles podem acessar os objetos dentro do bucket

Ao aplicar uma política de bucket no nível do bucket, você pode definir o acesso granular a diferentes objetos dentro desse bucket. Também pode revisar a política de bucket para ver quem pode acessar objetos em um bucket do S3.

Para usar políticas de bucket para gerenciar o acesso a buckets do S3, conclua as seguintes etapas:
Observação: nas etapas a seguir, a Conta A é a sua conta e a Conta B é a conta para a qual você deseja conceder acesso a objetos. 

  1. Crie um bucket do S3 na Conta A.

  2. Crie um perfil ou usuário do IAM na Conta B.

  3. Dê permissão ao perfil do IAM na Conta B para baixar (GetObject) e carregar (PutObject) objetos de e para um bucket específico. Use a política do IAM para também conceder ao perfil do IAM na Conta B permissões para chamar PutObjectAcl, que concede permissões de objeto ao proprietário do bucket:

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
    
            }
        ]
    }

    Observação: atualize a política para incluir suas variáveis de usuário. Você também pode limitar o acesso a uma pasta de bucket específica que esteja na Conta A. Para limitar o acesso a uma pasta de bucket específica, defina o nome da pasta no elemento Recurso, como "arn:aws:s3:::AccountABucketName/FolderName/*". Para obter mais informações, consulte Como conceder acesso para um usuário a uma pasta específica no meu bucket do Amazon S3? Você também pode criar uma política baseada em identidade do IAM com o comando create-policy da AWS CLI.

  4. Configure a política de bucket da Conta A para conceder permissões ao perfil ou usuário do IAM que você criou na Conta B. Use essa política de bucket para conceder a um usuário as permissões a GetObject e PutObject para objetos em um bucket que pertence à Conta A:

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::AccountABucketName/*"
                ]
            }
        ]
    }

    Você também pode criar uma política de bucket do Amazon S3 com o comando put-bucket-policy da AWS CLI.

Observação: para limitar o acesso a uma pasta de bucket específica, defina o nome dela no elemento Recurso. como "arn:aws:s3:::AccountABucketName/FolderName/*". Quando você usa a permissão s3:PutObject com uma condição, o proprietário do bucket tem controle total sobre os objetos que outras contas enviam. A chamada da API PutObject impõe a ACL com cabeçalhos específicos. 

Políticas do IAM e ACLs baseadas em recursos

Você também pode usar ACLs de objetos para gerenciar permissões para cenários específicos. Para obter mais informações, consulte Quando usar uma política de acesso com base em ACL (ACLs de bucket e objeto).

As ACLs do Amazon S3 permitem que os usuários definam somente conjuntos de permissões READ, WRITE, READ_ACP, WRITE_ACP e FULL_CONTROL. Você pode usar somente uma conta ou um dos grupos predefinidos do Amazon S3 como beneficiário da ACL do Amazon S3. Quando você especifica um endereço de e-mail ou ID de usuário canônico para uma conta, a ACL se aplica a todas as identidades na conta do beneficiário. Por exemplo, não é possível usar uma ACL para restringir o acesso a usuários ou perfis individuais do IAM. Também não é possível aplicar ACLs a objetos diferentes que compartilham os mesmos prefixos.

Observação: o proprietário do bucket pode não ter controle total sobre os objetos que o beneficiário da ACL carregou. Isso ocorre porque a ACL não oferece suporte para a condição da operação do S3 que a ACL autoriza.

Para usar ACLs de bucket e objeto para gerenciar o acesso a buckets do S3, conclua as seguintes etapas:

  1. Crie um perfil ou usuário do IAM na Conta B.
  2. Conceda ao perfil ou usuário permissões para realizar as operações necessárias do Amazon S3. Os usuários que chamam PutObject e GetObject devem ter as permissões listadas na seção Políticas baseadas em recursos e políticas do IAM.
  3. Configure a ACL do bucket para incluir pelo menos a permissão WRITE para a Conta B. Isso garante que os perfis ou usuários do IAM da Conta B possam carregar objetos em um bucket que a Conta A possui:
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> WRITE </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    Observação: para encontrar o CanonicalUserID, consulte Encontrar um ID de usuário canônico da conta da AWS.
  4. Configure ACLs de objetos para incluir pelo menos a permissão READ para a Conta B. Isso permite que perfis ou usuários do IAM na Conta B baixem objetos de um bucket que a Conta A possui:
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> READ </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    As permissões de ACL variam de acordo com o recurso, o bucket ou o objeto do S3 ao qual uma ACL é aplicada. Para obter mais informações, consulte ](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html)Visão geral de listas de controle de acesso (ACLs)[. Ao criar seu bucket ou carregar um objeto em um bucket existente, configure ACLs de bucket e objeto. Para obter mais informações, consulte Configurar ACLs.

Perfis do IAM entre contas

Nem todos os serviços da AWS oferecem suporte a políticas baseadas em recursos. Use perfis do IAM entre contas para centralizar o gerenciamento de permissões ao fornecer acesso entre contas a vários serviços. Esse método permite o acesso entre contas a objetos que outra conta ou serviço da AWS possui ou carregou. Se você não usar perfis do IAM entre contas, deverá modificar a ACL do objeto. Para obter mais informações, consulte Como o Amazon S3 autoriza uma solicitação para uma operação de objeto.

Para usar perfis do IAM entre contas para gerenciar o acesso a buckets do S3, conclua as seguintes etapas:

  1. Crie um perfil do IAM na Conta A.
  2. Conceda ao perfil permissões para realizar as operações necessárias do S3. Na política de confiança do perfil, conceda a um perfil ou usuário da Conta B permissões para assumir o perfil na Conta A:
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    Observação: os perfis do IAM devem ter uma política de confiança que defina as entidades principais que podem assumi-los e quando isso pode acontecer. Os perfis do IAM podem ter várias políticas de permissões que definem as permissões que uma entidade principal que os assume pode realizar e os recursos que eles utilizam. 
    Você também pode executar o comando create-role da AWS CLI para criar um perfil com a política de confiança.
    A política de acesso a seguir permite que um usuário que assumiu esse perfil baixe e carregue objetos programaticamente por meio do console do Amazon S3. Para obter mais informações, consulte Como conceder acesso para um usuário a uma pasta específica no meu bucket do Amazon S3?
    Observação: se apenas o acesso programático for necessário, você poderá remover as duas primeiras instruções da política:
    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::*"
                ]
            },
            {
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::AccountABucketName"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
            }
        ]
    }
    Ou, execute o comando create-policy da AWS CLI para criar uma política baseada em identidade do IAM.
  3. Conceda a um perfil ou usuário do IAM na Conta B permissões para assumir o perfil do IAM criado na Conta A. Você deve adicionar o exemplo de política a seguir como uma política de permissões do usuário ou perfil do IAM:
    {  "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountA:role/AccountARole"
      }
    }
    Ou, execute o comando create-policy da AWS CLI para criar uma política baseada em identidade do IAM.
  4. A partir de um perfil na Conta B, assuma o perfil na Conta A, para que as identidades do IAM na Conta B possam realizar as operações necessárias do S3. Para obter mais informações, consulte Mudar para um perfil (console).
    Observação: quando você assume um perfil do IAM na Conta A, o Amazon S3 determina a operação com base na política de acesso. O perfil do IAM funciona como uma chamada de API invocada por uma identidade do IAM local na Conta A. Não é necessária uma política de bucket ou uma ACL para acesso entre contas. Para obter mais informações, consulte ações do Amazon S3.

Informações relacionadas

Ações, recursos e chaves de condição para o Amazon S3

Exemplos de políticas de bucket

Diretrizes para políticas de acesso

Configuração para backup e restauração nativos entre contas no Amazon RDS para Microsoft SQL Server

Exemplos de políticas de perfil e usuário

AWS OFICIAL
AWS OFICIALAtualizada há 4 meses