Exemplo 3: O proprietário do bucket concede permissões para objetos que não possui - Amazon Simple Storage Service

Exemplo 3: O proprietário do bucket concede permissões para objetos que não possui

Importante

Conceder permissões a perfis do IAM é uma prática melhor do que conceder permissões a usuários individuais. Para aprender a fazer isso, consulte Histórico: Permissões entre contas e uso de funções do IAM.

O cenário deste exemplo é que o proprietário do bucket deseja conceder permissão para acessar objetos, mas nem todos os objetos no bucket são de propriedade do proprietário do bucket. Para este exemplo, o proprietário do bucket está tentando conceder permissão aos usuários em sua própria conta.

Um proprietário de bucket pode habilitar outras Contas da AWS a carregar objetos. Por padrão, o proprietário do bucket não possui objetos gravados em um bucket por outra Conta da AWS. Os objetos são de propriedade das contas que os gravam em um bucket do S3. Se o proprietário do bucket não for proprietário do objeto no bucket, o proprietário do objeto deverá primeiro conceder permissão ao proprietário do bucket usando uma ACL de objeto. Em seguida, o proprietário do bucket pode conceder permissões a um objeto que ele não possui. Para obter mais informações, consulte Propriedade de bucket e objeto do Amazon S3.

Se o proprietário do bucket adotar a configuração aplicada pelo proprietário do bucket em S3 Object Ownership para o bucket, o proprietário do bucket terá propriedade de todos os objetos do bucket, inclusive de objetos gravados por outra Conta da AWS. Isso resolverá o problema de objetos que não pertencem ao proprietário do bucket. Em seguida, é possível delegar permissão aos usuários em sua própria conta ou para outras Contas da AWS.

nota

A Propriedade de objetos do S3 é uma configuração no nível do bucket do Amazon S3 que você pode usar para controlar a propriedade de objetos carregados no bucket e para desabilitar ou habilitar as ACLs. Por padrão, a Propriedade de Objetos está definida com a configuração Imposto pelo proprietário do bucket e todas as ACLs estão desabilitadas. Quando as ACLs são desabilitadas, o proprietário do bucket possui todos os objetos do bucket e gerencia o acesso a eles exclusivamente usando políticas de gerenciamento de acesso.

A maioria dos casos de uso modernos no Amazon S3 não exige mais o uso de ACLs. Recomendamos manter as ACLs desabilitadas, exceto em circunstâncias incomuns em que seja necessário controlar o acesso para cada objeto individualmente. Com as ACLs desabilitadas, é possível usar políticas para controlar o acesso a todos os objetos no bucket, independentemente de quem carregou os objetos para o bucket. Para ter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Neste exemplo, assumimos que o proprietário do bucket não aplicou a configuração aplicada pelo proprietário do bucket em Object Ownership. O proprietário do bucket delega permissão aos usuários em sua própria conta. A seguir é apresentado um resumo das etapas de demonstração:

  1. O usuário administrador da Conta A anexa uma política de bucket com duas declarações.

    • Habilitar permissão entre contas para a Conta B fazer upload de objetos.

    • Permitir que um usuário em sua própria conta acesse objetos no bucket.

  2. O usuário administrador da Conta B faz upload de objetos no bucket de propriedade da Conta A.

  3. O administrador da Conta B atualiza a ACL do objeto adicionando uma concessão que dá ao proprietário do bucket permissão de controle total sobre o objeto.

  4. O usuário na Conta A verifica acessando objetos no bucket, independentemente de quem os possui.

Para este exemplo, você precisará de duas contas. A tabela a seguir mostra como nos referimos a essas contas e aos usuários administradores nessas contas. Nesta demonstração, você não usa as credenciais do usuário raiz da conta, conforme as diretrizes recomendadas do IAM. Para ter mais informações, consulte Sobre o uso de um usuário administrador para criar recursos e conceder permissões. Em vez disso, você cria um administrador em cada conta e usa essas credenciais para criar recursos e conceder permissões a eles.

ID da Conta da AWS Conta referida como Administrador na conta

1111-1111-1111

Conta A

AccountAadmin

2222-2222-2222

Conta B

AccountBadmin

Todas as tarefas de criar usuários e conceder permissões são feitas no AWS Management Console. Para verificar permissões, a demonstração usa as ferramentas de linha de comando, a AWS Command Line Interface (AWS CLI), e o AWS Tools for Windows PowerShell. Portanto, você não precisa escrever nenhum código.

Etapa 0: Preparar-se para a demonstração

  1. Você precisa ter duas Contas da AWS, e cada conta deverá ter um administrador, conforme mostrado na tabela na seção anterior.

    1. Cadastre-se para obter uma Conta da AWS, se necessário.

    2. Usando as credenciais da Conta A, faça login no console do IAM e faça o seguinte para criar um usuário administrador:

      • Crie o usuário AccountAadmin e anote as credenciais de segurança. Para obter mais informações sobre como adicionar usuários, consulte Criar um usuário do IAM na sua Conta da AWS no Guia do usuário do IAM.

      • Conceda permissões de administrador AccountAadmin anexando uma política de usuário com pleno acesso. Para obter instruções, consulte Gerenciar políticas do IAM no Guia do usuário do IAM.

      • No Painel do console do IAM, anote o URL de login de usuário do IAM. Os usuários nessa conta devem usar esse URL para fazer login no AWS Management Console. Para obter mais informações, consulte Como os usuários fazem login em sua conta no Guia do usuário do IAM.

    3. Repita a etapa anterior usando as credenciais da Conta B e crie um usuário administrador AccountBadmin.

  2. Configure a AWS CLI ou as Tools for Windows PowerShell. Salve as credenciais de administrador da seguinte forma:

    • Se estiver usando a AWS CLI, crie dois perfis, AccountAadmin e AccountBadmin, no arquivo de configuração.

    • Se estiver usando o Tools for Windows PowerShell, armazene as credenciais da sessão como AccountAadmin e AccountBadmin.

    Para obter instruções, consulte Configurar as ferramentas para as demonstrações de exemplo.

