Como posso adicionar a ACL de controle total do proprietário do bucket aos meus objetos no Amazon S3?

8 minuto de leitura
0

Estou tentando adicionar a lista de controle de acesso (ACL) de controle total do proprietário do bucket aos objetos existentes no Amazon Simple Storage Service (Amazon S3). Como posso fazer isso?

Breve descrição

Por padrão, em um cenário entre contas em que outras contas da AWS fazem o carregamento de objetos para o bucket do Amazon S3, os objetos continuam pertencendo à conta de upload. Quando a ACL de controle total do proprietário do bucket é adicionada, o proprietário do bucket tem controle total sobre quaisquer novos objetos escritos por outras contas.

Se o gravador de objetos não especificar permissões para a conta de destino em um nível de ACL de objeto, a conta de destino só poderá excluir objetos.

Quando a ACL de controle total do proprietário do bucket é adicionada, o proprietário do bucket tem controle total sobre quaisquer novos objetos gravados por outras contas da AWS. Essa ACL também será necessária se o bucket de destino tiver habilitado a Propriedade do objeto do S3. Quando a Propriedade do objeto do S3 está habilitada, ela atualiza o proprietário dos novos objetos na conta de destino.

Importante: conceder acesso entre contas por meio de ACLs de bucket e objeto não funciona para buckets que têm a Propriedade de objeto do S3 definida como Imposta pelo proprietário do bucket. Na maioria dos casos, as ACLs não precisam conceder permissões a objetos e buckets. Em vez disso, use as políticas do AWS Identity Access and Management (IAM) e as políticas de bucket do S3 para conceder permissões a objetos e buckets.

Para objetos existentes, o proprietário do objeto pode conceder ao proprietário do bucket controle total do objeto, atualizando a ACL do objeto. Ao gravar novos objetos, a ACL de controle total do proprietário do bucket pode ser especificada durante uma operação PUT ou COPY.

Para que um usuário na Conta A conceda a ACL predefinida de controle total do proprietário do bucket a objetos na Conta B, é necessário conceder as seguintes permissões:

  • Sua função do IAM ou o usuário na Conta A deve conceder acesso ao bucket na Conta B
  • Sua política de bucket na Conta B deve conceder acesso à função do IAM ou ao usuário na Conta A

Você pode conceder acesso de controle total do proprietário do bucket aos objetos das seguintes formas:

  • ACLs predefinidas
  • Operações em Lote do S3 (para operações em lote de grande escala)

Observação: certifique-se de revisar sua política de endpoint da VPC ao adicionar a ACL predefinida de controle total do proprietário do bucket aos objetos do S3.

Resolução

Sua função do IAM ou usuário na Conta A deve conceder acesso ao bucket na Conta B

Observação: se o usuário ou a função do IAM precisar atualizar a ACL do objeto durante o carregamento, o usuário deverá ter permissões para s3:PutObjectAcl em sua política do IAM.

Crie uma função do IAM na Conta A. Conceda permissões de função/usuário para executar PutObjectACL em objetos na Conta B.

O exemplo de política a seguir concede acesso à função do IAM na Conta A para executar as ações GetObject, PutObject e PutObjectAcl em objetos na Conta B:

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

Sua política de bucket na Conta B deve conceder acesso ao usuário ou função do IAM na Conta A

As políticas de bucket podem variar de acordo com o requisito de ACL predefinido durante o carregamento de objetos. Por exemplo, essas duas políticas de bucket concedem acesso ao usuário ou função do IAM na Conta A de maneiras diferentes:

  • Política 1: permite acesso ao usuário ou função do IAM na Conta A sem exigir que as operações PUT do Amazon S3 incluam ACL predefinida de controle total do proprietário do bucket.
  • Política 2: faz com que todas as operações PUT do Amazon S3 incluam a ACL predefinida de controle total do proprietário do bucket.

