Exemplos de políticas de bucket usando chaves de condição
Você pode usar a linguagem de políticas de acesso para especificar condições ao conceder permissões. É possível usar o elemento Condition
opcional ou o bloco Condition
para especificar condições referentes a quando uma política está em vigor.
Para obter políticas que usam chaves de condição do Amazon S3 para operações de objeto e bucket, consulte os exemplos a seguir. Para obter mais informações sobre essas chaves de condição, consulte Chaves de condição de política para o Amazon S3. Consulte uma lista completa de ações, chaves de condição e recursos do Amazon S3 que você pode especificar em políticas em Actions, resources, and condition keys for Amazon S3 na Referência de autorização do serviço.
Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte Permissões obrigatórias para operações de API do Amazon S3.
Exemplos: chaves de condição do Amazon S3 para operações de objeto
Os exemplos a seguir mostram como usar chaves de condição específicas do Amazon S3 para operações de objeto. Consulte uma lista completa de ações, chaves de condição e recursos do Amazon S3 que você pode especificar em políticas em Actions, resources, and condition keys for Amazon S3 na Referência de autorização do serviço.
Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte Permissões obrigatórias para operações de API do Amazon S3.
Várias das políticas de exemplo mostram como você pode usar chaves de condições com operações de objeto PUT. As operações de objeto PUT permitem cabeçalhos específicos baseados em lista de controle de acesso (ACL) usados para conceder permissões baseadas em ACL. Usando essas chaves de condição, é possível definir uma condição para exigir permissões de acesso específicas quando o usuário faz upload de um objeto. Você também pode conceder permissões baseadas em ACL com a operação PutoObjectAcl. Para obter mais informações, consulte PutObjectAcl na Referência da API do Amazon S3 Amazon Simple Storage Service. Para obter mais informações sobre ACLs, consulte Visão geral da lista de controle de acesso (ACL).
Tópicos
- Exemplo 1: conceder a permissão s3:PutObject que exige que os objetos sejam armazenados usando criptografia do lado do servidor
- Exemplo 2: conceder a permissão s3:PutObject para copiar objetos com uma restrição na origem da cópia
- Exemplo 3: conceder acesso a uma versão específica de um objeto
- Exemplo 4: conceder permissões com base em tags de objetos
- Exemplo 5: restringir o acesso pelo ID da Conta da AWS do proprietário do bucket
- Exemplo 6: exigir uma versão mínima do TLS
- Exemplo 7: excluir determinadas entidades principais de uma declaração Deny
Exemplo 1: conceder a permissão s3:PutObject
que exige que os objetos sejam armazenados usando criptografia do lado do servidor
Vamos supor que a conta A é proprietária de um bucket. O administrador da conta deseja conceder a Jane, uma usuária na conta A, permissão para fazer upload de objetos com a condição de que Jane sempre solicite a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3). O administrador da conta A pode especificar esse requisito usando a chave de condição s3:x-amz-server-side-encryption
, conforme exibido. O par de chave-valor no bloco Condition
a seguir especifica a chave de condição s3:x-amz-server-side-encryption
e SSE-S3 (AES256
) como o tipo de criptografia:
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
Ao testar essa permissão por meio da AWS CLI, você deve adicionar a criptografia necessária usando o parâmetro --server-side-encryption
, conforme mostrado no exemplo a seguir. Para usar esse exemplo de comando, substitua os
por suas próprias informações. user input
placeholders
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyHappyFace.jpg
--bodyc:\HappyFace.jpg
--server-side-encryption "AES256
" --profileAccountAadmin
Exemplo 2: conceder a permissão s3:PutObject
para copiar objetos com uma restrição na origem da cópia
Em uma solicitação de objeto PUT
, quando se especifica o objeto de origem, a solicitação é uma operação de cópia (consulte CopyObject). De acordo com isso, o proprietário do bucket pode conceder ao usuário permissão para copiar objetos com restrições na origem; por exemplo:
-
Permite copiar objetos somente do bucket de origem especificado (por exemplo,
).amzn-s3-demo-source-bucket
-
Permite copiar objetos do bucket de origem especificado e somente os objetos cujo nome de chave comece com um prefixo específico, como
(por exemplo,public/
).amzn-s3-demo-source-bucket
/public/*
-
Permite copiar somente um objeto específico do bucket de origem (por exemplo,
).amzn-s3-demo-source-bucket
/example.jpg
A política de bucket a seguir concede a um usuário (
) a permissão Dave
s3:PutObject
. Essa política permite que ele copie objetos apenas com a condição de que a solicitação inclua o cabeçalho s3:x-amz-copy-source
e o valor do cabeçalho especifique o prefixo de nome de chave /
. Para usar esse exemplo de política, substitua os amzn-s3-demo-source-bucket
/public/*
por suas próprias informações.user
input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Dave
" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::
amzn-s3-demo-source-bucket
123456789012
:user/Dave
" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
amzn-s3-demo-source-bucket
/public/*
" } } } ] }
Testar a política com a AWS CLI
Você pode testar a permissão usando o comando da AWS CLI copy-object
. Você especifica a origem adicionando o parâmetro --copy-source
; o prefixo de nome de chave que deve coincidir com o prefixo permitido na política. Você precisa inserir as credenciais do usuário de Dave usando o parâmetro --profile
. Consulte mais informações sobre como configurar a AWS CLI em Developing with Amazon S3 using the AWS CLI na Referência de API do Amazon S3.
aws s3api copy-object --bucket
--key
amzn-s3-demo-source-bucket
HappyFace.jpg
--copy-source
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
--profileAccountADave
Conceder permissão para copiar somente um objeto específico
A política anterior usa a condição StringNotLike
. Para conceder a permissão para copiar apenas um objeto específico, é necessário alterar a condição de StringNotLike
para StringNotEquals
e, depois, especificar a chave de objeto exata, conforme exibido no exemplo a seguir. Para usar esse exemplo de comando, substitua os
por suas próprias informações.user input
placeholders
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
" } }
Exemplo 3: conceder acesso a uma versão específica de um objeto
Vamos supor que a conta A seja proprietária de um bucket habilitado para versionamento. O bucket tem várias versões do objeto
. O administrador da conta A agora deseja conceder ao usuário HappyFace.jpg
permissão para receber apenas uma versão específica do objeto. O administrador da conta pode fazer isso concedendo ao usuário Dave
a permissão Dave
s3:GetObjectVersion
de modo condicional, conforme mostrado no exemplo a seguir. O par de chave-valor no bloco Condition
especifica a chave de condição s3:VersionId
. Neste caso, para recuperar o objeto do bucket específico habilitado para versionamento,
precisa conhecer o ID de versão do objeto exato. Para usar esse exemplo de política, substitua os Dave
por suas próprias informações.user input
placeholders
Para obter mais informações, consulte GetObject na Referência da API do Amazon Simple Storage Service.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Dave
" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/HappyFace.jpg
" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave
" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/HappyFace.jpg
", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e
" } } } ] }
Testar a política com a AWS CLI
É possível testar as permissões nessa política usando o comando get-object
da AWS CLI com o parâmetro --version-id
para identificar a versão específica do objeto a ser recuperada. O comando recupera a versão especificada do objeto e a salva no arquivo
.OutputFile.jpg
aws s3api get-object --bucket
--key
amzn-s3-demo-bucket
HappyFace.jpg
OutputFile.jpg
--version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e
--profileAccountADave
Exemplo 4: conceder permissões com base em tags de objetos
Para ver exemplos de como usar chaves de condição de marcação de objetos com operações do Amazon S3, consulte Marcação e políticas de controle de acesso.
Exemplo 5: restringir o acesso pelo ID da Conta da AWS do proprietário do bucket
É possível usar a chave de condição aws:ResourceAccount
ou s3:ResourceAccount
para gravar políticas de endpoint da nuvem privada virtual (VPC) ou do IAM que restrinjam o acesso de usuários, perfis ou aplicações aos buckets do Amazon S3 pertencentes a um ID de Conta da AWS específico. É possível usar essas chaves de condição para restringir o acesso dos clientes dentro da VPC aos buckets que você não possui.
No entanto, saiba que os serviços da AWS dependem do acesso a buckets gerenciados pela AWS. Portanto, usar a chave aws:ResourceAccount
ou s3:ResourceAccount
em sua política do IAM também pode afetar o acesso a esses recursos. Para obter mais informações, consulte os seguintes recursos do :
-
Restringir o acesso a buckets em uma Conta da AWS especificada no Guia do usuário do AWS PrivateLink
-
Restringir o acesso aos buckets que o Amazon ECR usa no Guia do Amazon ECR
-
Fornecer acesso necessário ao Systems Manager para buckets do Amazon S3 gerenciados pela AWS no Guia do AWS Systems Manager
Para ter mais informações sobre as chaves de condição aws:ResourceAccount
e s3:ResourceAccount
e exemplos que mostram como usá-las, consulte Limit access to Amazon S3 buckets owned by specific Contas da AWS
Exemplo 6: exigir uma versão mínima do TLS
É possível usar a chave de condição s3:TlsVersion
para gravar políticas do IAM, de endpoint de nuvem privada virtual (VPCE) ou de bucket que restrinjam o acesso de usuários ou de aplicações aos buckets do Amazon S3 com base na versão de TLS usada pelo cliente. Você pode usar essa chave de condição para gravar políticas que exigem uma versão mínima do TLS.
O exemplo de política de bucket a seguir nega solicitações PutObject
de clientes que tenham uma versão de TLS inferior a 1.2; por exemplo, 1.1 ou 1.0. Para usar esse exemplo de política, substitua os
por suas próprias informações.user input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }
amzn-s3-demo-bucket1
O exemplo de política de bucket a seguir permite solicitações PutObject
de clientes que têm uma versão de TLS posterior a 1.1; por exemplo, 1.2, 1.3 ou posterior:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }
amzn-s3-demo-bucket1
Exemplo 7: excluir determinadas entidades principais de uma declaração Deny
A política de bucket a seguir nega acesso s3:GetObject
ao
, exceto às entidades principais com o número de conta amzn-s3-demo-bucket
. Para usar esse exemplo de política, substitua os 123456789012
por suas próprias informações.user input
placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "" ] } } } ] }
123456789012
Exemplos: chaves de condição do Amazon S3 para operações de bucket
As políticas de exemplo a seguir mostram como usar chaves de condição específicas do Amazon S3 para operações de bucket.
Tópicos
Exemplo 1: conceder a permissão s3:GetObject
com uma condição em um endereço IP
Será possível conceder a usuários autenticados permissão para usar a ação s3:GetObject
, se a solicitação for proveniente de um intervalo específico de endereços IP (por exemplo,
), a menos que o endereço IP seja um dos que você queira excluir (por exemplo, 192.0.2.*
). No bloco 192.0.2.188
Condition
, IpAddress
e NotIpAddress
são condições, e cada uma recebe um par de chave-valor para avaliação. Os dois pares de chave-valor neste exemplo usam a chave aws:SourceIp
em toda a AWS. Para usar esse exemplo de política, substitua os
por suas próprias informações.user input placeholders
nota
Os valores de chave IPAddress
e NotIpAddress
especificados no bloco Condition
usam notação CIDR conforme descrito na RFC 4632. Para obter mais informações,consulte http://www.rfc-editor.org/rfc/rfc4632.txt
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "
amzn-s3-demo-bucket
192.0.2.0/24
" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32
" } } } ] }
Você também pode usar outras chaves de condição de toda a AWS nas políticas do Amazon S3. Por exemplo, você pode especificar o aws:SourceVpce
e as chaves de condição aws:SourceVpc
em políticas de bucket para VPC endpoints. Para obter exemplos específicos, consulte Controlar o acesso a partir de VPC endpoints com políticas de bucket.
nota
Em relação a algumas chaves de condição globais da AWS, somente certos tipos de recurso são compatíveis. Portanto, confira se o Amazon S3 é compatível com a chave de condição global e o tipo de recurso que você deseja usar ou se você precisará usar uma chave de condição específica do Amazon S3. Consulte uma lista completa de chaves de condição e tipos de recurso compatíveis com o Amazon S3 em Actions, resources, and condition keys for Amazon S3 na Referência de autorização do serviço.
Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte Permissões obrigatórias para operações de API do Amazon S3.
Exemplo 2: obter uma lista de objetos em um bucket com um prefixo específico
É possível usar a chave de condição s3:prefix
para limitar a resposta da operação de API ListObjectsV2 a nomes de chave com um prefixo específico. Se o bucket pertencer a você, será possível usar essa chave de condição para impedir que um usuário liste o conteúdo de um prefixo específico no bucket. A chave de condição s3:prefix
será útil se os objetos no bucket forem organizados por prefixos de nome de chave.
O console do Amazon S3 usa prefixos de nomes de chaves para mostrar um conceito de pasta. Somente o console suporta o conceito de pastas; a API do Amazon S3 suporta somente buckets e objetos. Por exemplo, se você tiver dois objetos com nomes de chave
e public/object1.jpg
, o console mostrará os objetos na pasta public/object2.jpg
. Na API do Amazon S3, esses são objetos com prefixos, não objetos em pastas. Para obter mais informações sobre como usar prefixos e delimitadores para filtrar permissões de acesso, consulte Controlar o acesso a um bucket com políticas de usuário. public
No caso a seguir, o proprietário do bucket e a conta principal à qual o usuário pertence são os mesmos. Assim, o proprietário do bucket pode usar uma política de bucket ou uma política de usuário para conceder acesso. Para ter mais informações sobre outras chaves de condição que você pode usar para chamar a operação de API ListObjectsV2
, consulte ListObjectsV2.
nota
Se o bucket tiver o versionamento habilitado, para listar os objetos no bucket, você deverá conceder a permissão s3:ListBucketVersions
nas políticas a seguir, em vez da permissão s3:ListBucket
. A permissão s3:ListBucketVersions
também comporta a chave de condição s3:prefix
.
Política de usuário
A política de usuário a seguir concede a permissão s3:ListBucket
(consulte ListObjectsV2) com uma declaração Condition
que exige que o usuário especifique um prefixo na solicitação com um valor de
. Para usar esse exemplo de política, substitua os projects
por suas próprias informações.user input placeholders
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::
", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
A declaração Condition
determina que o usuário liste apenas as chaves de objeto com o prefixo
. A declaração projects
Deny
explícita adicionada nega ao usuário a listagem de chaves com qualquer outro prefixo, independentemente de outras permissões que ele possa ter. Por exemplo, é possível que o usuário receba a permissão para listar chaves de objeto sem nenhuma restrição, tanto por meio de atualizações na política de usuário anterior quanto por meio de uma política de bucket. Como as declarações Deny
explícitas sempre substituem as declarações Allow
, se o usuário tentar indicar chaves que não tenham o prefixo
, a solicitação será negada. projects
Política de bucket
Se você adicionar o elemento Principal
à política de usuário acima, identificando o usuário, terá uma política de bucket conforme exibido no exemplo a seguir. Para usar esse exemplo de política, substitua os
por suas próprias informações.user input
placeholders
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
Testar a política com a AWS CLI
Você pode testar a política usando o seguinte comando list-object
da AWS CLI. No comando, você fornece as credenciais do usuário usando o parâmetro --profile
. Consulte mais informações sobre como configurar e usar a AWS CLI em Developing with Amazon S3 using the AWS CLI na Referência de API do Amazon S3.
aws s3api list-objects --bucket
--prefix
amzn-s3-demo-bucket
projects
--profileAccountA
Exemplo 3: definir o número máximo de chaves
É possível usar a chave de condição s3:max-keys
para definir o número máximo de chaves que um solicitante pode exibir em uma solicitação ListObjectsV2 ou ListObjectVersions. Por padrão, essas operações de API exibem até mil chaves. Para obter uma lista de operadores de condição numérica que você pode usar com s3:max-keys
e exemplos associados, consulte Operadores de condição numérica no Guia do usuário do IAM.