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 Noções básicas de permissões entre contas e do uso de perfis do IAM.
Tópicos
O cenário desse exemplo é que o proprietário do bucket deseja conceder permissão para acesso a objetos, mas o proprietário do bucket não possui todos os objetos 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 dos objetos no bucket, primeiro o proprietário dos objetos deverá conceder permissão ao proprietário do bucket usando uma lista de controle de acesso (ACL) de objetos. Depois, o proprietário do bucket poderá conceder permissões a um objeto que ele não possui. Para ter 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. Essa abordagem resolve 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. Veja a seguir um resumo das etapas de demonstração:
-
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.
-
-
O usuário administrador da Conta B faz upload de objetos no bucket de propriedade da Conta A.
-
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.
-
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 |
---|---|---|
|
Conta A |
AccountAadmin |
|
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
-
Você precisa ter duas Contas da AWS, e cada conta deverá ter um administrador, conforme mostrado na tabela na seção anterior.
-
Cadastre-se para obter uma Conta da AWS, se necessário.
-
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 um usuário
AccountAadmin
e anote as credenciais de segurança do usuário. 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 a AccountAadmin anexando uma política de usuário com pleno acesso. Consulte instruções em Gerenciar políticas do IAM no Guia do usuário do IAM.
-
No console do IAM
, anote o URL de login de usuário do IAM indicado no Painel. 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.
-
-
Repita a etapa anterior usando as credenciais da Conta B e crie um usuário administrador
AccountBadmin
.
-
-
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
eAccountBadmin
, no arquivo de configuração. -
Se estiver usando o Tools for Windows PowerShell, armazene as credenciais da sessão como
AccountAadmin
eAccountBadmin
.
Para obter instruções, consulte Configurar as ferramentas para as demonstrações.
-
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 do usuário do IAM da Conta A, faça login no AWS Management Console como o 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
-
No console do Amazon S3, crie um bucket. Esse exercício supõe que o bucket foi criado na Região da AWS Leste dos EUA (Norte da Virgínia) e que o nome dele é
.amzn-s3-demo-bucket1
Para obter instruções, consulte Criação de um bucket.
-
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.
-
Anote as credenciais do usuário Dave.
-
No console do Amazon S3, anexe a seguinte política do bucket ao bucket
. 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.amzn-s3-demo-bucket1
A política concede à Conta B as permissões
s3:PutObject
es3:ListBucket
. A política também concede ao usuárioDave
a permissãos3: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:::amzn-s3-demo-bucket1
/*", "arn:aws:s3:::amzn-s3-demo-bucket1
" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID
:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-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 pode fazer o seguinte:
-
Carregar 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.
Uso do AWS CLI
-
Usando o comando
put-object
da AWS CLI, carregue um objeto. O parâmetro--body
no comando identifica o arquivo de origem para fazer upload. Por exemplo, se o arquivo estiver na unidadeC:
de um computador Windows, especifiquec:\HappyFace.jpg
. O parâmetro--key
fornece o nome de chave para o objeto.aws s3api put-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin -
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 Find the canonical user ID for your Conta da AWS no Guia de referência de gerenciamento de contas da AWS.
aws s3api put-object-acl --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
Usar o Tools for Windows PowerShell
-
Carregue um objeto usando o comando
Write-S3Object
.Write-S3Object -BucketName
amzn-s3-demo-bucket1
-key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin -
Adicionar uma concessão à ACL do objeto para permitir controle total do objeto ao proprietário do bucket.
Set-S3ACL -BucketName
amzn-s3-demo-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.
Uso do AWS CLI
-
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.[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
Execute o comando
get-object
da CLI para fazer download do arquivoHappyFace.jpg
e salve-o localmente. Você fornece credenciais ao usuário Dave adicionando o parâmetro--profile
.aws s3api get-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpgOutputfile.jpg
--profile UserDaveAccountA
Usar o Tools for Windows PowerShell
-
Armazene as credenciais da AWS do usuário Dave, como
UserDaveAccountA
, para armazenamento persistente.Set-AWSCredentials -AccessKey
UserDave-AccessKey
-SecretKeyUserDave-SecretAccessKey
-storeas UserDaveAccountA -
Execute o comando
Read-S3Object
para fazer download do objetoHappyFace.jpg
e salve-o localmente. Você fornece credenciais ao usuário Dave adicionando o parâmetro-StoredCredentials
.Read-S3Object -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA
Etapa 4: limpar
-
Depois de terminar os testes, você pode fazer o seguinte para concluir a limpeza:
-
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
amzn-s3-demo-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. Consulte instruções detalhadas em Exclusão de um usuário do IAM no Guia do usuário do IAM.
-
-
-
Faça login no AWS Management Console
usando as credenciais da Conta B. No console do IAM , exclua o usuário AccountBadmin.