Como corrijo erros 403 Access Denied do Amazon S3?

Última atualização: 08/01/2021

Meus usuários estão tentando acessar objetos do bucket do Amazon Simple Storage Service (Amazon S3), mas o Amazon S3 está exibindo o erro 403 Access Denied. Como posso corrigir isso?

Descrição breve

Para corrigir erros Access Denied do Amazon S3, confira o seguinte:

  • A propriedade do bucket e do objeto
  • A política do bucket ou as políticas de usuários do AWS Identity and Access Management (IAM)
  • Os limites de permissão do IAM
  • As configurações do Amazon S3 Block Public Access
  • As credenciais de acesso ao Amazon S3
  • As credenciais temporárias de segurança
  • A política do endpoint da Amazon Virtual Private Cloud (Amazon VPC)
  • A política do ponto de acesso ao Amazon S3
  • A ausência de objetos ou objetos com caracteres especiais
  • A criptografia do AWS Key Management Service (AWS KMS)
  • O status da opção Requester Pays (Pagamento a cargo do solicitante) no bucket
  • A política de controle de serviço do AWS Organizations

Observação: também é possível usar o documento de automação AWSSupport-TroubleshootS3PublicRead no AWS Systems Manager. Esse documento ajuda a identificar erros na leitura de objetos de um bucket público especificado do S3.

Resolução

Propriedade do bucket e do objeto

Por padrão, os objetos do Amazon S3 pertencem à conta da AWS que fez upload deles. Isso vale inclusive para buckets que pertencem a outra conta. Se outras contas puderem fazer upload de objetos em seu bucket, confira qual conta tem os objetos que os usuários não podem acessar:

1.    Execute o comando list-buckets na AWS Command Line Interface (AWS CLI) para obter o ID-padrão do Amazon S3 referente a sua conta:

aws s3api list-buckets --query Owner.ID

Observação: caso você receba erros ao executar comandos na AWS CLI, verifique se está usando a versão mais recente da AWS CLI.

2.    Execute o comando list-objects para obter o ID-padrão do Amazon S3 referente à conta com o objeto que os usuários não podem acessar:

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix exampleprefix

Dica: é possível usar o comando list-objects para conferir vários objetos.

3.    Se os IDs-padrão não são iguais, você não é o proprietário do objeto, só do bucket. O proprietário do objeto pode executar o comando put-object-acl para conceder a você o controle total do objeto:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg --acl bucket-owner-full-control

4.    Depois que o proprietário do objeto alterar a ACL do item para bucket-owner-full-control, o proprietário do bucket poderá acessar o objeto. Porém, a alteração exclusiva da ACL não muda o proprietário do objeto. Para alterar o proprietário do objeto para a conta do bucket, execute o comando cp na conta do bucket para copiar o objeto e substitui-lo por ele mesmo.

Para copiar todos os objetos novos para um bucket de outra conta, defina uma política do bucket que exija que o upload dos objetos seja feito com a ACL bucket-owner-full-control. Depois, habilite o recurso S3 Object Ownership (Propriedade do objeto do Amazon S3). Essa ação mudará automaticamente o proprietário do objeto para o do bucket quando o upload do objeto for feito com a ACL bucket-owner-full-control.

Para habilitar permissões permanentes entre contas, crie uma função do IAM em sua conta com permissões sobre o bucket. Depois, conceda a outra conta da AWS a permissão para assumir a função do IAM. Para obter mais informações, consulte Tutorial: Delegar acesso a contas da AWS usando funções do IAM.

Política do bucket ou políticas de usuários do IAM

Verifique se na política do bucket ou nas políticas associadas de usuários do IAM há instruções que possam negar o acesso incorretamente. Confira se há alguma instrução incorreta de negação, se falta alguma ação ou se o espaçamento na política está errado:

