Chaves de condição do Amazon S3
A linguagem de políticas de acesso permite que especificar condições ao conceder permissões. Para especificar condições para quando uma política está em vigor, você pode usar o elemento opcional Condition
ou o bloco Condition
, para especificar condições para quando uma política está em vigor. Você pode usar chaves predefinidas de toda a AWS e chaves específicas do Amazon S3 para especificar condições em uma política de acesso do Amazon S3.
No elemento Condition
, que é opcional, você cria expressões em que usa operadores boolianos (equal, less than, etc.) para fazer a correspondência da sua condição com os valores na solicitação. Por exemplo, ao conceder a um usuário permissão para fazer upload de um objeto, o proprietário do bucket pode exigir que o objeto seja publicamente legível adicionando a condição StringEquals
conforme mostrado aqui:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
awsexamplebucket1
/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }
No exemplo, o bloco Condition
especifica a condição StringEquals
que é aplicada ao par de chave-valor especificado, "s3:x-amz-acl":["public-read"]
. Existe um conjunto de chaves predefinidas que pode ser usado para expressar uma condição. O exemplo usa a chave de condição s3:x-amz-acl
. Essa condição exige que o usuário inclua o cabeçalho x-amz-acl
com o valor public-read
em cada solicitação de objeto PUT.
Tópicos
Chaves de condição de toda a AWS
A AWS fornece um conjunto de chaves comuns que recebe o suporte de todos serviços da AWS que, por sua vez, dão suporte às políticas. Essas chaves são chamadas chaves de toda a AWS e usam o prefixo aws:
. Para obter uma lista completa de chaves de condição em toda a AWS, consulte Chaves da AWS disponíveis para condições no Guia do usuário do IAM. Você pode usar chaves de condição de toda a AWS no Amazon S3. O exemplo de política de bucket a seguir concede 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.0.*), 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. Para obter uma lista completa de tipos de recurso e chaves de condição compatíveis com o Amazon S3, consulte Ações, recursos e condições.
Chaves de condição específicas do Amazon S3
Você pode usar chaves de condição do Amazon S3 com ações específicas do Amazon S3. Cada chave de condição mapeia para o mesmo cabeçalho de solicitação de nome permitido pela API na qual a condição pode ser definida. As chaves de condição específicas do Amazon S3 ditam o comportamento dos cabeçalhos de solicitação de mesmo nome. Para obter uma lista completa de chaves de condição específicas do Amazon S3, consulte Ações, recursos e chaves de condição do Amazon S3.
Por exemplo, a chave de condição s3:x-amz-acl
usada para conceder permissão de condição para a permissão s3:PutObject
define o comportamento do cabeçalho de solicitação x-amz-acl
para o qual a API do objeto PUT oferece suporte. A chave de condição s3:VersionId
que você usa para conceder permissão condicional para a permissão s3:GetObjectVersion
define o comportamento do parâmetro de consulta versionId
que você define em uma solicitação de objeto GET.
A política de bucket a seguir concederá a permissão s3:PutObject
a duas Contas da AWS se a solicitação incluir o cabeçalho x-amz-acl
, tornando o objeto publicamente legível. O bloco Condition
usa a condição StringEquals
e recebe um par de chave/valor, "s3:x-amz-acl":["public-read"
, para avaliação. No par de chave-valor, s3:x-amz-acl
é uma chave específica do Amazon S3, conforme indicado pelo prefixo s3:
.
{ "Version":"2012-10-17", "Statement": [ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": { "AWS": [ "arn:aws:iam::
Account1-ID
:root", "arn:aws:iam::Account2-ID
:root" ] }, "Action":"s3:PutObject", "Resource": ["arn:aws:s3:::awsexamplebucket1
/*"], "Condition": { "StringEquals": { "s3:x-amz-acl":["public-read"] } } } ] }
Importante
Nem todas as condições fazem sentido para todas as ações. Por exemplo, faz sentido incluir uma condição s3:LocationConstraint
em uma política que concede a permissão s3:CreateBucket
do Amazon S3. No entanto, não faz sentido incluir essa condição em uma política que conceda a permissão s3:GetObject
. O Amazon S3 pode testar erros de semântica para esse tipo que envolve condições específicas do Amazon S3. Contudo, se você estiver criando uma política para um perfil ou usuário do IAM e incluir uma condição do Amazon S3 semanticamente inválida, nenhum erro será relatado porque o IAM não pode validar condições do Amazon S3.