Exemplos de políticas baseadas em identidade para o Amazon S3 - Amazon Simple Storage Service

Exemplos de políticas baseadas em identidade para o Amazon S3

Esta seção mostra diversos exemplos de políticas baseadas em identidade do AWS Identity and Access Management (IAM) para controle de acesso ao Amazon S3. Consulte exemplos de políticas de bucket (políticas baseadas em recursos) em Políticas de bucket para o Amazon S3. Para obter informações sobre a linguagem de políticas do IAM, consulte Políticas e permissões no Amazon S3.

Os exemplos de política a seguir funcionarão se você testá-los de forma programática. No entanto, para usá-los com o console do Amazon S3, você precisará conceder permissões adicionais solicitadas pelo console. Para obter informações sobre o uso de políticas como essas com o console do Amazon S3, consulte Controlar o acesso a um bucket com políticas de usuário.

Permitir que um usuário do IAM acesse um dos seus buckets

Neste exemplo, você deseja conceder a um usuário do IAM em sua Conta da AWS acesso a um de seus buckets, DOC-EXAMPLE-BUCKET1, e permitir que ele adicione, atualize e exclua objetos.

Além de conceder as permissões s3:PutObject, s3:GetObject e s3:DeleteObject ao usuário, a política também concede as permissões s3:ListAllMyBuckets, s3:GetBucketLocation e s3:ListBucket. Estas são permissões adicionais, exigidas pelo console. As ações s3:PutObjectAcl e s3:GetObjectAcl também são necessárias para copiar, recortar e colar objetos no console. Para obter um exemplo de passo a passo que concede permissões aos usuários e testa-as usando o console, consulte Controlar o acesso a um bucket com políticas de usuário.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" } ] }

Permitir que cada usuário do IAM acesse uma pasta em um bucket

Neste exemplo, você deseja que dois usuários do IAM, Alice e Carlos, tenham acesso ao seu bucket, DOC-EXAMPLE-BUCKET1, para que possam adicionar, atualizar e excluir objetos. No entanto, você quer restringir o acesso de todos os usuários a um único prefixo (pasta) no bucket. Você pode criar pastas com nomes correspondentes aos seus nomes de usuário.

DOC-EXAMPLE-BUCKET1 Mary/ Carlos/

Para conceder a cada usuário acesso apenas à pasta dele, crie uma política para cada um deles e anexe-a individualmente. Por exemplo, você pode anexar a política a seguir ao usuário Alice para conceder a ela permissões específicas do Amazon S3 na pasta DOC-EXAMPLE-BUCKET1/Mary.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/Mary/*" } ] }

Você pode anexar uma política semelhante ao usuário Carlos, especificando a pasta Carlos no valor Resource.

Em vez de anexar políticas a usuários individuais, você pode criar uma única política que use uma variável de política e anexá-la a um grupo. Primeiro, você precisará criar um grupo e adicionar os usuários Alice e Carlos a ele. O exemplo de política a seguir concede um conjunto de permissões do Amazon S3 na pasta DOC-EXAMPLE-BUCKET1/${aws:username}. Quando a política é avaliada, a variável ${aws:username} é substituída pelo nome do usuário do solicitante. Por exemplo, se Alice enviar uma solicitação para colocar um objeto, a operação será permitida apenas se Alice estiver fazendo upload do objeto na pasta DOC-EXAMPLE-BUCKET1/Mary.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
nota

Ao usar variáveis de política, você deve especificar explicitamente a versão 2012-10-17 na política. A versão padrão da linguagem da política do IAM, 2008-10-17, não é compatível com variáveis de política.

Se quiser testar a política anterior no console do Amazon S3, o console exigirá permissões adicionais, conforme exibido na política a seguir. Para obter informações sobre como o console usa essas permissões, consulte Controlar o acesso a um bucket com políticas de usuário.

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowRootLevelListingOfTheBucket", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
nota

Na versão 2012-10-17 da política, as variáveis de política começam com $. Essa mudança na sintaxe poderá criar um conflito se a chave de objeto (nome do objeto) incluir um $.

Para evitar esse conflito, especifique o caractere $ usando ${$}. Por exemplo, para incluir a chave de objeto my$file em uma política, especifique-a como my${$}file.

Embora os nomes de usuários do IAM sejam identificadores amigáveis e legíveis, eles não precisam ser globalmente exclusivos. Por exemplo, se o usuário Carlos deixar a empresa e outro Carlos ingressar, este poderá acessar as informações do Carlos anterior.

Em vez de usar nomes de usuário, você pode criar pastas baseadas nos IDs de usuário do IAM. O ID de cada usuário do IAM é exclusivo. Neste caso, você deve modificar a política anterior para usar a variável de política ${aws:userid}. Para obter mais informações sobre identificadores de usuário, consulte Identificadores do IAM no Guia do usuário do IAM.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/home/${aws:userid}/*" } ] }

Permitir que usuários que não são do IAM (usuários de aplicativos móveis) acessem pastas em um bucket

Vamos supor que você queira desenvolver um aplicativo móvel, um jogo que armazena dados dos usuários em um bucket do S3. Para cada usuário do aplicativo, você quer criar uma pasta em seu bucket. Também é desejável limitar o acesso de todos os usuários à própria pasta, mas não é possível criar pastas antes que alguém baixe sua aplicação e comece a jogar, pois você não tem o ID do usuário.

Neste caso, você pode exigir que os usuários criem uma conta em seu aplicativo usando provedores públicos de identidade, como Login with Amazon, Facebook ou Google. Depois que os usuários criarem uma conta em seu aplicativo por meio de um desses provedores, eles terão um ID de usuário que você poderá usar para criar pastas específicas de usuário no tempo de execução.

Você pode usar a federação de identidades da web no AWS Security Token Service para integrar informações do provedor de identidade com seu aplicativo e para obter credenciais de segurança temporárias para cada usuário. Você pode criar políticas do IAM que permitem que o aplicativo acesse seu bucket e execute operações como criação de pastas específicas de usuário e upload de dados. Para obter mais informações sobre federação de identidades da Web, consulte Sobre federação de identidades da Web no Guia do usuário do IAM.

Permitir que um grupo tenha uma pasta compartilhada no Amazon S3

Anexar a política a seguir ao grupo concede a todos no grupo acesso à seguinte pasta no Amazon S3: DOC-EXAMPLE-BUCKET1/share/marketing. Os membros do grupo têm permissão para acessar apenas permissões específicas do Amazon S3 exibidas na política e apenas para objetos na pasta especificada.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/share/marketing/*" } ] }

Permitir que todos os seus usuários leiam objetos em uma parte de um bucket

Neste exemplo, você cria um grupo chamado AllUsers, que contém todos os usuários do IAM que pertencem à Conta da AWS. Em seguida, anexe uma política que concede ao grupo acesso a GetObject e GetObjectVersion, mas somente para objetos na pasta DOC-EXAMPLE-BUCKET1/readonly.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/readonly/*" } ] }

Permitir que um parceiro solte arquivos em uma parte específica de um bucket

Neste exemplo, crie um grupo chamado AnyCompany que representa uma empresa parceira. Crie um usuário do IAM para a pessoa ou aplicação específica na empresa parceira que precisa de acesso. Depois, coloque o usuário no grupo.

Depois, anexe uma política que conceda ao grupo PutObject acesso à seguinte pasta em um bucket:

DOC-EXAMPLE-BUCKET1/uploads/anycompany

É preciso impedir que o grupo AnyCompany faça qualquer outra coisa no bucket e, portanto, você adiciona uma declaração negando explicitamente outras permissões a ações do Amazon S3, exceto PutObject, em qualquer recurso do Amazon S3 na Conta da AWS.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" }, { "Effect":"Deny", "Action":"s3:*", "NotResource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" } ] }

Restringir o acesso a buckets do Amazon S3 em uma Conta da AWS específica

Se quiser garantir que suas entidades principais do Amazon S3 acessem apenas os recursos que estão em uma Conta da AWS confiável, você poderá restringir o acesso. Por exemplo, esta política do IAM baseada em identidade usa um efeito Deny para bloquear o acesso às ações do Amazon S3, a menos que o recurso do Amazon S3 que está sendo acessado esteja na conta 222222222222. Para impedir que uma entidade principal do IAM em uma Conta da AWS acesse objetos do Amazon S3 fora da conta, anexe a seguinte política do IAM:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "222222222222" ] } } } ] }
nota

Essa política não substitui os controles de acesso do IAM existentes, pois não concede nenhum acesso. Em vez disso, essa política funciona como uma barreira de proteção adicional para suas outras permissões do IAM, independentemente das permissões concedidas por meio de outras políticas do IAM.

Substitua o ID da conta 222222222222 na política pela sua própria Conta da AWS. Para aplicar uma política a várias contas e ainda manter essa restrição, substitua o ID da conta pela chave de condição aws:PrincipalAccount. Essa condição exige que a entidade principal e o recurso estejam na mesma conta.

Restringir o acesso a buckets do Amazon S3 em sua unidade organizacional

Se você tiver uma unidade organizacional (UO) configurada no AWS Organizations, é recomendável restringir o acesso ao bucket do Amazon S3 a uma parte específica de sua organização. Neste exemplo, usaremos a chave aws:ResourceOrgPaths para restringir o acesso ao bucket do Amazon S3 a uma UO em sua organização. Neste exemplo, o ID da UO é ou-acroot-exampleou. Substitua esse valor em sua própria política por seus próprios IDs de UO.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3AccessOutsideMyBoundary", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-exampleou/" ] } } } ] }
nota

Essa política não concede nenhum acesso. Em vez disso, essa política funciona como uma barreira para suas outras permissões do IAM, impedindo que suas entidades principais acessem objetos do Amazon S3 fora de um limite definido pela UO.

A política nega acesso às ações do Amazon S3, a menos que o objeto do Amazon S3 que está sendo acessado esteja na UO ou-acroot-exampleou em sua organização. A condição da política do IAM exige aws:ResourceOrgPaths, uma chave de condição com vários valores, para conter qualquer um dos caminhos de UO listados. A política usa o operador ForAllValues:StringNotLike para comparar os valores de aws:ResourceOrgPaths com as UOs listadas sem distinção de maiúsculas e minúsculas.

Restringir o acesso a buckets do Amazon S3 em sua unidade organizacional

Para restringir o acesso a objetos do Amazon S3 em sua organização, anexe uma política do IAM à raiz da organização, aplicando-a a todas as contas. Para exigir que suas entidades principais do IAM sigam essa regra, use uma política de controle de serviços (SCP). Se você optar por usar uma SCP, teste-a antes de anexar a política à raiz da organização.

No exemplo de política a seguir, o acesso é negado às ações do Amazon S3, a menos que o objeto do Amazon S3 que está sendo acessado esteja na mesma organização que a entidade principal do IAM que o está acessando:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::*/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } ] }
nota

Essa política não concede nenhum acesso. Essa política funciona como uma barreira para suas outras permissões do IAM, impedindo que suas entidades principais acessem quaisquer objetos do Amazon S3 de fora de sua organização. Essa política também se aplica aos recursos do Amazon S3 que são criados depois que a política é implementada.

Neste exemplo, a condição da política do IAM exige que aws:ResourceOrgID e aws:PrincipalOrgID sejam equivalentes. Com esse requisito, a entidade principal que faz a solicitação e o recurso que está sendo acessado devem estar na mesma organização.

O exemplo de política baseada em identidade a seguir concede a permissão s3:GetAccountPublicAccessBlock a um usuário. Para todas essas permissões, defina o valor Resource como "*". Consulte mais informações sobre os ARNs de recursos em Recursos de políticas para o Amazon S3.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action":[ "s3:GetAccountPublicAccessBlock" ], "Resource":[ "*" ] } ] }

Restringir a criação de buckets a uma região

Suponha que um administrador de uma Conta da AWS queira conceder ao seu usuário (Dave) a permissão para criar um bucket somente na região América do Sul (São Paulo). O administrador da conta pode anexar a política de usuário a seguir que concede a permissão s3:CreateBucket com uma condição, conforme exibido. O par de chave-valor no bloco Condition especifica a chave s3:LocationConstraint e a região sa-east-1 como valor.

nota

Neste exemplo, o proprietário do bucket concede permissão para um de seus usuários, de modo que tanto uma política de bucket quanto uma política de usuário podem ser usadas. Este exemplo mostra uma política de usuário.

Para conferir a lista de regiões do Amazon S3, consulte Regiões e endpoints na Referência geral da AWS.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }
Adicionar negação explícita

A política acima impede que o usuário crie um bucket em qualquer outra Região, exceto sa-east-1. No entanto, alguma outra política pode conceder a esse usuário permissão para criar buckets em outra Região. Por exemplo, se ele pertencer a um grupo, o grupo pode ter uma política anexada que permita que todos os seus usuários tenham permissão para criar buckets em outra Região. Para garantir que o usuário não obtenha permissão para criar buckets em nenhuma outra região, adicione uma instrução de negação explícita à política acima.

A declaração Deny usa a condição StringNotLike. Isto é, uma solicitação de criação de bucket será negada se a restrição de localização não for sa-east-1. A negação explícita não permite que o usuário crie um bucket em nenhuma outra região, independentemente de outras permissões que ele receba. A política a seguir inclui uma instrução de negação explícita.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }
Testar a política com a AWS CLI

Você pode testar a política usando o seguinte comando create-bucket da AWS CLI. Este exemplo usa o arquivo bucketconfig.txt para especificar a restrição de localização. Anote o caminho do arquivo do Windows. Você precisa atualizar o nome e o caminho do bucket conforme apropriado. Você deve fornecer 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 create-bucket --bucket examplebucket --profile AccountADave --create-bucket-configuration file://c:/Users/someUser/bucketconfig.txt

O arquivo bucketconfig.txt especifica a configuração da seguinte maneira.

{"LocationConstraint": "sa-east-1"}