Como corrijo erros 403 Access Denied do Amazon S3?

Data da última atualização: 1/11/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 solucionar isso?

Descrição breve

Para solucionar problemas de erros de Access Denied do Amazon S3, verifique o seguinte:

  • Propriedade do bucket e do objeto
  • Política de bucket ou políticas de usuário do AWS Identity and Access Management (IAM)
  • Limites de permissão do IAM
  • Configurações do Amazon S3 Block Public Access
  • Credenciais de acesso ao Amazon S3
  • Credenciais temporárias de segurança
  • Política de endpoint do Amazon Virtual Private Cloud (Amazon VPC)
  • Política do ponto de acesso do Amazon S3
  • Ausência de objetos ou objetos com caracteres especiais
  • Criptografia para AWS Key Management Service (AWS KMS).
  • Pagamento a cargo do solicitante habilitado no bucket.
  • Política de controle de serviço do AWS Organizations

Observação: você também pode usar o documento de automação AWSSupport-TroubleshootS3PublicRead no AWS Systems Manager. Este documento de automação ajuda a identificar problemas na leitura de objetos de um bucket S3 público que você especifica.

Resolução

Propriedade do bucket e do objeto

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

1.    Execute o comando list-buckets no AWS Command Line Interface (AWS CLI) para obter o ID canônico do Amazon S3 para sua conta:

aws s3api list-buckets --query Owner.ID

Observação: se você receber erros ao executar comandos da AWS CLI, verifique e confirme estar usando a versão mais recente da AWS CLI.

2.    Execute o comando list-objects para obter o ID canônico do Amazon S3 da conta proprietária do 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 canônicos não são iguais, você não é o proprietário do objeto, só do bucket. O proprietário do objeto pode conceder a você controle total do objeto executando o comando put-object-acl:

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 da conta do bucket para copiar o objeto sobre si mesmo.

Para copiar todos os novos objetos para um bucket em outra conta, defina uma política de bucket que exija que os objetos sejam carregados com a ACL bucket-owner-full-control. Em seguida, habilite aPropriedade de objetos do S3. Isso altera automaticamente o proprietário do objeto para o proprietário do bucket quando o objeto é carregado com a ACL bucket-owner-full-control.

Para permissões contínuas entre contas, crie uma função do IAM na sua conta com permissões para o bucket. Depois, conceda a outra conta da AWS a permissão para assumir a função do IAM. Para mais informações, consulte Tutorial: delegue acesso a contas da AWS usando as funções do IAM.

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

Analise a política de bucket ou as políticas de usuário do IAM associadas para ver se há instruções que possam estar negando 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.    Confira 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, espera-se que o acesso seja negado.

Observação: se você exigir que a MFA e os usuários enviem solicitações por meio da AWS CLI, verifique e confirme se os usuários configuraram a AWS CLI para usar a MFA.

Por exemplo, na política de bucket a seguir, Instrução1 permite acesso público para baixar objetos (s3:GetObject) de DOC-EXAMPLE-BUCKET. Porém, a Instrução2 nega explicitamente a todos o acesso para baixar objetos de DOC-EXAMPLE-BUCKET, a menos que a solicitação venha do endpoint vpce-1a2b3c4d do VPC endpoint. Neste caso, a instrução de negação prevalece. Isso significa que os usuários que tentarem baixar 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 é avaliado 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

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

Configurações do Amazon S3 Block Public Access

Se seus usuários estiverem recebendo erros de Access Denied em solicitações de leitura pública que devem ser permitidas, verifique as configurações de acesso público de bloqueio do Amazon S3 do bucket. Elas podem prevalecer sobre as permissões de acesso público de leitura. As configurações de acesso do Amazon S3 Block Public Access podem ser aplicadas a buckets ou contas individuais da AWS.

Credenciais de acesso ao Amazon S3

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

Para a 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. Estabeleça conexão à instância e execute o comando get-caller-identity:

aws sts get-caller-identity

Credenciais temporárias de segurança

Se os usuários receberem erros de Access Denied de credenciais de segurança temporárias concedidas usando o AWS Security Token Service (AWS STS), revise a política associada.

Quando um administrador cria credenciais de segurança temporárias usando a chamada da API AssumeRole ou o comando assume-role, ele pode, opcionalmente, passar políticas específicas da sessão.

Para encontrar as políticas de sessão associadas aos erros de Access Denied do Amazon S3, procure os eventos AssumeRole no histórico de eventos do AWS CloudTrail. Não se esqueça 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 a política associada ARN concede as permissões necessárias do Amazon S3.

Por exemplo, o snippet a seguir de um log do CloudTrail mostra que as credenciais temporárias incluem uma política de sessão em linha que concede permissões s3:GetObject para 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 acessarem seu bucket com uma instância do EC2 roteada por meio de um VPC endpoint, confira a política de endpoint da VPC. Verifique se a política de endpoint da VPC inclui as permissões corretas para acessar seus buckets e objetos do S3.

Por exemplo, a seguinte política de VPC endpoint permite acesso somente a DOC-EXAMPLE-BUCKET. Os usuários que enviarem as 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

Se você usar um ponto de acesso do Amazon S3 para gerenciar o acesso ao seu bucket, analise a política do IAM do ponto de acesso. 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. Observe também que um objeto que tem um caractere especial (como um espaço) requer tratamento especial 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. Como resultado, você recebe um erro Access Denied (em vez de erros 404 Not Found) se não tiver as permissões s3:ListBucket adequadas.

Execute o comando head-object da AWS CLI para verificar se existe um objeto 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 resolver o erro Access Denied.

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

Criptografia do AWS KMS

Observe o seguinte sobre a criptografia do AWS KMS:

Pagamento a cargo do solicitante habilitado no bucket

Se o intervalo tiver pagamento a cargo do solicitante habilitado, os usuários de outras contas deverão especificar o parâmetro request-payer quando enviarem solicitações para o intervalo. Caso contrário, eles receberão um erro Access Denied. Para verificar se o pagamento a cargo do solicitante está habilitado, você pode usar o console do Amazon S3 para visualizar as propriedades do bucket.

O exemplo a seguir de comando da AWS CLI inclui o parâmetro correto para acessar um bucket com 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 ter certeza de que o acesso ao Amazon S3 está 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 Habilitação de todos os recursos na sua organização.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?