Como solucionar erros 403 Acesso Negado do Amazon S3?

12 minuto de leitura
0

Meus usuários estão tentando acessar objetos em um bucket do Amazon Simple Storage Service (Amazon S3), mas o Amazon S3 está retornando o erro 403 Acesso Negado.

Resolução

Usar o documento de automação do AWS Systems Manager

Use o documento de automação AWSSupport-TroubleshootS3PublicRead no AWS Systems Manager. Este documento de automação ajuda a diagnosticar problemas na leitura de objetos de um bucket público do S3 que você especifica.

Verificar a propriedade do bucket e do objeto

Para erros de AccessDenied das solicitações GetObject ou HeadObject, verifique se o objeto também pertence ao proprietário do bucket. Além disso, verifique se o proprietário do bucket tem permissões de leitura ou controle total na lista de controle de acesso (ACL).

Confirmar a conta que possui os objetos

Por padrão, um objeto do S3 pertence à conta da AWS que fez seu carregamento. Isso vale mesmo quando o bucket pertence a outra conta. Se outras contas puderem carregar objetos no seu bucket, verifique a conta que possui os objetos que seus usuários não conseguem acessar.

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

1.    Execute o comando list-buckets da AWS Command Line Interface (AWS CLI) para obter o ID canônico do Amazon S3 para sua conta consultando o ID do proprietário.

aws s3api list-buckets --query "Owner.ID"

2.    Execute o comando list-objects para obter o ID canônico do Amazon S3 da conta que possui o objeto que os usuários não conseguem acessar. Substitua DOC-EXAMPLE-BUCKET pelo nome do seu bucket e exampleprefix pelo valor do seu prefixo.

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

Dica: use o comando list-objects para verificar múltiplos objetos.

3.    Se os IDs canônicos não corresponderem, você não é o proprietário do objeto. O proprietário do objeto pode conceder a você o controle total do objeto executando o comando put-object-acl. Substitua DOC-EXAMPLE-BUCKET pelo nome do bucket que contém os objetos. Substitua exampleobject.jpg pelo nome da sua chave.

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 objeto para bucket-owner-full-control, o proprietário do bucket poderá acessar o objeto. Entretanto, a alteração da ACL por si só 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 sobre si mesmo.

Copiar todos os novos objetos para um bucket em outra conta

1.    Defina uma política do bucket que exija que os objetos sejam carregados com a ACL bucket-owner-full-control.

2.    Ative e defina a propriedade de objetos do S3 como preferencial do proprietário do bucket no Console de Gerenciamento da AWS.

O proprietário do objeto será então atualizado automaticamente para o proprietário do bucket quando o objeto for carregado com a ACL bucket-owner-full-control.

Criar um perfil do IAM com permissões para o seu bucket

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

Verificar a política do bucket ou as políticas de usuário do IAM

Analise a política do bucket ou as políticas de usuário do IAM associadas em busca de declarações que possam estar negando acesso. Verifique se as solicitações para o bucket atendem a todas as condições da política do bucket ou das políticas do IAM. Verifique se há declarações de negação incorretas, ações ausentes ou espaçamento incorreto em uma política.

Condições da declaração de negação

Verifique as declarações de negação em busca de condições que bloqueiam o acesso com base no seguinte:

  • autenticação multifator (MFA)
  • chaves de criptografia
  • endereço IP específico
  • VPCs ou endpoints da VPC específicos
  • usuários ou perfis específicos do IAM

Observação: se você precisar que a MFA e os usuários enviem solicitações por meio da AWS CLI, certifique-se de que os usuários configurem a AWS CLI para usar a MFA.

Por exemplo, na política do bucket a seguir, o Statement1 permite acesso público para baixar objetos (s3:GetObject) do DOC-EXAMPLE-BUCKET. No entanto, o Statement2 nega explicitamente a todos o acesso para baixar objetos do DOC-EXAMPLE-BUCKET, a menos que a solicitação seja do endpoint da VPC vpce-1a2b3c4d. Nesse caso, a declaração de negação tem precedência. Isso significa que usuários que tentarem baixar objetos de fora do vpce-1a2b3c4d não terão acesso.

