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. Você pode usar o elemento Condition
opcional ou o bloco Condition
para especificar condições para 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.
Exemplos: chaves de condição do Amazon S3 para operações de objeto
Esta seção fornece exemplos que mostram como você pode 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.
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, o proprietário do bucket pode 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 os objetos 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 1: conceder a permissão s3:PutObject que exige os objetos 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, a permissão para fazer upload de objetos com a condição de que Jane sempre solicite criptografia no lado do servidor, de modo que o Amazon S3 salve objetos criptografados. O administrador da conta A pode fazer isso usando a chave de condição s3:x-amz-server-side-encryption
, conforme exibido. O par de chave-valor no bloco Condition
especifica a chave s3:x-amz-server-side-encryption
.
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
Ao testar a permissão usando a AWS CLI, adicione o parâmetro obrigatório usando o parâmetro --server-side-encryption
.
aws s3api put-object --bucket example1bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountBadmin
Exemplo 2: conceder a permissão s3:PutObject para copiar objetos com uma restrição na origem da cópia
Na solicitação PUT objeto, quando você especifica o objeto de origem, isso é uma operação de cópia (consulte PUT objeto - Copiar). 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 a cópia de objetos somente do bucket
sourcebucket
. -
Permite copiar objetos do bucket de origem e somente os objetos cujo prefixo de nome de chave começa com public/ f (por exemplo, sourcebucket/public/*).
-
Permite copiar apenas um objeto específico do bucket de origem (por exemplo, sourcebucket/example.jpg).
A política de bucket a seguir concede a permissão s3:PutObject
ao usuário (Dave). Permite copiar apenas objetos com uma 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 /awsexamplebucket1/public/*
.
{ "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:::awsexamplebucket1
/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/folder", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1
/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "awsexamplebucket1
/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
. Para obter mais informações sobre a configuração da AWS CLI, consulte Desenvolvimento com o Amazon S3 usando a AWS CLI.
aws s3api copy-object --bucket
awsexamplebucket1
--key HappyFace.jpg --copy-sourceexamplebucket
/public/PublicHappyFace1.jpg --profile AccountADave
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 em específico, altere a condição de StringNotLike
para StringNotEquals
e, em seguida, especifique a chave de objeto exata, conforme exibido.
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "
awsexamplebucket1
/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 HappyFace.jpg
. O administrador da conta deseja conceder agora ao seu usuário Dave permissão para obter apenas uma versão específica do objeto. O administrador da conta pode fazer isso concedendo a Dave a permissão condicional s3:GetObjectVersion
, conforme mostrado abaixo. O par de chave-valor no bloco Condition
especifica a chave de condição s3:VersionId
. Neste caso, Dave precisa saber o ID de versão do objeto exato para recuperar o objeto.
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:::examplebucketversionenabled
/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled
/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e
" } } } ] }
Testar a política com a AWS CLI
Você pode testar as permissões usando o comando da AWS CLI get-object
com o parâmetro --version-id
que identifica a versão específica do objeto. O comando recupera o objeto e o salva no arquivo OutputFile.jpg
.
aws s3api get-object --bucket
examplebucketversionenabled
--key HappyFace.jpg OutputFile.jpg --version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e
--profile AccountADave
Exemplo 4: conceder permissões com base em tags de objetos
Para obter exemplos sobre como usar chaves de condição de tags 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 aws:ResourceAccount
ou s3:ResourceAccount
para criar políticas do IAM ou do endpoint da nuvem privada virtual (VPC) 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. Você pode usar essa chave de condição para restringir o acesso dos clientes dentro de sua VPC a 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 e exemplos, consulte os seguintes recursos:
-
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
-
Limitar o acesso a buckets do Amazon S3 pertencentes a Contas da AWS específicas
no blog de armazenamento da AWS
Exemplo 6: exigir uma versão mínima do TLS
Você pode usar a chave de condição s3:TlsVersion para gravar IAM, Virtual Private Cloud Endpoint (VPCE) ou políticas de bucket que restringem o acesso do usuário ou aplicação aos buckets do Amazon S3 com base na versão 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.
Esse exemplo de política de bucket nega solicitações PutObject de clientes que tenham uma versão do TLS inferior a 1.2, por exemplo, 1.1 ou 1.0.
{ "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
Essa política de bucket de exemplo permite solicitações PutObject de clientes que tenham uma versão do TLS superior a 1.1, por exemplo, 1.2, 1.3 ou acima.
{ "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
Exemplos: chaves de condição do Amazon S3 para operações de bucket
Esta seção fornece exemplos de políticas que mostram como você pode 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
Você poderá 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 (192.0.2.*), a menos que o endereço IP seja 192.0.2.188. No bloco de condição, IpAddress
e NotIpAddress
são condições, e cada condição recebe um par chave-valor para avaliação. Neste exemplo os dois pares de chave-valor usam a chave de toda a AWS aws:SourceIp
.
nota
Os valores de chave IPAddress
e NotIpAddress
especificados na condição 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:::
awsexamplebucket1
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "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.
Exemplo 2: obter uma lista de objetos em um bucket com um prefixo específico
Você pode usar a chave de condição s3:prefix
para limitar a resposta da API GET Bucket (ListObjects) a nomes de chave com um prefixo específico. Se você for o proprietário do bucket, poderá restringir um usuário a listar o conteúdo de um prefixo específico no bucket. Essa chave de condição 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. 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.
Por exemplo, se você tiver dois objetos com nomes de chave public/object1.jpg
e public/object2.jpg
, o console mostrará os objetos na pasta public
. Na API do Amazon S3, esses são objetos com prefixos, não objetos em pastas. No entanto, na API do Amazon S3, se você organizar suas chaves de objeto usando tais prefixos, poderá conceder a permissão s3:ListBucket
com a condição s3:prefix
que permitirá que o usuário obtenha uma lista de nomes de chave com um prefixo específico.
Neste exemplo, o proprietário do bucket e a conta pai à 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 obter mais informações sobre outras chaves de condição que você pode usar com a API GET Bucket (ListObjects), consulte ListObjects.
Política de usuário
A política de usuário a seguir concede a permissão s3:ListBucket
(consulte GET bucket (listar objetos)) com uma condição que exige que o usuário especifique o prefix
na solicitação com o valor projects
.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::
awsexamplebucket1
", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1
", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }
A condição restringe o usuário a listar chaves de objeto com o prefixo projects
. A negação explícita adicionada nega a solicitação do usuário para listar chaves com qualquer outro prefixo, independentemente de outras permissões que o usuário possa ter. Por exemplo, é possível que o usuário receba a permissão para listar chaves de objetos 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 a negação explícita sempre prevalece, a solicitação do usuário para listar outras chaves além do prefixo projects
é negada.
Política de bucket
Se você adicionar o elemento Principal
à política de usuário acima, identificando o usuário, agora terá uma política de bucket conforme exibido.
{ "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:::awsexamplebucket1
", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1
", "Condition" : { "StringNotEquals" : { "s3:prefix": "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
. Para obter mais informações sobre a configuração e o uso da AWS CLI, consulte Desenvolvimento com o Amazon S3 usando a AWS CLI.
aws s3api list-objects --bucket
awsexamplebucket1
--prefix examplefolder --profile AccountADave
Se o bucket tiver o versionamento habilitado, para listar os objetos no bucket, você deverá conceder a permissão s3:ListBucketVersions
na política anterior, em vez da permissão s3:ListBucket
. Essa permissão também oferece suporte à chave de condição s3:prefix
.
Exemplo 3: definir o número máximo de chaves
Você pode usar a chave de condição s3:max-keys
para definir o número máximo de chaves que o solicitante pode retornar em uma solicitação GET Bucket (ListObjects) ou ListObjectVersions. Por padrão, a API retorna até 1.000 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.