Etapa 1: Realizar as tarefas da Conta A

Execute as seguintes etapas para a Conta A:

Etapa 1.1: Fazer login no console

Usando o URL de login de usuário do IAM para a Conta A, primeiro faça login no AWS Management Console como usuário AccountAadmin. Esse usuário criará um bucket e anexará uma política a ele.

Etapa 1.2: Criar um bucket e um usuário e adicionar uma política de bucket para conceder permissões ao usuário

  1. No console do Amazon S3, crie um bucket. Este exercício supõe que o bucket foi criado na região Leste dos EUA (Norte da Virgínia) e que o nome é DOC-EXAMPLE-BUCKET1.

    Para obter instruções, consulte Criação de um bucket.

  2. No console do IAM, crie um usuário chamado Dave.

    Para obter instruções passo a passo, consulte Criação de usuários do IAM (console) no Guia do usuário do IAM.

  3. Anote as credenciais de Dave.

  4. No console do Amazon S3, anexe a seguinte política do bucket ao bucket DOC-EXAMPLE-BUCKET1. Para obter instruções, consulte Adicionar uma política de bucket usando o console do Amazon S3. Siga as etapas para adicionar uma política de bucket. Para obter informações sobre como encontrar IDs de conta, consulte Como encontrar o ID da Conta da AWS.

    A política concede à Conta B as permissões s3:PutObject e s3:ListBucket. A política também concede ao usuário Dave a permissão s3:GetObject.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

Etapa 2: Realizar as tarefas da Conta B

Agora que a Conta B tem permissões para executar operações no bucket da Conta A, o administrador da Conta B fará o seguinte:

  • Fazer upload de um objeto no bucket da Conta A.

  • Adicionar uma concessão à ACL do objeto para permitir que a Conta A, a proprietária do bucket, tenha controle total.

Usando a AWS CLI
  1. Usando o comando da CLI put-object, faça upload de um objeto. O parâmetro --body no comando identifica o arquivo de origem para fazer upload. Por exemplo, se o arquivo estiver na unidade C: de um computador Windows, você especificará c:\HappyFace.jpg. O parâmetro --key fornece o nome de chave para o objeto.

    aws s3api put-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. Adicionar uma concessão à ACL do objeto para permitir controle total do objeto ao proprietário do bucket. Para obter informações sobre como encontrar um ID de usuário canônico, consulte Como encontrar o ID de usuário canônico da Conta da AWS.

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
Usar o Tools for Windows PowerShell
  1. Usando o comando Write-S3Object do Tools for Windows PowerShell, faça upload de um objeto.

    Write-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
  2. Adicionar uma concessão à ACL do objeto para permitir controle total do objeto ao proprietário do bucket.

    Set-S3ACL -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

Etapa 3: Testar permissões

Agora verifique se o usuário Dave na conta A pode acessar o objeto de propriedade da conta B.

Usando a AWS CLI
  1. Adicione as credenciais do usuário Dave ao arquivo de configuração da AWS CLI e crie um novo perfil, UserDaveAccountA. Para obter mais informações, consulte Configurar as ferramentas para as demonstrações de exemplo.

    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. Execute o comando get-object da CLI para fazer download do arquivo HappyFace.jpg e salve-o localmente. Você fornece credenciais ao usuário Dave adicionando o parâmetro --profile.

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA
Usar o Tools for Windows PowerShell
  1. Armazene as credenciais da AWS do usuário Dave, como UserDaveAccountA, para armazenamento persistente.

    Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
  2. Execute o comando Read-S3Object para fazer download do objeto HappyFace.jpg e salve-o localmente. Você fornece credenciais ao usuário Dave adicionando o parâmetro -StoredCredentials.

    Read-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

Etapa 4: Limpeza

  1. Depois de terminar os testes, você pode seguir uma das etapas a seguir para fazer a limpeza.

    1. Faça login no AWS Management Console usando as credenciais da Conta A e faça o seguinte:

      • No console do Amazon S3, remova a política de bucket anexada a DOC-EXAMPLE-BUCKET1. Nas Propriedades do bucket, exclua a política na seção Permissions (Permissões).

      • Se o bucket foi criado para este exercício, no console do Amazon S3, exclua os objetos e, em seguida, exclua o bucket.

      • No console do IAM, remova o usuário AccountAadmin. Para obter instruções passo a passo, consulte Excluir um usuário do IAM no Guia do usuário do IAM.

  2. Faça login no AWS Management Console usando as credenciais da Conta B. No console do IAM, exclua o usuário AccountBadmin.