Uma lista de controle de acesso (ACL) do bucket no Amazon S3 é um mecanismo que permite definir permissões detalhadas para objetos individuais dentro de um bucket do S3, especificando quais grupos ou contas da AWS podem acessar e modificar esses objetos. A maioria dos casos de uso modernos no Amazon S3 não exige mais o uso de ACLs. Recomendamos que você use políticas de bucket e do AWS Identity and Access Management (IAM) para gerenciar o acesso e manter as ACLs desabilitadas, exceto em circunstâncias incomuns em que seja necessário controlar o acesso para cada objeto individualmente.
Se você tiver ACLs habilitadas no bucket, antes de desabilitá-las, atenda aos seguintes pré-requisitos:
Tópicos
Revise as ACLs de bucket e de objeto e migre permissões de ACLs
Quando você desabilita ACLs, as permissões concedidas por ACLs de bucket e de objeto não afetam mais o acesso. Antes de desabilitar as ACLs, revise suas ACLs de objeto e de bucket.
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.
Antes de desabilitar as ACLs:
Se a ACL de bucket conceder acesso fora da conta da AWS, será necessário migrar as permissões de ACL de bucket para a política de bucket.
A seguir, redefina a ACL de bucket para a ACL privada padrão.
Também recomendamos revisar as permissões de ACL no nível de objeto e migrá-las para a política de bucket.
Se as ACLs de bucket concederem permissões de leitura ou gravação a outras pessoas fora da conta, antes de desabilitar as ACLs, será necessário migrar essas permissões para a política de bucket. Depois de migrar essas permissões, você pode definir a Propriedade do objeto com a configuração Imposto pelo proprietário do bucket. Se você não migrar ACLs de bucket que concedem acesso de leitura ou gravação fora de sua conta, a solicitação para aplicar a configuração Imposto pelo proprietário do bucket falhará e retornará o código de erro InvalidBucketAclWithObjectOwnership.
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 e redefinir, a solicitação para adotar a configuração de imposto 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 revisar e migrar permissões de ACL para políticas de bucket, consulte os tópicos a seguir.
Tópicos
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 permissão à Conta da AWS
para listar o conteúdo do bucket, você poderá escrever uma política de bucket que conceda as permissões 111122223333
s3:ListBucket
, s3:ListBucketVersions
e 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:::" } ] }
amzn-s3-demo-bucket
exemplo – ACLs READ
para cada objeto de um bucket
Se cada objeto no bucket tiver uma ACL READ
que conceda acesso à Conta da AWS
, você poderá escrever uma política de bucket que conceda as permissões 111122223333
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:::/*" } ] }
amzn-s3-demo-bucket
Esse elemento de recurso de exemplo concede acesso a um objeto específico.
"Resource": "arn:aws:s3:::
/
amzn-s3-demo-bucket
OBJECT-KEY
"
exemplo – ACL WRITE
que concede permissões para gravar objetos em um bucket
Se o bucket tiver uma ACL WRITE
que conceda permissão à Conta da AWS
para gravar objetos no bucket, você poderá escrever uma política de bucket que conceda a permissão 111122223333
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:::/*" } ] }
amzn-s3-demo-bucket
Usar o console do S3 para revisar e migrar permissões de ACL
Como revisar as permissões de ACL de um bucket
Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
Na lista Buckets (Buckets), escolha o nome do bucket.
-
Escolha a aba Permissões.
-
Em Access control list (ACL) (Lista de controle de acesso [ACL]), revise suas permissões de ACL de bucket.
Como revisar as permissões de ACL de um objeto
Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
Na lista Buckets, escolha o nome do bucket que contém o objeto.
-
Na lista Objects (Objetos), escolha o nome do objeto.
-
Escolha a aba Permissões.
-
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
Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
Na lista Buckets (Buckets), escolha o nome do bucket.
-
Na guia Permissions (Permissões), escolha Bucket policy (Política de bucket), Edit (Editar).
-
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 Exemplo de casos de uso.
-
Escolha Salvar alterações.
-
Atualize sua ACL de bucket para remover concessões de ACL para outros grupos ou Contas da AWS.
-
Adote a configuração Imposto pelo proprietário do bucket em Propriedade de objeto.
Usar a AWS CLI para revisar e migrar permissões de ACL
-
Para retornar a ACL para o bucket, use o comando get-bucket-acl
da AWS CLI: aws s3api get-bucket-acl --bucket
amzn-s3-demo-bucket
Por exemplo, essa ACL de bucket concede acesso
WRITE
eREAD
a uma conta de terceiros. Nessa ACL, a conta de terceiros é identificada pelo ID de usuário canônico. Para adotar a configuração Imposto pelo proprietário do bucket e desabilitar ACLs, é necessário migrar essas permissões à 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 Exemplo de casos de uso.
-
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
es3: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
--policyamzn-s3-demo-bucket
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:::
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" } ] }amzn-s3-demo-bucket
Para obter mais exemplos de políticas de bucket, consulte Exemplos de políticas de bucket e Exemplo de casos de uso.
-
Para retornar a ACL para um objeto específico, use o comando get-object-acl
da AWS CLI. aws s3api get-object-acl --bucket
amzn-s3-demo-bucket
--keyEXAMPLE-OBJECT-KEY
-
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:::
amzn-s3-demo-bucket
/EXAMPLE-OBJECT-KEY
" -
Redefina a ACL de bucket para a ACL padrão.
aws s3api put-bucket-acl --bucket
amzn-s3-demo-bucket
--acl private -
Adote a configuração Imposto pelo proprietário do bucket em Propriedade de objeto.
Identificar as solicitações que exigiram uma ACL para autorização
Para identificar solicitações do Amazon S3 que exigiam ACLs para autorização, você pode usar o valor aclRequired
nos logs de acesso do servidor do Amazon S3 ou do AWS CloudTrail. Se a solicitação exigiu uma ACL para autorização ou se você tem solicitações PUT
que especificam uma ACL, a string é Yes
. Se nenhuma ACL for necessária, ou se você estiver configurando uma ACL bucket-owner-full-control
predefinida, ou se as solicitações forem permitidas pela política de bucket, a string de valor aclRequired
será “-
” nos logs de acesso ao servidor do Amazon S3 e estará ausente no CloudTrail. Para obter mais informações sobre valores aclRequired
esperados, consulte Valores aclRequired para solicitações comuns do Amazon S3.
Se você tiver solicitações PutBucketAcl
ou PutObjectAcl
com cabeçalhos que concedam permissões baseadas em ACL, com exceção da ACL bucket-owner-full-control
predefinida, será necessário remover esses cabeçalhos antes de poder desabilitar as ACLs. Caso contrário, as solicitações falharão.
Para todas as outras solicitações que exigiram uma ACL para autorização, migre essas permissões de ACL para políticas de bucket. Depois, remova todas as ACLs do bucket antes de habilitar a configuração imposta pelo proprietário do bucket.
nota
Não remova ACLs de objetos. Caso contrário, as aplicações que dependem de ACLs de objetos para obter permissões perderão o acesso.
Se você perceber que nenhuma solicitação exigiu uma ACL para autorização, será possível continuar desabilitando as ACLs. Para obter mais informações sobre como identificar solicitações, consulte Usar logs de acesso ao servidor do Amazon S3 para identificar solicitações e Identificar solicitações do Amazon S3 usando o CloudTrail.
Revisar e atualizar políticas de bucket que usam chaves de condição relacionadas à ACL
Depois de adotar a configuração Imposto pelo proprietário do bucket para desabilitar ACLs, será possível carregar novos objetos no bucket somente se a solicitação usar ACLs de controle total do proprietário do bucket ou não especificar uma ACL. Antes de desabilitar as ACLs, revise a política de bucket para chaves de condição relacionadas à ACL.
Se a política de bucket usar uma chave de condição relacionada à ACL para exigir a ACL bucket-owner-full-control
pré-configurada (por exemplo, s3:x-amz-acl
), não será necessário atualizar sua política de bucket. A política de bucket a seguir usa s3:x-amz-acl
para exigir a ACL bucket-owner-full-control
pré-configurada para solicitações PutObject
do S3. Essa política ainda requer que o gravador de objetos especifique a ACL bucket-owner-full-control
pré-configurada. No entanto, buckets com ACLs desabilitadas ainda aceitam essa ACL, então as solicitações continuam sendo bem-sucedidas sem necessidade de alterações no lado do cliente.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Only allow writes to my bucket with bucket owner full control",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333
:user/ExampleUser
"
]
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
Porém, se a política de bucket usar uma chave de condição relacionada à ACL que requer uma ACL diferente, será necessário remover essa chave de condição. Este exemplo de política de bucket requer a ACL public-read
pré-configurada para solicitações PutObject
do S3 e devem ser atualizadas antes de desabilitar as ACLs.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Only allow writes to my bucket with public read access",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333
:user/ExampleUser
" ]
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "public-read"
}
}
}
]
}
Exemplo de casos de uso
Os exemplos a seguir mostram como migrar permissões de ACL para políticas de bucket para casos de uso específicos.
Tópicos
Conceder acesso ao grupo de entrega de logs do S3 para registro em log de acesso ao servidor
Para adotar a configuração Imposto pelo proprietário do bucket a fim de desabilitar ACLs para um bucket de destino de logs de acesso ao servidor (também conhecido como bucket-alvo), é necessário migrar permissões de ACL de bucket para o grupo de entrega de logs do S3 para a entidade principal de serviço do registro em 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
-
Adicione a política de bucket a seguir ao bucket de destino, substituindo os valores de exemplo.
aws s3api put-bucket-policy --bucket
amzn-s3-demo-bucket
--policyfile://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:::
/amzn-s3-demo-bucket
EXAMPLE-LOGGING-PREFIX
*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME
" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID
" } } } ] } -
Redefina a ACL do bucket de destino para a ACL padrão.
aws s3api put-bucket-acl --bucket
amzn-s3-demo-bucket
--acl private -
Aplique a configuração Imposto pelo proprietário do bucket para a Propriedade de Objetos no 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
-
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
amzn-s3-demo-bucket
--policy file://policy.json
policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-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:::
amzn-s3-demo-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:::
amzn-s3-demo-bucket
/PREFIX/
*" -
Adote a configuração Imposto pelo proprietário do bucket em Propriedade de objeto.
Conceder ao Amazon ElastiCache (Redis OSS) acesso ao bucket do S3
É possível exportar o backup do ElastiCache (Redis OSS) para um bucket do S3, o que concede a você 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, será necessário migrar essas permissões para uma política de bucket antes de adotar a configuração Imposto 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" } ] }
Como migrar permissões de ACL de bucket ao ElastiCache (Redis OSS) para uma política de bucket
-
Adicione a política de bucket a seguir ao bucket, substituindo os valores de exemplo.
aws s3api put-bucket-policy --bucket
amzn-s3-demo-bucket
--policy file://policy.json
policy.json: { "Version": "2012-10-17", "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:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] } -
Redefina a ACL de bucket para a ACL padrão:
aws s3api put-bucket-acl --bucket
amzn-s3-demo-bucket
--acl private -
Adote a configuração Imposto pelo proprietário do bucket em Propriedade de objeto.