Configurar políticas do IAM para uso de pontos de acesso - Amazon Simple Storage Service

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:

  1. (Recomendado) Delegue o controle de acesso do bucket para o ponto de acesso conforme descrito em Delegar controle de acesso a pontos de acesso.

  2. 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 Jane na conta 123456789012 permissões para objetos GET e PUT com o prefixo Jane/ por meio do ponto de acesso my-access-point na conta 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 Jane, 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 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:::DOC-EXAMPLE-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 Mateo na conta 123456789012 permissões para objetos GET por meio do ponto de acesso my-access-point na conta 123456789012 que possui a chave de etiqueta data definida com um valor 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 123456789012 visualize os objetos contidos no bucket subjacente ao ponto de acesso my-access-point na conta 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 DOC-EXAMPLE-BUCKET para pontos de acesso com uma origem de rede de VPC.

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:::DOC-EXAMPLE-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 123456789012 na região 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 ou VPC. 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.

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" } } }] }