Quero resolver o erro “Access Denied” do Amazon Simple Storage Service (Amazon S3) que recebo quando crio ou atualizo pilhas no AWS CloudFormation.
Resolução
Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Solucionar problemas com o perfil ou a política de usuário do IAM
Certifique-se de que o usuário ou o perfil do AWS Identity and Access Management (AWS IAM) que você usou com o CreateChangeSet or CreateStack tenha as permissões necessárias. Talvez seja necessário anexar uma política que forneça a permissão GetObject à identidade do IAM. O exemplo de política a seguir inclui a permissão GetObject:
{ "Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
}
]
}
Observação: substitua amzn-s3-demo-bucket pelo seu bucket.
Verifique se o arquivo de modelo existe e não contém erros de digitação
Para verificar se o arquivo de modelo existe e não contém erros de digitação, execute o comando list-objects da AWS CLI:
aws s3 list-objects --bucket amzn-s3-demo-bucket --prefix file-path/template-file.json
Observação: substitua amzn-s3-demo-bucket pelo seu bucket e file-path/template-file.json pelo caminho do seu arquivo e arquivo de modelo. Certifique-se de que o URL do modelo não possui espaços extras. Erros de digitação podem causar o erro “S3 Access Denied”.
Verifique se o arquivo de modelo não está vazio
Se o arquivo de modelo existir, mas estiver vazio, você poderá receber a mensagem de erro “S3 Access Denied”. Para verificar se o arquivo de modelo está vazio, execute o comando get-object da AWS CLI:
aws s3api get-object --bucket amzn-s3-demo-bucket --key key-name template-file.txt
Observação: substitua amzn-s3-demo-bucket pelo seu bucket, key-name pelo nome da sua chave e template-file.txt pelo seu arquivo de modelo.
Em seguida, abra o arquivo de modelo.
Verifique a política de bucket do S3 para obter instruções de Negação explícita
Para verificar se o bucket do S3 tem uma declaração de Negação explícita para o perfil do IAM, conclua as seguintes etapas:
- Abra o console do Amazon S3.
- No painel de navegação, clique em Buckets.
- Na lista suspensa Buckets, selecione o bucket que contém o arquivo de modelo.
- Clique na guia Permissões.
- Em Política de bucket, selecione Editar.
- Pesquise instruções que tenham “Efeito”: “Negação” neles.
- Atualize instruções “Efeito”: “Negação” que negam o acesso do perfil do IAM a s3:GetObject ou s3:GetObjectVersion.
- Remova o perfil do IAM que você usa com o CloudFormation.
- Clique em Salvar alterações.
- Crie ou atualize a pilha novamente.
Para obter mais informações, consulte Exemplos de políticas de bucket do Amazon S3.
Valide as configurações de criptografia no bucket do S3 e ative o acesso ao KMS para o perfil do IAM
É possível receber a mensagem de erro “S3 Access Denied” quando o bucket usa uma chave do AWS Key Management Service (KMS) gerenciada pelo cliente para ativar a criptografia. Se você criptografou seu bucket, atualize a política de chave para permitir que a identidade do IAM acesse a chave do KMS.
Conclua as etapas a seguir:
- Abra o console do AWS KMS.
- No painel de navegação, selecione Chaves gerenciadas pelo cliente.
- Na lista de chaves do KMS, selecione o alias ou o ID da chave que criptografa os objetos s3 e, em seguida, selecione a guia Política de chave.
- Use a declaração a seguir para atualizar a política:
{ "Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/IDENTITY"
},
"Resource": "arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}
Observação: substitua arn:aws:iam::111122223333:user/IDENTITY pelo nome do recurso da Amazon (ARN) do seu usuário do IAM e arn:aws:kms:aa-example-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd pelo seu ARN do KMS. Se a identidade do IAM estiver em outra conta da AWS, consulte My Amazon S3 bucket has default encryption using a custom AWS KMS key (Meu bucket do Amazon S3 tem criptografia padrão usando uma chave personalizada do AWS KMS). Como permitir que os usuários façam download pelo bucket e upload para o bucket?
Verifique as permissões da ACL do objeto para o arquivo de modelo
Quando uma conta de destino carrega um arquivo de modelo que a conta de origem possui, o usuário na conta de destino não pode acessar o modelo na conta de origem. Para solucionar esse problema, copie o arquivo de modelo para o bucket do S3 para dar ao proprietário do bucket acesso total ao modelo.
Para dar acesso ao bucket, execute o seguinte comando put-object da AWS CLI:
aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file --acl bucket-owner-full-control
Observação: substitua amzn-s3-demo-bucket pelo seu bucket, key-name pelo nome da sua chave e path-to-file pelo caminho para o seu arquivo.
Para obter mais informações sobre listas de controle de acesso (ACLs), consulte Controlar a propriedade de objetos e desabilitar ACLs para seu bucket.