Verificar a propriedade do bucket com a condição de proprietário do bucket - Amazon Simple Storage Service

Verificar a propriedade do bucket com a condição de proprietário do bucket

A condição de proprietário do bucket do Amazon S3 garante que os buckets que você usa em suas operações do S3 pertençam às Contas da AWS que você espera.

A maioria das operações do S3 lê ou grava em buckets específicos do S3. Essas operações incluem fazer upload, cópia e download de objetos, recuperar ou modificar as configurações de bucket e recuperar ou modificar as configurações de objeto. Ao executar essas operações, você especifica o bucket que deseja usar, incluindo seu nome com a solicitação. Por exemplo, para recuperar um objeto do S3, você faz uma solicitação que especifica o nome de um bucket e a chave de objeto a ser recuperada desse bucket.

Como o Amazon S3 identifica buckets com base em seus nomes, uma aplicação que usa um nome de bucket incorreto em uma solicitação pode executar operações inadvertidamente em um bucket diferente do esperado. Para ajudar a evitar interações não intencionais de bucket em situações como essa, você pode usar a condição do proprietário do bucket. A condição de proprietário do bucket permite que você verifique se o bucket de destino pertence à Conta da AWS esperada, fornecendo uma camada adicional de garantia de que suas operações do S3 estão tendo os efeitos que você pretende.

Quando usar a condição do proprietário do bucket

Recomendamos usar a condição de proprietário do bucket sempre que você executar uma operação compatível do S3 e conhecer o ID da conta do proprietário do bucket esperado. A condição do proprietário do bucket está disponível para todas as operações de objeto do S3 e para a maioria das operações de bucket do S3. Para obter uma lista de operações do S3 que não oferecem suporte à condição de proprietário do bucket, consulte Restrições e limitações.

Para ver o benefício de usar a condição de proprietário do bucket, considere o seguinte cenário envolvendo a cliente da AWS, Bea:

  1. Bea desenvolve uma aplicação que usa o Amazon S3. Durante o desenvolvimento, Bea usa sua Conta da AWS somente para testes para criar um bucket chamado bea-data-test e configura sua aplicação para fazer solicitações a bea-data-test.

  2. Bea implanta sua aplicação, mas esquece de reconfigurá-la para usar um bucket em sua Conta da AWS de produção.

  3. Na produção, a aplicação de Bea faz solicitações para bea-data-test, que são bem-sucedidas. Isso resulta na gravação de dados de produção no bucket na conta de teste da Bea.

Bea pode ajudar a evitar situações como esta usando a condição de proprietário do bucket. Com a condição de proprietário do bucket, Bea pode incluir o ID da Conta da AWS do proprietário do bucket esperado em suas solicitações. O Amazon S3, então, verifica o ID da conta do proprietário do bucket antes de processar cada solicitação. Se o proprietário real do bucket não corresponder ao proprietário do bucket esperado, a solicitação falhará.

Se Bea usar a condição de proprietário do bucket, o cenário descrito anteriormente não resultará na gravação inadvertida da aplicação de Bea em um bucket de teste. Em vez disso, as solicitações que a aplicação dela fizer na etapa 3 falharão e apresentarão uma mensagem de erro de Access Denied. Ao usar a condição de proprietária do bucket, Bea ajuda a eliminar o risco de interagir acidentalmente com buckets na Conta da AWS errada.

Verificar um proprietário do bucket

Para usar a condição de proprietário do bucket, você inclui um parâmetro com sua solicitação que especifica o proprietário do bucket esperado. A maioria das operações do S3 envolve apenas um único bucket e requer apenas esse parâmetro único para usar a condição de proprietário do bucket. Para operações CopyObject, esse primeiro parâmetro especifica o proprietário esperado do bucket de destino e você inclui um segundo parâmetro para especificar o proprietário esperado do bucket de origem.

Quando você faz uma solicitação que inclui um parâmetro de condição do proprietário do bucket, o S3 verifica o ID da conta do proprietário do bucket em relação ao parâmetro especificado antes de processar a solicitação. Se o parâmetro corresponder ao ID da conta do proprietário do bucket, o S3 processará a solicitação. Se o parâmetro não corresponder ao ID da conta do proprietário do bucket, a solicitação falhará e apresentará uma mensagem de erro de Access Denied.

Você pode usar a condição de proprietário do bucket com a AWS Command Line Interface (AWS CLI), AWS SDKs e APIs REST do Amazon S3. Ao usar a condição de proprietário do bucket com a AWS CLI e as APIs REST do Amazon S3, utilize os seguintes nomes de parâmetros.

Método de acesso Parâmetro para operações sem cópia Copiar parâmetro de origem da operação Copiar parâmetro de destino da operação
AWS CLI --expected-bucket-owner --expected-source-bucket-owner --expected-bucket-owner
APIs REST do Amazon S3 x-amz-expected-bucket-ownerCabeçalho x-amz-source-expected-bucket-ownerCabeçalho x-amz-expected-bucket-ownerCabeçalho

Os nomes de parâmetros necessários para usar a condição de proprietário do bucket com os AWS SDKs variam dependendo da linguagem. Para determinar os parâmetros necessários, consulte a documentação do SDK para o idioma desejado. Você pode encontrar a documentação do SDK em Ferramentas para criar na AWS.

Exemplos

Os exemplos a seguir mostram como você pode implementar a condição de proprietário do bucket no Amazon S3 usando a AWS CLI ou o AWS SDK for Java 2.x.

Exemplo: fazer upload de um objeto

O exemplo a seguir carrega um objeto para o bucket do S3 DOC-EXAMPLE-BUCKET1 usando a condição de proprietário do bucket para garantir que DOC-EXAMPLE-BUCKET1 seja de propriedade da Conta da AWS 111122223333.

AWS CLI
aws s3api put-object \ --bucket DOC-EXAMPLE-BUCKET1 --key exampleobject --body example_file.txt \ --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void putObjectExample() { S3Client s3Client = S3Client.create();; PutObjectRequest request = PutObjectRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .key("exampleobject") .expectedBucketOwner("111122223333") .build(); Path path = Paths.get("example_file.txt"); s3Client.putObject(request, path); }

Exemplo: copiar um objeto

O exemplo a seguir copia o objeto object1 do bucket do S3 DOC-EXAMPLE-BUCKET1 para o bucket do S3 DOC-EXAMPLE-BUCKET2. Ele usa a condição de proprietário do bucket para garantir que os buckets sejam de propriedade das contas esperadas de acordo com a tabela a seguir.

Bucket Proprietário esperado
DOC-EXAMPLE-BUCKET1 111122223333
DOC-EXAMPLE-BUCKET2 444455556666
AWS CLI
aws s3api copy-object --copy-source DOC-EXAMPLE-BUCKET1/object1 \ --bucket DOC-EXAMPLE-BUCKET2 --key object1copy \ --expected-source-bucket-owner 111122223333 --expected-bucket-owner 444455556666
AWS SDK for Java 2.x
public void copyObjectExample() { S3Client s3Client = S3Client.create(); CopyObjectRequest request = CopyObjectRequest.builder() .copySource("DOC-EXAMPLE-BUCKET1/object1") .destinationBucket("DOC-EXAMPLE-BUCKET2") .destinationKey("object1copy") .expectedSourceBucketOwner("111122223333") .expectedBucketOwner("444455556666") .build(); s3Client.copyObject(request); }

Exemplo: recuperar uma política de bucket

O exemplo a seguir recupera a política de acesso para o bucket do S3 DOC-EXAMPLE-BUCKET1 usando a condição de proprietário do bucket para garantir que DOC-EXAMPLE-BUCKET1 seja de propriedade da Conta da AWS 111122223333.

AWS CLI
aws s3api get-bucket-policy --bucket DOC-EXAMPLE-BUCKET1 --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void getBucketPolicyExample() { S3Client s3Client = S3Client.create(); GetBucketPolicyRequest request = GetBucketPolicyRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .expectedBucketOwner("111122223333") .build(); try { GetBucketPolicyResponse response = s3Client.getBucketPolicy(request); } catch (S3Exception e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } }

Restrições e limitações

A condição de proprietário do bucket do Amazon S3 tem as seguintes restrições e limitações:

  • O valor do parâmetro de condição do proprietário do bucket deve ser um ID de Conta da AWS (valor numérico de 12 dígitos). Não há compatibilidade com os principais de serviço.

  • A condição do proprietário do bucket não está disponível para CreateBucket, ListBuckets ou qualquer uma das operações incluídas no AWS S3 Control. O Amazon S3 ignora todos os parâmetros de condição do proprietário do bucket incluídos nas solicitações para essas operações.

  • A condição do proprietário do bucket verifica apenas se a conta especificada no parâmetro de verificação é proprietária do bucket. A condição do proprietário do bucket não verifica a configuração do bucket. Também não garante que a configuração do bucket atenda a quaisquer condições específicas ou corresponda a qualquer estado passado.