Configurar políticas do IAM para uso de pontos de acesso
Os pontos de acesso do Amazon S3 são compatíveis com as políticas de recursos do AWS Identity and Access Management (IAM) que permitem controlar o uso do ponto de acesso por recurso, usuário ou por outras condições. Para que um aplicativo ou usuário possa acessar objetos por meio de um ponto de acesso, tanto o ponto de acesso quanto o bucket subjacente devem permitir a solicitação.
Importante
Adicionar um ponto de acesso do S3 a um bucket não altera o comportamento do bucket quando ele é acessado diretamente pelo nome do bucket ou pelo nome do recurso da Amazon (ARN). Todas as operações existentes no bucket continuarão a funcionar como antes. As restrições que você incluir em uma política de ponto de acesso se aplicam somente a solicitações feitas por meio desse ponto de acesso.
Ao usar políticas de recursos do IAM, solucione avisos de segurança, erros, avisos gerais e sugestões de AWS Identity and Access Management Access Analyzer antes de salvar a política. O IAM Access Analyzer executa verificações de política para validar sua política em relação à gramática das políticas e às práticas recomendadas do IAM. Essas verificações geram descobertas e fornecem recomendações que ajudam a criar políticas que sejam funcionais e estejam em conformidade com as práticas recomendadas de segurança.
Para saber mais sobre a validação de políticas usando o IAM Access Analyzer, consulte Validação de políticas do IAM Access Analyzer no Guia do usuário do IAM. Para visualizar uma lista de avisos, erros e sugestões retornados pelo IAM Access Analyzer, consulte Referência de verificação de políticas do IAM Access Analyzer.
Exemplos de política de ponto de acesso
Os exemplos a seguir demonstram como criar políticas do IAM para controlar solicitações feitas por meio de um ponto de acesso.
nota
As permissões concedidas em uma política de ponto de acesso entram em vigor somente se o bucket subjacente também permitir o mesmo acesso. É possível fazer isso de duas maneiras:
-
(Recomendado) Delegue o controle de acesso do bucket para o ponto de acesso conforme descrito em Delegar controle de acesso a pontos de acesso.
-
Adicione as mesmas permissões contidas na política de ponto de acesso à política do bucket subjacente. O Exemplo 1 de política de ponto de acesso demonstra como modificar a política de bucket subjacente para permitir o acesso necessário.
exemplo 1: Concessão da política de ponto de acesso
A política de ponto de acesso a seguir concede ao usuário do IAM
na conta Jane
permissões para objetos 123456789012
GET
e PUT
com o prefixo
por meio do ponto de acesso Jane/
na conta my-access-point
.123456789012
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Jane
" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:us-west-2
:123456789012
:accesspoint/my-access-point
/object/Jane/
*" }] }
nota
Para que a política de ponto de acesso conceda efetivamente acesso ao usuário
, o bucket subjacente também deve permitir o mesmo acesso a Jane
. É possível delegar o controle de acesso do bucket para o ponto de acesso conforme descrito em Delegar controle de acesso a pontos de acesso. Como alternativa, é possível adicionar a seguinte política ao bucket subjacente para conceder as permissões necessárias à Jane. Observe que a entrada Jane
Resource
é diferente entre as políticas de ponto de acesso e bucket.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Jane
" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1
/Jane/
*" }] }
exemplo 2: Política de ponto de acesso com condição de etiqueta
A política de ponto de acesso a seguir concede ao usuário do IAM
na conta Mateo
permissões para objetos 123456789012
GET
por meio do ponto de acesso
na conta my-access-point
que possui a chave de etiqueta 123456789012
definida com um valor data
.finance
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal" : { "AWS": "arn:aws:iam::
123456789012
:user/Mateo
" }, "Action":"s3:GetObject", "Resource" : "arn:aws:s3:us-west-2
:123456789012
:accesspoint/my-access-point
/object/*", "Condition" : { "StringEquals": { "s3:ExistingObjectTag/data
": "finance
" } } }] }
exemplo 3: Política de ponto de acesso que permite a listagem de buckets
A política de ponto de acesso a seguir permite que o usuário do IAM Arnav
na conta
visualize os objetos contidos no bucket subjacente ao ponto de acesso 123456789012
na conta my-access-point
.123456789012
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Arnav
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2
:123456789012
:accesspoint/my-access-point
" }] }
exemplo 4: Política de controle de serviço
A política de controle de serviço a seguir requer que todos os novos pontos de acesso sejam criados com uma origem de rede de nuvem privada virtual (VPC). Com essa política em vigor, os usuários da sua organização não podem criar novos pontos de acesso acessíveis da Internet.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } }] }
exemplo 5: Política de bucket para limitar operações do S3 às origens de rede de VPC
A política de bucket a seguir limita o acesso a todas as operações de objeto do S3 para o bucket
para pontos de acesso com uma origem de rede de VPC.amzn-s3-demo-bucket
Importante
Antes de usar uma instrução como essa do exemplo, certifique-se de que você não precisa usar recursos que não são compatíveis com pontos de acesso, como replicação entre regiões.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:AbortMultipartUpload", "s3:BypassGovernanceRetention", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectLegalHold", "s3:GetObjectRetention", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionAcl", "s3:PutObjectVersionTagging", "s3:RestoreObject" ], "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } } ] }
Chaves de condição
Os pontos de acesso do S3 têm chaves de condição que podem ser usadas em políticas do IAM para controlar o acesso aos recursos. As chaves de condição a seguir representam somente parte de uma política do IAM. Para obter exemplos de políticas completas, consulte Exemplos de política de ponto de acesso, Delegar controle de acesso a pontos de acesso e Conceder permissões para pontos de acesso entre contas.
s3:DataAccessPointArn
-
Este exemplo mostra uma string que você pode usar para estabelecer correspondência em um ARN de ponto de acesso. O exemplo a seguir estabelece a correspondência de todos os pontos de acesso da Conta da AWS
na região123456789012
:us-west-2
"Condition" : { "StringLike": { "s3:DataAccessPointArn": "arn:aws:s3:
us-west-2
:123456789012
:accesspoint/*" } } s3:DataAccessPointAccount
-
Este exemplo mostra um operador de string que você pode utilizar para estabelecer correspondência com o ID da conta do proprietário de um ponto de acesso. O exemplo a seguir estabelece correspondência com todos os pontos de acesso pertencentes à Conta da AWS
.123456789012
"Condition" : { "StringEquals": { "s3:DataAccessPointAccount": "
123456789012
" } } s3:AccessPointNetworkOrigin
-
Este exemplo mostra um operador de string que você pode utilizar para estabelecer correspondência com a origem da rede,
Internet
ouVPC
. O exemplo a seguir corresponde apenas a pontos de acesso com uma origem de VPC."Condition" : { "StringEquals": { "s3:AccessPointNetworkOrigin": "VPC" } }
Consulte mais informações sobre como usar chaves de condição com o Amazon S3 em Actions, resources, and condition keys for Amazon S3 na Referência de autorização do serviço.
Para ter mais informações sobre as permissões referentes a operações de API do S3 de acordo com os tipos de recurso do S3, consulte Permissões obrigatórias para operações de API do Amazon S3.
Delegar controle de acesso a pontos de acesso
Você pode delegar o controle de acesso de um bucket aos pontos de acesso do bucket. O exemplo de política de bucket a seguir permite acesso total a todos os pontos de acesso pertencentes à conta do proprietário do bucket. Assim, todo o acesso a esse bucket é controlado pelas políticas anexadas aos seus pontos de acesso. Recomendamos configurar seus buckets dessa maneira para todos os casos de uso que não exigem acesso direto ao bucket.
exemplo 6: Política de bucket que delega controle de acesso a pontos de acesso
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "
Bucket ARN
", "Bucket ARN
/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID
" } } }] }
Conceder permissões para pontos de acesso entre contas
Para criar um ponto de acesso para um bucket pertencente a outra conta, primeiro você deve criar o ponto de acesso especificando o nome do bucket e o ID do proprietário da conta. Depois, o proprietário do bucket deve atualizar a política do bucket para autorizar solicitações do ponto de acesso. Criar um ponto de acesso é semelhante à criação de um DNS CNAME, pois o ponto de acesso não fornece acesso ao conteúdo do bucket. Todo acesso ao bucket é controlado pela política de bucket. O exemplo de política de bucket a seguir permite solicitações GET
e LIST
no bucket de um ponto de acesso pertencente a uma Conta da AWS confiável.
Substitua Bucket ARN
pelo ARN do bucket.
exemplo 7: Política de bucket que delega permissões a outra Conta da AWS
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : ["s3:GetObject","s3:ListBucket"], "Resource" : [ "
Bucket ARN
", "Bucket ARN
/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Access point owner's account ID
" } } }] }