Exemplos de políticas de perfil e usuário
Esta seção mostra diversos exemplos de políticas de perfil e usuário do AWS Identity and Access Management (IAM) para controle de acesso ao Amazon S3. Por exemplo, políticas de bucket, consulte Uso de políticas de bucket. Para obter informações sobre a linguagem de políticas do IAM, consulte Políticas de bucket e políticas de usuário.
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.
Tópicos
- Permitir que um usuário do IAM acesse um dos seus buckets
- Permitir que cada usuário do IAM acesse uma pasta em um bucket
- Permitir que um grupo tenha uma pasta compartilhada no Amazon S3
- Permitir que todos os seus usuários leiam objetos em uma parte de um bucket
- Permitir que um parceiro solte arquivos em uma parte específica de um bucket
- Restringir o acesso a buckets do Amazon S3 em uma Conta da AWS específica
- Restringir o acesso a buckets do Amazon S3 em sua unidade organizacional (UO)
- Restringir o acesso a buckets do Amazon S3 em sua unidade organizacional
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. É recomendável criar pastas com nomes correspondentes aos nomes dos usuários.
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
no valor Carlos
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
. Quando a política é avaliada, a variável DOC-EXAMPLE-BUCKET1
/${aws:username}${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. Você também deseja limitar o acesso de todos os usuários à sua própria pasta, mas não pode criar pastas antes que alguém baixe seu aplicativo e comece a jogar, pois 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:
. 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. DOC-EXAMPLE-BUCKET1
/share/marketing
{ "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
, 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 AllUsers
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
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. AnyCompany
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
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 AnyCompany
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
. 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:222222222222
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "
222222222222
" ] } } } ] }
nota
Essa política não substitui seus 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
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 222222222222
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 (UO)
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 é
. Substitua esse valor em sua própria política por seus próprios IDs de UO.ou-acroot-exampleou
{ "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
em sua organização. A condição da política do IAM exige ou-acroot-exampleou
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.