Política 1: permite acesso ao usuário ou função do IAM na Conta A sem exigir que as operações PUT do Amazon S3 incluam uma ACL predefinida de controle total do proprietário do bucket

Para permitir o acesso à função do IAM na Conta A sem exigir uma ACL, crie uma política de bucket na Conta B (onde os objetos são carregados). Essa política de bucket deve conceder acesso à função do IAM ou ao usuário na Conta A. A política de bucket a seguir permite que a função na Conta A execute as ações GetObject, PutObject e PutObjectAcl nos objetos na Conta B:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountA:role/AccountARole"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountB-Bucket/*"
            ]
        }
    ]
}

Política 2: aplica todas as operações PUT do Amazon S3 para incluir a ACL predefinida de controle total do proprietário do bucket

A política de bucket a seguir especifica que um usuário ou função na Conta A pode fazer o carregamento de objetos para um bucket na Conta B (onde os objetos devem ser carregados). Os carregamentos só podem ser realizados quando a ACL do objeto estiver definida como “bucket de controle total do proprietário”. Por exemplo:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Only allow writes to my bucket with bucket owner full control",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AccountA:role/AccountARole"
                ]
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

Observação: quando a política de bucket anterior for aplicada, o usuário deverá incluir a ACL predefinida de controle total do proprietário do bucket durante a operação PutObject. Caso contrário, a operação vai falhar, resultando em um erro de acesso negado. Para obter informações sobre como o Amazon S3 habilita a propriedade de objetos de outras contas da AWS, consulte Controle da propriedade de objetos carregados usando a Propriedade de Objetos do S3.

Fornecimento de acesso de controle total do proprietário do bucket

ACLs predefinidas

Para conceder ACL predefinidas de controle total do proprietário do bucket durante o carregamento de um objeto, execute o comando put-object da Conta A (conta do proprietário do objeto):

aws s3api put-object --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Para conceder ACL predefinidas de controle total do proprietário do bucket durante uma operação de cópia, execute o comando copy-object da Conta A (conta do proprietário do objeto):

aws s3api copy-object --copy-source accountA-bucket/example.txt --key example.txt --bucket accountB-bucket --acl bucket-owner-full-control

Ou você também pode executar o comando cp da Conta A para conceder a ACL predefinida do controle total do proprietário do bucket:

aws s3 cp s3://accountA-bucket/test.txt s3://accountB-bucket/test2.txt --acl bucket-owner-full-control

Para uma operação de cópia de vários objetos, o proprietário do objeto (Conta A) pode executar o seguinte comando:

aws s3 cp s3://accountA-bucket/ s3://accountB-bucket/ --acl bucket-owner-full-control --recursive

Se o objeto existir em um bucket em outra conta (Conta B), o proprietário do objeto poderá conceder acesso ao proprietário do bucket com este comando:

aws s3api put-object-acl --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Operações em Lote do S3

Para adicionar ACL predefinida de controle total do proprietário do bucket em um grande número de objetos do Amazon S3, use as Operações em Lote do S3. As Operações em Lote do S3 podem executar uma única operação em uma lista de objetos que você especificar. Você pode até usar as Operações em Lote do S3 para definir ACLs em um grande número de objetos. As Operações em Lote do S3 oferecem suporte a ACLs personalizadas e predefinidas que o Amazon S3 fornece com um conjunto predefinido de permissões de acesso.

Observação: a operação Substituir lista de controle de acesso (ACL) substitui as ACLs do Amazon S3 para cada objeto listado no manifesto.

Consideração adicional

Acesso permitido por uma política de endpoint da VPC

Se uma função do IAM fizer o carregamento de objetos para o S3 usando uma instância roteada por meio de um endpoint de Virtual Private Cloud (VPC), verifique a política de endpoint da VPC. Por exemplo, se um objeto for carregado no S3 usando uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em uma VPC, a política de endpoint da VPC deverá ser revisada. Certifique-se de que sua política de endpoint concede acesso à ação PutObjectAcl desta forma:

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos