Por que meu trabalho no AWS Glue retorna o erro 403 Acesso negado?

8 minuto de leitura
0

Meu trabalho do AWS Glue retorna o erro 403 Acesso negado quando o trabalho tenta ler/gravar em um bucket do Amazon Simple Storage Service (Amazon S3).

Descrição breve

Normalmente, você recebe um erro de acesso negado devido a um dos seguintes motivos:

  • O perfil do AWS Identity and Access Management (IAM) não tem as permissões necessárias para acessar o bucket.
  • As políticas de bucket do Amazon S3 não aceitam as permissões necessárias para o perfil do IAM.
  • O proprietário do bucket do S3 é diferente do proprietário do objeto.
  • A política de endpoint da Amazon Virtual Private Cloud (Amazon VPC) não inclui as permissões necessárias para acessar o bucket do S3.
  • O objeto é criptografado pelo AWS Key Management Service (AWS KMS), e a política do AWS KMS não concede as permissões mínimas necessárias ao perfil do IAM para usar a chave.
  • O bucket do S3 tem o Requester Pays ativado.
  • O acesso ao bucket do S3 é restrito pelas políticas de controle de serviços do AWS Organizations.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Resolução

Certifique-se de que o perfil do IAM tenha as permissões necessárias para acessar o bucket do S3

O perfil do IAM que executa o trabalho do AWS Glue precisa acessar o bucket do S3. Você pode conceder as permissões necessárias ao perfil do IAM anexando uma política do IAM ao perfil do IAM. Também é uma prática recomendada anexar a política gerenciada do AWSGlueServiceRole ao perfil do IAM para confirmar que as permissões básicas de trabalho do AWS Glue foram fornecidas. Além disso, crie e anexe uma política gerenciada pelo cliente para obter permissões para colocar objetos do S3 durante a gravação.

Faça o seguinte para atualizar as permissões do perfil do IAM para acessar o bucket:

1.    Abra o console do IAM.

2.    Abra o perfil do IAM que está associada ao trabalho do AWS Glue e requer acesso ao bucket.

3.    Na guia Permissões do usuário/perfil do IAM, expanda cada política para ver seu documento de política JSON.

4.    Nos documentos de política do JSON, procure por políticas com o nome do bucket. Em seguida, confirme se essas políticas permitem as ações corretas do S3 no bucket.

5.    Se o perfil do IAM não conceder o acesso necessário ao bucket, então adicione uma política que conceda as permissões corretas. Por exemplo, a seguinte política do IAM concede ao perfil do IAM acesso para colocar objetos (s3:PutObject) no bucket do S3 DOC-EXAMPLE-BUCKET:

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

Certifique-se de substituir DOC-EXAMPLE-BUCKET na política pelo nome do seu bucket do S3.

Certifique-se de que a política de bucket conceda as permissões necessárias para o perfil do IAM

Revise a política de bucket para saber o seguinte:

  • Qualquer declaração que negue explicitamente o acesso do perfil do IAM ao bucket
  • Quaisquer permissões e condições ausentes que possam restringir o acesso do perfil do IAM

Faça o seguinte para revisar e modificar a política de bucket para conceder o acesso necessário ao perfil do IAM:

1.    Abra o console do Amazon S3.

2.    Escolha Buckets no painel de navegação.

3.    Na lista de buckets, abra o bucket que você deseja verificar.

4.    Escolha Permissões e, em seguida, role para baixo até a seção Política de bucket.

5.    Analise a política do bucket para ver todas as declarações que negam o acesso da função ao bucket.

6.    Modifique a política do bucket para editar ou remover quaisquer instruções que neguem o acesso do perfil do IAM ao bucket.

Para exemplos de políticas de bucket, consulte Exemplos de políticas de bucket.

Certificar-se de que o proprietário do bucket do S3 tenha acesso aos objetos

Por padrão, um objeto do S3 pertence à conta da AWS que o carregou. Isso vale inclusive para buckets que pertencem a outra conta. Se outras contas puderem fazer upload de objetos no seu bucket, verifique qual conta possui os objetos que seus usuários/perfis não podem acessar. Você pode verificar o proprietário do objeto executando o comando GetObjectAcl.

Se usuários/perfis do IAM de outras contas enviarem objetos para seu bucket do S3, configure a propriedade de objetos do S3. Em seguida, adicione uma política de bucket que exija que objetos sejam carregados com a lista de controle de acesso (ACL) bucket-owner-full-control. A adição da política de bucket 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 mais informações, consulte Quando outras contas da AWS fazem upload de objetos para meu bucket do Amazon S3, como posso exigir que elas concedam a mim o controle total desses objetos?

Certifique-se de que a política de endpoint do Amazon VPC permita as ações necessárias no bucket do S3

Certifique-se de que a política de endpoint da VPC inclua as permissões necessárias para acessar os buckets e objetos do S3 quando as duas condições a seguir forem verdadeiras:

  • Seu trabalho do AWS Glue lê ou grava objetos no S3.
  • A conexão é roteada ao S3 usando um endpoint de VPC.

Por exemplo, a seguinte política do endpoint da VPC permite acesso somente ao bucket DOC-EXAMPLE-BUCKET. Se o seu bucket não estiver listado como um recurso permitido na política, os usuários/perfis não poderão acessar seu bucket por meio do endpoint de VPC.

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Certifique-se de substituir DOC-EXAMPLE-BUCKET na política pelo nome do seu bucket do S3.

Se usuários/perfis carregarem objetos com uma ACL, você deverá atualizar a política de endpoint da VPC para conceder acesso à ação PutObjectAcl. Por exemplo:

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Certifique-se de que a política da chave do AWS KMS permita o acesso ao perfil do IAM

Se a sua tarefa de extração, transformação e carregamento (ETL) lê ou grava dados criptografados no Amazon S3, certifique-se do seguinte:

  • A política do perfil do IAM inclui as permissões necessárias para as ações do AWS KMS.
  • A política da chave do AWS KMS inclui as permissões necessárias para o perfil do IAM.

Inclua as seguintes permissões na política do perfil do IAM para permitir as ações necessárias do AWS KMS:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:Encrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }
}

Certifique-se de substituir o ARN na política pelo ARN de sua escolha.

Para mais informações, consulte Configurar a criptografia no AWS Glue.

Analise a política de chaves do KMS para verificar se ela permite o acesso ao perfil do trabalho do AWS Glue. Para mais informações sobre as principais políticas, consulte Usar políticas de chaves no AWS KMS.

Certifique-se de incluir o cabeçalho Requester Pays se o bucket tiver o Requester Pays ativado

Se o bucket do S3 tiver Requester Pays ativado, todas as solicitações para o bucket a partir da tarefa do AWS Glue deverão incluir o cabeçalho Requester Pays. As solicitações do AWS Glue para o Amazon S3 não incluem o cabeçalho Requester Pays por padrão. Sem esse cabeçalho, uma chamada de API para um bucket do Requester Pays falha com uma exceção de acesso negado. Para adicionar o cabeçalho Requester Pays a um script ETL, use hadoopConfiguration().set() para incluir fs.s3.useRequesterPaysHeader na variável GlueContext ou na variável de sessão do Apache Spark.

Para mais informações, consulte Como posso acessar os buckets do Amazon S3 Requester Pays do AWS Glue, Amazon EMR ou Amazon Athena?

Certifique-se de que as políticas de controle de serviços do AWS Organizations permitam o acesso ao S3

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 de Acesso negado.

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

Para mais informações, consulte Habilitar todos os recursos na sua organização.


Informações relacionadas

Como corrijo erros 403 Access Denied do Amazon S3?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos