Exemplos de políticas de bucket usando chaves de condição - Amazon Simple Storage Service

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).

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-source examplebucket/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 versão. 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-id AaaHbAQitwiL_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:

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:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

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:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

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.

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-keyspara 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.