Ir para o conteúdo

Por que recebo o erro "S3 error: Access Denied" no CloudFormation?

5 minuto de leitura
0

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:

  1. Abra o console do Amazon S3.
  2. No painel de navegação, clique em Buckets.
  3. Na lista suspensa Buckets, selecione o bucket que contém o arquivo de modelo.
  4. Clique na guia Permissões.
  5. Em Política de bucket, selecione Editar.
  6. Pesquise instruções que tenham “Efeito”: “Negação” neles.
  7. Atualize instruções “Efeito”: “Negação” que negam o acesso do perfil do IAM a s3:GetObject ou s3:GetObjectVersion.
  8. Remova o perfil do IAM que você usa com o CloudFormation.
  9. Clique em Salvar alterações.
  10. 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:

  1. Abra o console do AWS KMS.
  2. No painel de navegação, selecione Chaves gerenciadas pelo cliente.
  3. 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.
  4. 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.

AWS OFICIALAtualizada há um ano