1.    Veja se nas instruções de negação há condições que bloqueiam o acesso com base na autenticação multifator (MFA), nas chaves de criptografia, em um endereço IP específico ou em determinado endpoint da VPC. Verifique se as solicitações ao bucket cumprem as condições da política do item ou das políticas do IAM. Caso contrário, o acesso será negado.

Observação: se você exigir a MFA e os usuários enviarem solicitações pela AWS CLI, lembre a eles que precisam configurar a AWS CLI para usar a MFA.

Por exemplo, na política do bucket a seguir, a Statement1 (Instrução1) permite o acesso público ao download de objetos (s3:GetObject) de DOC-EXAMPLE-BUCKET. Porém, a Statement2 (Instrução2) nega explicitamente a todos o acesso ao download de objetos de DOC-EXAMPLE-BUCKET, a menos que a solicitação venha do endpoint vpce-1a2b3c4d da VPC. Nesse caso, a instrução de negação prevalece. Isso significa que os usuários que tentarem fazer download de objetos de fora do vpce-1a2b3c4d terão o acesso negado.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": "*"
    },
    {
      "Sid": "Statement2",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
      },
      "Principal": "*"
    }
  ]
}

2.    Confira se a política do bucket ou as políticas do IAM permitem as ações do Amazon S3 de que os usuários precisam. Por exemplo, a política do bucket a seguir não concede a permissão à ação s3:PutObjectAcl. Se o usuário do IAM tentar modificar a lista de controle de acesso (ACL) de um objeto, ele receberá um erro Access Denied.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Dave"
        ]
      }
    }
  ]
}

3.    Confira se não há espaços extras na política do bucket ou nas políticas de usuários do IAM. Por exemplo, a política do IAM a seguir tem um espaço extra no nome do recurso da Amazon (ARN) arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. Por causa desse espaço, o ARN é interpretado de modo incorreto como arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/*. Isso significa que o usuário do IAM não tem permissões aos objetos corretos.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3::: DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Limites de permissão do IAM

Veja os limites de permissão do IAM definidos nas identidades do serviço que estão tentando acessar o bucket. Confirme se os limites permitem o acesso ao Amazon S3.

Configurações do Amazon S3 Block Public Access

Caso os usuários estejam recebendo erros Access Denied ao fazer solicitações públicas de leitura que deveriam ser permitidas, verifique as configurações do Amazon S3 Block Public Access do bucket. Elas podem prevalecer sobre as permissões de acesso público de leitura. As configurações do Amazon S3 Block Public Access podem ser aplicadas a buckets ou contas específicos da AWS.

Credenciais de acesso ao Amazon S3

Confira as credenciais que os usuários configuraram para acessar o Amazon S3. Os SDKs AWS e a AWS CLI precisam ser configurados para usar as credenciais do usuário ou da função do IAM com acesso ao bucket.

Na AWS CLI, execute o comando configure para conferir as credenciais configuradas:

aws configure list

Caso os usuários acessem o bucket por uma instância do Amazon Elastic Compute Cloud (Amazon EC2), verifique se ela está usando a função correta. Conecte-se à instância e execute o comando get-caller-identity:

aws sts get-caller-identity

Credenciais temporárias de segurança

Caso os usuários recebam erros Access Denied das credenciais temporárias de segurança fornecidas usando o AWS Security Token Service (AWS STS), verifique a política associada.

Ao criar essas credenciais usando a chamada de API AssumeRole ou o comando assume-role, o administrador pode definir políticas para sessões específicas.

Para identificar as políticas de sessões associadas aos erros Access Denied do Amazon S3, confira os eventos AssumeRole no histórico de eventos do AWS CloudTrail. Lembre-se de verificar os eventos AssumeRole no mesmo período das solicitações de acesso ao Amazon S3 que falharam. Depois, confira o campo requestParameters dos logs relevantes do CloudTrail para ver se há alguma política ou parâmetros policyArns. Confirme se a política ou o ARN da política associada concede as permissões necessárias ao Amazon S3.

Por exemplo, o seguinte trecho de um log do CloudTrail mostra que as credenciais temporárias têm uma política de sessão em linha que concede permissões s3:GetObject a DOC-EXAMPLE-BUCKET:

"requestParameters": {
        "roleArn": "arn:aws:iam::123412341234:role/S3AdminAccess",
        "roleSessionName": "s3rolesession",
        "policy": "{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n  {\n  \"Effect\": \"Allow\",\n           
         \"Action\": [\n   \"s3:GetObject\"\n ],\n    \"Resource\": [\n \"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*\"\n  ]\n   }  }\n    ]\n}\n"
    }

Política de endpoints da Amazon VPC

Se os usuários acessam o bucket com uma instância do EC2 roteada por um endpoint da VPC, confira a política de endpoints da VPC. Verifique se as permissões de acesso aos buckets e objetos do S3 estão corretas.

Por exemplo, a política de endpoints da VPC a seguir permite o acesso somente a DOC-EXAMPLE-BUCKET. Os usuários que enviarem solicitações pelo endpoint da VPC não poderão acessar outros buckets.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": "*"
    }
  ]
}

Política do ponto de acesso do Amazon S3

Caso você use um ponto de acesso do Amazon S3 para gerenciar o acesso ao bucket, verifique a política do ponto de acesso do IAM. Confirme se a política concede as permissões corretas.

Ausência de objetos ou objetos com caracteres especiais

Confirme se o objeto solicitado está no bucket. Lembre-se também de que objetos com caracteres especiais (como espaço) exigem um cuidado único para recuperar o objeto. Caso contrário, a solicitação não identificará o objeto, e o Amazon S3 presumirá que ele não existe. Nesse caso, você receberá um erro Access Denied (em vez de erros 404 Not Found) caso não tenha as devidas permissões s3:ListBucket.

Execute o comando head-object na AWS CLI para conferir se o objeto está no bucket:

aws s3api head-object --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg

Caso ele esteja, o erro Access Denied não está encobrindo um erro 404 Not Found. Verifique outros requisitos de configuração para corrigir o erro Access Denied.

Se o objeto não está no bucket, o erro Access Denied está encobrindo um erro 404 Not Found. Solucione o problema relacionado ao objeto ausente.

Criptografia do AWS KMS

Caso um usuário do IAM não consiga acessar um objeto ao qual ele tem todas as permissões, confira se o item está criptografado pelo AWS KMS. Use o console do Amazon S3 para ver as propriedades do objeto, como as informações de criptografia.

Se o item estiver criptografado pelo KMS verifique se a política de chaves do KMS concede as permissões ao usuário do IAM para as seguintes ações:

"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]

Caso o usuário seja de uma conta diferente da chave do AWS KMS, as permissões também precisarão ser concedidas na política do IAM.

Status da opção Requester Pays (Pagamento a cargo do solicitante) no bucket

Se a opção Requester Pays (Pagamento a cargo do solicitante) do bucket estiver habilitada, os usuários de outras contas precisarão especificar o parâmetro request-payer ao enviar solicitações ao bucket. Caso contrário, eles receberão um erro Access Denied. Para conferir se a opção está habilitada, use o console do Amazon S3 e veja as propriedades do bucket.

O seguinte exemplo de comando na AWS CLI apresenta o parâmetro correto para acessar um bucket com Requester Pays (Pagamento a cargo do solicitante):

aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester

Política de controle de serviço do AWS Organizations

Se você estiver usando o AWS Organizations, confira as políticas de controle de serviço para garantir que o acesso ao Amazon S3 é permitido. Por exemplo, a política a seguir nega explicitamente o acesso ao Amazon S3 e gera um erro Access Denied.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Para obter mais informações sobre os recursos do AWS Organizations, consulte Habilitar todos os recursos da organização.


Este artigo foi útil?


Precisa de ajuda com faturamento ou suporte técnico?