{
  "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": "*"
    }
  ]
}

Políticas do bucket ou políticas do IAM

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 inclui permissão para a 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 de Acesso negado.

{
  "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"
        ]
      }
    }
  ]
}

Outros erros de política

Verifique se não há espaços extras ou ARNs incorretos na política do bucket ou nas políticas de usuário do IAM.

Por exemplo, se uma política do IAM tiver um espaço extra no nome de recurso da Amazon (ARN) da seguinte maneira: arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. Nesse caso, o ARN é avaliado incorretamente como arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/ e fornece ao usuário do IAM um erro de acesso negado.

Confirmar se os limites de permissões do IAM permitem o acesso ao Amazon S3

Examine 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ões do IAM permitem o acesso ao Amazon S3.

Verificar as configurações do Bloqueio de Acesso Público do Amazon S3 do bucket

Se você estiver recebendo erros de Acesso negado em solicitações de leituras públicas que são permitidas, verifique as configurações do Bloqueio de Acesso Público do Amazon S3 do bucket.

Examine as configurações do Bloqueio de Acesso Público do S3 no nível da conta e do bucket. Essas configurações podem substituir as permissões que permitem o acesso público de leitura. O Bloqueio de Acesso Público do Amazon S3 pode ser aplicado a buckets individuais ou contas da AWS.

Examinar as credenciais do usuário

Examine as credenciais que seus usuários configuraram para acessar o Amazon S3. Os SDKs da AWS e a AWS CLI devem ser configurados para usar as credenciais do usuário ou do perfil do IAM com acesso ao seu bucket.

Para a AWS CLI, execute o comando configure para verificar as credenciais configuradas:

aws configure list

Se os usuários acessarem o bucket por meio de uma instância do Amazon Elastic Compute Cloud (Amazon EC2), verifique se a instância está usando o perfil correto. Conecte-se à instância e execute o comando get-caller-identity:

aws sts get-caller-identity

Examinar as credenciais de segurança temporárias

Se os usuários receberem erros de Acesso negado de credenciais de segurança temporárias concedidas usando o AWS Security Token Service (AWS STS), examine a política de sessão associada. Quando um administrador cria credenciais de segurança temporárias usando a chamada de API AssumeRole ou o comando assume-role, ele pode transmitir políticas específicas da sessão.

Para encontrar as políticas de sessão associadas aos erros de Acesso negado do Amazon S3, busque os eventos AssumeRole no histórico de eventos do AWS CloudTrail. Certifique-se de buscar os eventos AssumeRole no mesmo período das solicitações de acesso ao Amazon S3 que falharam. Em seguida, examine o campo requestParameters nos logs relevantes do CloudTrail para ver se há alguma política ou parâmetros policyArns. Confirme se a política associada ou o ARN da política concede as permissões necessárias do Amazon S3.

Por exemplo, o seguinte trecho 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 ao DOC-EXAMPLE-BUCKET:

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

Confirmar se a política de endpoint da Amazon VPC inclui as permissões corretas para acessar seus buckets e objetos do S3

Se os usuários acessarem o bucket com uma instância do EC2 roteada por meio de um endpoint da VPC, verifique a política de endpoint da VPC.

Por exemplo, a seguinte política de endpoint da VPC permite acesso somente a DOC-EXAMPLE-BUCKET. Usuários que enviarem solicitações por meio desse endpoint da VPC não poderão acessar nenhum outro bucket.

{
  "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": "*"
    }
  ]
}

Examinar a política do IAM do seu ponto de acesso do Amazon S3

Se você usar um ponto de acesso do Amazon S3 para gerenciar o acesso ao bucket, examine a política do IAM do ponto de acesso.

As permissões concedidas em uma política de ponto de acesso só são efetivas se a política do bucket subjacente também permitir o mesmo acesso. Confirme se a política do bucket e a política do ponto de acesso concedem as permissões corretas.

Confirmar se o objeto não é ausente ou se contém caracteres especiais

Verifique se o objeto solicitado existe no bucket. Caso contrário, a solicitação não encontrará o objeto e o Amazon S3 presumirá que o objeto não existe. Você receberá um erro de Acesso negado (em vez dos erros 404 Não Encontrado) se não tiver as permissões s3:ListBucket adequadas.

Um objeto que tem um caractere especial (como um espaço) requer tratamento especial para recuperação.

Execute o comando head-object da AWS CLI para verificar se existe um objeto no bucket. Substitua DOC-EXAMPLE-BUCKET pelo nome do bucket que você deseja verificar.

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

Se o objeto existir no bucket, o erro de Acesso negado não está mascarando um erro 404 Não Encontrado. Verifique outros requisitos de configuração para resolver o erro de Acesso negado.

Se o objeto não estiver no bucket, o erro de Acesso negado está mascarando um erro 404 Não Encontrado. Solucione o problema relacionado ao objeto ausente.

Verificar a configuração de criptografia do AWS KMS

Observe o seguinte sobre a criptografia do AWS KMS (SSE-KMS):

  • Se um usuário do IAM não conseguir acessar um objeto para o qual o usuário tenha permissão total, verifique se o objeto está criptografado pelo SSE-KMS. É possível usar o console do Amazon S3 para visualizar as propriedades do objeto, que incluem as informações de criptografia do lado do servidor do objeto.
  • Se o objeto for criptografado pelo SSE-KMS, certifique-se de que a política de chaves do KMS conceda ao usuário do IAM as permissões mínimas necessárias para usar a chave. Por exemplo, se o usuário do IAM estiver usando a chave somente para baixar um objeto do S3, o usuário do IAM deverá ter permissões kms:Decrypt. Para obter mais informações, consulte Allows access to the AWS account and enables IAM policies.
  • Se a identidade e a chave do IAM estiverem na mesma conta, as permissões kms:Decrypt devem ser concedidas usando a política de chave. A política de chave deve fazer referência à mesma identidade do IAM que a política do IAM.
  • Se o usuário do IAM pertencer a uma conta diferente daquela da chave do AWS KMS, essas permissões também deverão ser concedidas na política do IAM. Por exemplo, para baixar os objetos criptografados pelo SSE-KMS, as permissões kms:Decrypt devem ser especificadas na política de chave e na política do IAM. Para obter mais informações sobre o acesso entre contas entre o usuário do IAM e a chave do KMS, consulte Allowing users in other accounts to use a KMS key.

Confirmar se o parâmetro request-payer foi especificado pelos usuários (se você estiver usando o Pagamento pelo solicitante)

Se o bucket tiver o Pagamento pelo solicitante ativado, então os usuários de outras contas deverão especificar o parâmetro request-payer ao enviarem solicitações para o bucket. Para verificar se o Pagamento pelo solicitante está ativado, use o console do Amazon S3 para visualizar as propriedades do bucket.

O seguinte exemplo de comando da AWS CLI inclui o parâmetro correto para acessar um bucket entre contas com o Pagamento pelo solicitante:

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

Verificar sua política de controle de serviços do AWS Organizations

Se você estiver usando o AWS Organizations, verifique as políticas de controle de serviço para ter certeza de que o acesso ao Amazon S3 está permitido. As políticas de controle de serviço especificam as permissões máximas para as contas afetadas. Por exemplo, a política a seguir nega explicitamente o acesso ao Amazon S3 e resulta em um erro de Acesso negado:

{
  "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 em sua organização.

Informações relacionadas

Solução de problemas do Amazon S3

Obter IDs de solicitação do Amazon S3 para o AWS Support

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos