Exemplo 4: proprietário do bucket concede permissão entre contas a objetos que não possui - Amazon Simple Storage Service

Exemplo 4: proprietário do bucket concede permissão entre contas a objetos que não possui

Neste cenário de exemplo, você é proprietário de um bucket e habilitou outras Contas da AWS para carregar objetos. Se você aplicou a configuração aplicada pelo proprietário do bucket em S3 Object Ownership para o 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 a você, o 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. Suponha que a configuração imposta pelo proprietário do bucket em S3 Object Ownership não esteja habilitada. Ou seja, seu bucket pode ter objetos pertencentes a outras Contas da AWS.

Agora, suponha que, como proprietário do bucket, você precise conceder permissão entre contas aos objetos, independentemente de quem seja o proprietário, a um usuário em outra conta. Por exemplo, esse usuário pode ser um aplicativo de faturamento que precise acessar metadados de objeto. Há dois problemas principais:

  • O proprietário do bucket não tem permissões sobre os objetos criados por outras Contas da AWS. Para que o proprietário do bucket possa conceder permissões em objetos que não possui, o proprietário do objeto deve primeiro conceder permissão ao proprietário do bucket. O proprietário do objeto é a Conta da AWS que criou os objetos. Depois, o proprietário do bucket pode delegar essas permissões.

  • O proprietário do bucket pode delegar permissões aos usuários em sua própria conta (consulte Exemplo 3: O proprietário do bucket concede permissões para objetos que não possui). No entanto, a conta do proprietário do bucket não pode delegar permissões a outras Contas da AWS porque a delegação entre contas não é permitida.

Nesse cenário, o proprietário do bucket pode criar um perfil do AWS Identity and Access Management (IAM) com permissão para acessar objetos e, depois, conceder permissão a outra Conta da AWS para assumir o perfil temporariamente, permitindo que ela acesse objetos no bucket.

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 obter mais informações, consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.

Noções básicas de permissões entre contas e do uso de perfis do IAM

As funções do IAM permitem vários cenários para delegar acesso a seus recursos, e o acesso entre contas é um dos cenários principais. Neste exemplo, o proprietário do bucket, a Conta A, usa um perfil do IAM para delegar temporariamente o acesso entre contas a objetos aos usuários em uma outra Conta da AWS, a Conta C. Cada perfil do IAM que você cria tem estas duas políticas anexadas a ela:

  • Uma política de confiança que identifica outra Conta da AWS que pode assumir a função.

  • Uma política de acesso que define quais permissões - por exemplo, s3:GetObject - são permitidas quando alguém assume a função. Para obter uma lista de permissões que você pode especificar em uma política, consulte Ações de políticas para o Amazon S3.

A Conta da AWS identificada na política de confiança concede ao respectivo usuário permissão para assumir a função. O usuário pode então fazer o seguinte para acessar os objetos:

  • Assumir a função e, em resposta, obter credenciais de segurança temporárias.

  • Usando as credenciais de segurança temporárias, acessar os objetos no bucket.

Para obter mais informações sobre funções do IAM, consulte Perfis do IAM no Guia do usuário do IAM.

Veja a seguir um resumo das etapas de demonstração:

Permissões entre contas usando perfis do IAM.
  1. O usuário administrador da Conta A anexa a política do bucket que concede à Conta B uma permissão condicional para fazer upload de objetos.

  2. O administrador da Conta A cria uma função do IAM, estabelecendo a confiança com a Conta C, e assim os usuários dessa conta podem acessar a Conta. A. A política de acesso anexada à função limita o que o usuário na Conta C pode fazer quando acessa a Conta A.

  3. O administrador da Conta B faz upload de um objeto no bucket de propriedade da Conta A, concedendo permissão de controle total ao proprietário do bucket.

  4. O administrador da Conta C cria um usuário e anexa uma política de usuário que permite que o usuário assuma a função.

  5. O usuário na Conta C primeiro assume a função, que retorna as credenciais de segurança temporárias ao usuário. Usando essas credenciais de segurança temporárias, o usuário então acessa os objetos no bucket.

Para este exemplo, você precisará de três contas. A tabela a seguir mostra como nos referimos a essas contas e aos usuários administradores nessas contas. Conforme as diretrizes do IAM (consulte Sobre o uso de um usuário administrador para criar recursos e conceder permissões), não usamos as credenciais do Usuário raiz da conta da AWS nesta demonstração. Em vez disso, você cria um usuário 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 Usuário administrador na conta

1111-1111-1111

Conta A

AccountAadmin

2222-2222-2222

Conta B

AccountBadmin

3333-3333-3333

Conta C

AccountCadmin

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

nota

É recomendado abrir um editor de texto e anotar algumas informações enquanto você passa pelas etapas. Especificamente, você vai precisar dos IDs de conta, IDs de usuários canônicos, URLs de login de usuário do IAM de cada conta para se conectar ao console e nomes de recurso da Amazon (ARNs) dos perfis e usuários do IAM.

  1. Você precisa ter três Contas da AWS, e cada uma delas deve ter um usuário administrador, conforme exibido na tabela da seção anterior.

    1. Cadastre-se para Contas da AWS, se necessário. Nós nos referimos a essas contas como Conta A, Conta B e Conta C.

    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 privilégios 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. Consulte mais informações em Sign in to the AWS Management Console as an IAM user no Guia do usuário do IAM.

    3. Repita a etapa anterior para criar usuários administradores na Conta B e na Conta C.

  2. Para a Conta C, anote o ID de usuário canônico.

    Quando criar uma função do IAM na Conta A, a política de confiança concederá à Conta C a permissão para assumir a função especificando o ID da conta. Você pode localizar as informações da conta da seguinte forma:

    1. Use o ID ou o alias da Conta da AWS, o nome de usuário do IAM e a senha para fazer login no console do Amazon S3.

    2. Selecione o nome de um bucket do Amazon S3 para visualizar os detalhes sobre esse bucket.

    3. Selecione a guia Permissions (Permissões) e selecione Access Control List (Lista de controle de acesso).

    4. Na seção Acesso à sua Conta da AWS, a coluna Conta inclui um identificador longo, como c1daexampleaaf850ea79cf0430f33d72579fd1611c97f7ded193374c0b163b6. Esse é seu ID de usuário canônico.

  3. Ao criar uma política do bucket, você precisará das seguintes informações. Anote estes valores:

    • ID de usuário canônico da Conta A: quando o administrador da Conta A conceder permissão condicional para fazer upload de objeto ao administrador da Conta B, a condição especifica o ID de usuário canônico do usuário da Conta A que deverá ter pleno controle dos objetos.

      nota

      O ID de usuário canônico é o único conceito do Amazon S3. Ele é a versão oculta de 64 caracteres do ID da conta.

    • ARN do usuário para o administrador da Conta B: é possível encontrar o ARN do usuário no console do IAM. Selecione o usuário e veja o respectivo ARN na guia Resumo.

      Na política do bucket, você concede permissão a AccountBadmin para carregar objetos e especifica o usuário com o ARN. Aqui está um exemplo de valor do Nome de recurso da Amazon (ARN):

      arn:aws:iam::AccountB-ID:user/AccountBadmin
  4. Configure a AWS Command Line Interface (CLI) ou o AWS Tools for Windows PowerShell. Salve as credenciais de usuário do administrador da seguinte maneira:

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

    • Se estiver usando o AWS 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.

Etapa 1: Realizar as tarefas da Conta A

Neste exemplo, a Conta A é o proprietário do bucket. Assim, o usuário AccountAadmin na Conta A realizará estas ações:

  • Crie um bucket.

  • Anexará uma política de bucket que conceda ao administrador da Conta B uma permissão para carregar objetos.

  • Criará um perfil do IAM que conceda permissão à Conta C para assumir o perfil para que seja possível acessar os objetos no bucket.

Etapa 1.1: fazer login no AWS Management Console

Usando o URL de login do usuário do IAM da Conta A, primeiro 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 anexar uma política do bucket

No console do Amazon S3, faça o seguinte:

  1. Crie um bucket. Este exercício supõe que o nome do bucket é amzn-s3-demo-bucket1.

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

  2. Anexe a política de bucket a seguir. A política concede ao administrador da Conta B uma permissão condicional para carregar objetos.

    Atualize a política fornecendo seus próprios valores para amzn-s3-demo-bucket1, AccountB-ID e CanonicalUserId-of-AWSaccountA-BucketOwner.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "111", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" }, { "Sid": "112", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "StringNotEquals": { "s3:x-amz-grant-full-control": "id=CanonicalUserId-of-AWSaccountA-BucketOwner" } } } ] }

Etapa 1.3: criar um perfil do IAM para conceder acesso entre contas na à Conta C na Conta A

No console do IAM, crie um perfil do IAM (examplerole) que conceda à Conta C permissão para assumir o perfil do IAM. Você deve manter a conexão como administrador da Conta A porque o perfil deve ser criado na Conta A.

  1. Antes de criar a função, prepare as políticas gerenciadas que definem as permissões necessárias à função. Em uma etapa posterior, você anexará essa política à função.

    1. No painel de navegação à esquerda, escolha Políticas e Criar política.

    2. Próximo a Create Your Own Policy, escolha Select.

    3. Insira access-accountA-bucket no campo Policy Name (Nome da política).

    4. Copie a política de acesso a seguir e cole-a no campo Policy Document (Documento de políticas). A política de acesso concede permissão ao perfil s3:GetObject; assim, quando o usuário da Conta C assume o perfil, ele só pode executar a operação s3:GetObject.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }
    5. Escolha Criar política.

      As novas políticas aparecem na lista de políticas gerenciadas.

  2. No painel de navegação à esquerda, escolha Perfis e Criar novo perfil.

  3. Em Selecionar tipo de função, selecione Função para acesso entre contas e o botão Selecionar ao lado de Fornecer acesso entre as Contas da AWS que você possui.

  4. Insira o ID de conta da Conta C.

    Para esta demonstração, não é necessário exigir que os usuários tenham a autenticação multifator (MFA) para assumir o perfil; portanto, deixe essa opção desmarcada.

  5. Escolha Próxima etapa para definir as permissões que serão associadas à função.

  6. Marque a caixa de seleção ao lado da política access-accountA-bucket que você criou e escolha Próxima etapa.

    A página Revisar será exibida para que você possa confirmar as configurações para a função antes de criá-la. Um item muito importante a observar nesta página é o link que você pode enviar aos usuários que precisem usar essa função. Os usuários que usam o link vão diretamente para a página Trocar perfil com os campos “ID da conta” e “Nome do perfil” já preenchidos. Você também pode ver esse link mais tarde na página Resumo da função de qualquer função entre contas.

  7. Insira examplerole para o nome do perfil e selecione Próxima etapa.

  8. Depois de revisar o perfil, escolha Criar perfil.

    A função examplerole é exibida na lista de funções.

  9. Selecione o nome de perfil examplerole.

  10. Selecione a guia Trust Relationships (Relacionamentos de confiança).

  11. Clique em Mostrar documento de política e verifique se a política de confiança mostrada corresponde à indicada a seguir.

    A política de confiança a seguir estabelece a confiança com a Conta C, permitindo-lhe a ação sts:AssumeRole. Para obter mais informações, consulte AssumeRole na Referência de APIs do AWS Security Token Service.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountC-ID:root" }, "Action": "sts:AssumeRole" } ] }
  12. Anote o nome do recurso da Amazon (ARN) do perfil examplerole que você criou.

    Depois, nas etapas a seguir, você anexará um política de usuário para permitir que um usuário do IAM assuma essa função e identificará a função com o valor de Nome de recurso da Amazon (ARN).

Etapa 2: Fazer as tarefas da Conta B

O exemplo de bucket de propriedade da Conta A precisa de objetos de propriedade de outras contas. Nessa etapa, o administrador da Conta B faz upload de um objeto usando as ferramentas da linha de comando.

  • Usando o comando put-object da AWS CLI, faça upload de um objeto em amzn-s3-demo-bucket1.

    aws s3api put-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --body HappyFace.jpg --grant-full-control id="canonicalUserId-ofTheBucketOwner" --profile AccountBadmin

    Observe o seguinte:

    • O parâmetro --Profile especifica o perfil AccountBadmin; portanto, o objeto é de propriedade da Conta B.

    • O parâmetro grant-full-control concede ao proprietário do bucket permissão de pleno controle sobre o objeto conforme exigido pela política do bucket.

    • O parâmetro --body identifica o arquivo de origem para fazer upload. Por exemplo, se o arquivo estiver na unidade C: de um computador Windows, você especifica c:\HappyFace.jpg.

Etapa 3: realizar as tarefas da Conta C

Nas etapas anteriores, a Conta A já criou um perfil, examplerole, estabelecendo a confiança com a Conta C. Esse perfil permite que os usuários na Conta C acessem a Conta A. Nessa etapa, o administrador da Conta C cria um usuário (Dave) e delega para ele a permissão sts:AssumeRole, recebida da Conta A. Essa abordagem permite que Dave assuma o examplerole e tenha acesso temporário à Conta A. A política de acesso que a Conta A anexou ao perfil limita o que Dave pode fazer ao acessar a Conta A (especificamente, obter objetos no amzn-s3-demo-bucket1).

Etapa 3.1: criar um usuário na Conta C e delegar permissão para assumir examplerole

  1. Usando o URL de login de usuário do IAM para a Conta C, primeiro faça login no AWS Management Console como o usuário AccountCadmin.

  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 (AWS Management Console) no Guia do usuário do IAM.

  3. Anote as credenciais de Dave. Dave precisará dessas credenciais para assumir a função examplerole.

  4. Crie uma política em linha para o usuário do IAM Dave para delegar a ele a permissão sts:AssumeRole no perfil examplerole da conta A.

    1. No painel de navegação à esquerda, escolha Uses (Usuários).

    2. Selecione o nome de usuário Dave.

    3. Na página detalhes do usuário, selecione a guia Permissions (Permissões) e, em seguida, expanda a seção Inline Policies (Políticas em linha).

    4. Escolha clique aqui (ou Create User Policy [Criar política de usuário]).

    5. Escolha Custom Policy e depois Select.

    6. Insira um nome para a política no campo Policy Name (Nome da política).

    7. Cole a seguinte política no campo Policy Document (Documento da política).

      Você deve atualizar a política fornecendo o AccountA-ID.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::AccountA-ID:role/examplerole" } ] }
    8. Selecione Aplicar política.

  5. Salve as credenciais de Dave no arquivo de configuração da AWS CLI adicionando outro perfil, AccountCDave.

    [profile AccountCDave] aws_access_key_id = UserDaveAccessKeyID aws_secret_access_key = UserDaveSecretAccessKey region = us-west-2

Etapa 3.2: assumir o perfil (examplerole) e acessar objetos

Agora Dave pode acessar objetos no bucket de propriedade da Conta A, desta forma:

  • Dave primeiro assume a examplerole usando suas próprias credenciais. Isso retornará credenciais temporárias.

  • Usando as credenciais temporárias, Dave então acessará os objetos no bucket da Conta A.

  1. No prompt de comando, execute o comando assume-role da AWS CLI usando o perfil AccountCDave.

    É necessário atualizar o valor do ARN no comando fornecendo o AccountA-ID em que examplerole foi definido.

    aws sts assume-role --role-arn arn:aws:iam::AccountA-ID:role/examplerole --profile AccountCDave --role-session-name test

    Em resposta, o AWS Security Token Service (AWS STS) retorna credenciais de segurança temporárias (ID da chave de acesso, chave de acesso secreta e um token de sessão).

  2. Salve as credenciais de segurança temporárias no arquivo de configuração da AWS CLI no perfil TempCred.

    [profile TempCred] aws_access_key_id = temp-access-key-ID aws_secret_access_key = temp-secret-access-key aws_session_token = session-token region = us-west-2
  3. No prompt de comando, execute o comando da AWS CLI a seguir para acessar objetos usando as credenciais temporárias. Por exemplo, o comando especifica a API do objeto head para recuperar os metadados do objeto para o objeto HappyFace.jpg.

    aws s3api get-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg SaveFileAs.jpg --profile TempCred

    Como a política de acesso anexada a examplerole permite as ações, o Amazon S3 processa a solicitação. Você pode tentar qualquer outra ação em qualquer outro objeto no bucket.

    Se tentar qualquer outra ação, como get-object-acl, você terá a permissão negada porque o perfil não tem permissão para realizar essa ação.

    aws s3api get-object-acl --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --profile TempCred

    Usamos o usuário Dave para assumir a função e acessar o objeto usando credenciais temporárias. Também poderia ser um aplicativo na Conta C que acessa objetos em amzn-s3-demo-bucket1. O aplicativo pode obter credenciais de segurança temporárias, e a Conta C pode delegar permissão de aplicativo para assumir examplerole.

Etapa 4: limpar

  1. Depois de terminar os testes, você pode fazer o seguinte para concluir 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 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 examplerole que você criou na Conta A. Consulte instruções detalhadas em Exclusão de um usuário do IAM no Guia do usuário do IAM.

      • No console do IAM, remova o usuário AccountAadmin.

  2. Faça login no console do IAM usando as credenciais da Conta B. Exclua o usuário AccountBadmin.

  3. Faça login no console do IAM usando as credenciais da Conta C. Exclua AccountCadmin e o usuário Dave.

Recursos relacionados

Consulte mais informações relacionadas a essa demonstração nos seguintes recursos do Guia do usuário do IAM: