Pré-requisitos para desabilitar ACLs - Amazon Simple Storage Service

Pré-requisitos para desabilitar ACLs

Se a ACL de bucket conceder acesso fora de sua Conta da AWS, antes de desabilitar as ACLs, é ncessário migrar suas permissões de ACL de bucket para a política de bucket e redefinir a ACL de bucket para a ACL privada padrão. Se você não migrar essas ACLs de bucket, a solicitação para adotar a configuração aplicada pelo proprietário do bucket para desabilitar ACLs falhará e retornará o código de erro InvalidBucketAclWithObjectOwnership. Também recomendamos revisar suas permissões de ACL de objeto e migrá-las para a política de bucket. Para obter mais informações sobre outros pré-requisitos sugeridos, consulte Pré-requisitos para desabilitar ACLs.

Cada uma das ACLs de objeto e de bucket existentes tem um equivalente em uma política do IAM. Os exemplos de política de bucket a seguir mostram como as permissões READ e WRITE para ACLs de objeto e de bucket são mapeadas para permissões do IAM. Para obter mais informações sobre como cada ACL é convertida em permissões do IAM, consulte Mapeamento das permissões da ACL e das permissões da política de acesso.

Para revisar e migrar permissões de ACL para políticas de bucket, consulte os tópicos a seguir.

Exemplos de políticas de bucket

Esses exemplos de políticas de bucket mostram como migrar permissões de ACL de bucket e de objeto READ e WRITE para uma Conta da AWS de terceiros para uma política de bucket. As ACLs READ_ACP e WRITE_ACP são menos relevantes para políticas porque concedem permissões relacionadas a ACLs (s3:GetBucketAcl, s3:GetObjectAcl, s3:PutBucketAcl e s3:PutObjectAcl).

exemplo – ACL READ para um bucket

Se o bucket tiver uma ACL READ que conceda à Conta da AWS 111122223333 permissão para listar o conteúdo do bucket, é possível gravar uma política de bucket que conceda as permissões s3:ListBucket, s3:ListBucketVersions, s3:ListBucketMultipartUploads para o bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to list the objects in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } ] }

exemplo – ACLs READ para cada objeto de um bucket

Se cada objeto em seu bucket tiver uma ACL READ que conceda acesso à Conta da AWS 111122223333, você pode gravar uma política de bucket que conceda permissões s3:GetObject e s3:GetObjectVersion a essa conta para cada objeto do bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Read permission for every object in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Esse elemento de recurso de exemplo concede acesso a um objeto específico.

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"

exemplo – ACL de gravação que concede permissões para gravar objetos em um bucket

Se o bucket tiver uma ACL de gravação que conceda à Conta da AWS 111122223333 permissão para gravar objetos no bucket, é possível gravar uma política de bucket que conceda a permissão s3:PutObject para o bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to write objects to a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Usar o console do S3 para revisar e migrar permissões de ACL

Para revisar permissões de ACL

  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Para exibir permissões de ACL de bucket, na lista Buckets, escolha o nome do bucket.

  3. Escolha Permissions (Permissões).

  4. Em Access control list (ACL) (Lista de controle de acesso [ACL]), revise suas permissões de ACL de bucket.

  5. Escolha a guia Objetos.

  6. Na lista Objects (Objetos), escolha o nome do objeto.

  7. Escolha Permissions (Permissões).

  8. Em Access control list (ACL) (Lista de controle de acesso [ACL]), revise suas permissões de ACL de objeto.

Para migrar permissões de ACL e atualizar a ACL de bucket

  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Na lista Buckets (Buckets), escolha o nome do bucket.

  3. Na guia Permissions (Permissões), escolha Bucket policy (Política de bucket), Edit (Editar).

  4. Na caixa Policy (Política), adicione ou atualize a política de bucket.

    Para obter exemplos de políticas de bucket, consulte Exemplos de políticas de bucket e Demonstrações de exemplo.

  5. Selecione Save changes.

  6. Atualize sua ACL de bucket para remover concessões de ACL para outros grupos ou Contas da AWS.

  7. Aplique a configuração aplicada pelo proprietário do bucket em Object Ownership.

Usar a AWS CLI para revisar e migrar permissões de ACL

  1. Para devolver a ACL de bucket ao bucket, use o comando get_bucket_acl da AWS CLI:

    aws s3api get-bucket-acl --bucket DOC-EXAMPLE-BUCKET

    Por exemplo, essa ACL de bucket concede acesso WRITE e READ a uma conta de terceiros. Nessa ACL, a conta de terceiros é identificada pelo ID de usuário canônico. Para adotar a configuração aplicada pelo proprietário do bucket e desabilitar ACLs, é necessário migrar essas permissões para a conta de terceiros para uma política de bucket.

    { "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "WRITE" } ] }

    Para ver outros exemplos de ACL, consulte Demonstrações de exemplo.

  2. Migre suas permissões de ACL de bucket para uma política de bucket:

    Este exemplo de política de bucket concede as permissões s3:PutObject e s3:ListBucket para uma conta de terceiros. Na política de bucket, a conta de terceiros é identificada pelo ID da Conta da AWS (111122223333).

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForCrossAccountAllowUpload", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

    Para obter mais exemplos de políticas de bucket, consulte Exemplos de políticas de bucket e Demonstrações de exemplo.

  3. Para retornar a ACL de um objeto específico, use o comando get-object-acl da AWS CLI.

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key EXAMPLE-OBJECT-KEY
  4. Se necessário, migre as permissões de ACL de objeto para a política de bucket.

    Esse elemento de recurso de exemplo concede acesso a um objeto específico em uma política de bucket.

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/EXAMPLE-OBJECT-KEY"
  5. Redefina a ACL de bucket para a ACL padrão.

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  6. Aplique a configuração aplicada pelo proprietário do bucket em Object Ownership.

Demonstrações de exemplo

Os exemplos a seguir mostram como migrar permissões de ACL para políticas de bucket para casos de uso específicos.

Conceder acesso ao grupo de entrega de logs do S3 para log de acesso ao servidor

Para adotar a configuração aplicada pelo proprietário do bucket para desabilitar ACLs para um bucket de destino de log de acesso ao servidor, será necessário migrar permissões de ACL de bucket para o grupo de entrega de log do S3 para a entidade principal do serviço de log (logging.s3.amazonaws.com) em uma política de bucket. Para obter mais informações sobre permissões de entrega de logs, consulte Permissões para entrega de logs.

Essa ACL de bucket concede acesso WRITE e READ_ACP ao grupo de entrega de logs do S3:

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "WRITE" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "READ_ACP" } ] }

Para migrar permissões de ACL de bucket para o grupo de entrega de log do S3 para a entidade principal do serviço de log em uma política de bucket

  1. Adicione a política de bucket a seguir ao bucket de destino, substituindo os valores de exemplo.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { { "Version": "2012-10-17", "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/EXAMPLE-LOGGING-PREFIX*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID" } } } ] }
  2. Redefina a ACL de bucket de destino para a ACL padrão.

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  3. Aplique a configuração aplicada pelo proprietário do bucket em Object Ownership para o bucket de destino.

Conceder acesso público de leitura aos objetos do bucket

Se as ACLs de objeto concederem acesso público de leitura a todos os objetos no bucket, será possível migrar essas permissões de ACL para uma política de bucket.

Essa ACL de objeto concede acesso público de leitura a um objeto de um bucket:

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }

Para migrar permissões públicas de ACL de leitura para uma política de bucket

  1. Para conceder acesso público de leitura a todos os objetos do bucket, adicione a política de bucket a seguir, substituindo os valores de exemplo.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }

    Para conceder acesso público a um objeto específico de uma política de bucket, use o seguinte formato para o elemento Resource.

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"

    Para conceder acesso público a todos os objetos com um prefixo específico, use o seguinte formato para o elemento Resource.

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/PREFIX/*"
  2. Aplique a configuração aplicada pelo proprietário do bucket em Object Ownership.

Conceder acesso do Amazon ElastiCache for Redis ao bucket do Amazon S3

Você pode exportar o backup do ElastiCache for Redis para um bucket do S3, o que lhe dá acesso ao backup de fora do ElastiCache. Para exportar o backup para um bucket do S3, é necessário conceder permissões do ElastiCache para copiar um snapshot para o bucket. Se você concedeu permissões ao ElastiCache em uma ACL de bucket, deverá migrar essas permissões para uma política de bucket antes de adotar a configuração aplicada pelo proprietário do bucket para desabilitar ACLs. Para obter mais informações, consulte Conceder acesso do ElastiCache ao bucket do Amazon S3 no Guia do usuário do Amazon ElastiCache.

O exemplo a seguir mostra as permissões de ACL de bucket que concedem permissões ao ElastiCache.

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "WRITE" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ_ACP" } ] }

Para migrar permissões de ACL de bucket ao ElastiCache for Redis para uma política de bucket

  1. Adicione a política de bucket a seguir ao bucket, substituindo os valores de exemplo.

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: "Id": "Policy15397346", "Statement": [ { "Sid": "Stmt15399483", "Effect": "Allow", "Principal": { "Service": "Region.elasticache-snapshot.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:GetBucketAcl", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
  2. Redefina a ACL de bucket para a ACL padrão:

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  3. Aplique a configuração aplicada pelo proprietário do bucket em Object Ownership.