Como soluciono os erros 403 Acesso negado do meu bucket do Amazon S3 em que todos os recursos são da mesma conta da AWS?

5 minuto de leitura
0

Quero acessar meu bucket do Amazon Simple Storage Service (Amazon S3). Todos os recursos relevantes são da mesma conta da AWS. No entanto, recebo um erro "403 Acesso negado".

Breve descrição

Se você executa uma solicitação proibida para seu bucket do Amazon S3, o serviço retorna um erro "403 Acesso negado". Para solucionar manualmente os erros 403 Acesso negado, consulte Como corrijo erros 403 Acesso negado do Amazon S3?

Você também pode usar o runbook AWSSupport-TroubleshootS3AccessSameAccount do AWS Systems Manager para ajudar a diagnosticar problemas de acesso negado no seu bucket do Amazon S3. O runbook avalia o nível de acesso concedido ao solicitante em seu recurso do Amazon S3 para todos os recursos relevantes da mesma conta da AWS. Isso inclui políticas baseadas em acesso, usuários e recursos associadas ao recurso do Amazon S3. Também inclui o usuário ou o perfil do AWS Identity and Access Management (IAM) que está especificado nos parâmetros de entrada.

Observação: AWSSupport-TroubleshootS3AccessSameAccount não avalia permissões para recursos entre contas. Além disso, o solicitante deve estar na mesma conta da AWS que o bucket ou objeto do Amazon S3.

Resolução

Etapas necessárias

Siga estas etapas para executar o runbook AWSSupport-TroubleshootS3AccessSameAccount no console do Systems Manager:

1.    Abra o console do Systems Manager.

2.    No painel de navegação, escolha Automação.

3.    Escolha Executar automação.

4.    Em Escolher documento, escolha a guia De propriedade da Amazon.

5.    Na barra de pesquisa Documentos de automação, escolha o filtro Prefixo do nome do documento na lista suspensa. Em seguida, escolha Igual a (Iguais) na lista suspensa e insira AWSSupport-TroubleshootS3AccessSameAccount. Em seguida, pressione Enter.

6.    Selecione AWSSupport-TroubleshootS3AccessSameAccount.

7.    Escolha Avançar.

8.    Selecione Execução simples.

9.    Para S3ResourceArn, insira o ARN do bucket ou objeto do S3 que você deseja solucionar. Por exemplo, para testar o upload ou o download de um objeto.

arn:aws:s3:::bucket_name/key_name

10.    Em S3Action, escolha a ação do S3 que você deseja que o runbook avalie.

11.    Em RequesterARN, insira o ARN do usuário ou perfil do IAM cujo nível de acesso você deseja encontrar para o recurso específico do S3:

arn:aws:iam::123456789012:user/user_name or arn:aws:iam::123456789012:role/example-rol

12.    Escolha Executar.

Use Status de execução para acompanhar o progresso do documento. Depois que o status mudar para Êxito, revise os resultados listados na seção Saídas. Os resultados incluem códigos de erro para cada objeto avaliado.
Observação: para revisar o resultado de uma etapa individual na avaliação, escolha o ID de etapa relevante em Etapas executadas.

Etapas opcionais

As etapas a seguir são opcionais.

  • Para AutomationAssumeRole, você pode selecionar um perfil do IAM para o Systems Manager assumir para enviar solicitações ao seu bucket. Se você deixar esse campo em branco, o Systems Manager usará a identidade do IAM que você está usando para configurar o documento. Para obter mais informações, consulte a seção Permissões do IAM necessárias para AutomationAssumeRole.
    Importante: a política de confiança do perfil do IAM que você selecionou deve permitir que o Systems Manager Automation assuma o perfil. Além disso, o perfil do IAM deve ter permissão para executar o runbook AWSSupport-TroubleshootS3AccessSameAccount.

  • Se o ARN do IAM for uma função e você quiser fornecer um nome de sessão específico, em RequesterRoleSessionName, insira o nome da sessão.

  • Se o objeto tiver várias versões, para S3ObjectVersionId, insira o VersionId do objeto. Esse parâmetro permite especificar a versão do objeto cujo contexto de acesso você deseja avaliar.

  • Se for relevante para a ação, insira o ARN da chave do KMS para KmsKeyArn. Por exemplo, para testar o download de um objeto criptografado com uma chave do KMS.

  • Para o VpcEndpointId, você pode inserir o ID do endpoint da Amazon Virtual Private Cloud (Amazon VPC) relacionado à avaliação de acesso. Políticas de bucket do Amazon S3 podem controlar o acesso a buckets de endpoints específicos do Amazon VPC.

  • Para ContextKeyList, você pode inserir a lista de chaves de contexto da condição e os valores correspondentes relacionados à avaliação da política. Por exemplo, uma negação explícita de um PutObject na sua política de bucket:

    {"ContextKeyName":"s3:x-amz-server-side-encryption-aws-kms-key-id","ContextKeyValues':["arn:aws:kms:us-east-1:123456789012:key/abc12345-b1e9-45a3-aa90-39ec93dd9b82'],"ContextKeyType":"string'}
  • Se você quiser que o runbook compare a entrada com uma política de controle de serviços (SCP) específica do AWS Organizations, então, para SCPPolicy, insira o SCP. Remova novas linhas, tabulações ou espaços em branco ao inserir um valor. Se você executar o runbook a partir da conta de gerenciamento da organização, essa etapa não será necessária.

  • Para Etiquetas, você pode marcar suas automações para ajudar na categorização.

  • Para o comando da AWS CLI e o link de execução compartilhável, o runbook fornece um exemplo de comando da AWS Command Line Interface (AWS CLI) para Linux, Unix e macOS X. O runbook também fornece um link compartilhável.

Permissões do IAM necessárias para AutomationAssumeRole

O parâmetro AutomationAssumeRole requer determinadas ações para usar o runbook.

O exemplo de política a seguir inclui as ações necessárias para a função de automação:

{  
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iam:SimulateCustomPolicy",
        "iam:GetUser",
        "iam:GetPolicy",
        "iam:GetPolicyVersion",
        "iam:ListAttachedUserPolicies",
        "iam:ListUserPolicies",
        "iam:GetUserPolicy",
        "iam:ListGroupsForUser",
        "iam:ListGroupPolicies",
        "iam:GetGroupPolicy",
        "iam:ListAttachedGroupPolicies",
        "iam:GetRole",
        "iam:GetRolePolicy",
        "iam:ListAttachedRolePolicies",
        "iam:ListRolePolicies"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetObjectAcl",
        "s3:GetObjectVersionAcl",
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::bucket_name/destination-prefix",
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetBucketPolicy",
        "s3:GetBucketAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:GetBucketLocation",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::bucket_name",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ec2:DescribeVpcEndpoints"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "kms:GetKeyPolicy"
      ],
      "Resource": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "Effect": "Allow"
    },
    {
      "Action": [
        "organizations:ListPolicies",
        "organizations:DescribePolicy"
      ],
      "Resource": "arn:aws:organizations::aws:policy/service_control_policy/*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ssm:GetAutomationExecution",
        "ssm:DescribeAutomationExecutions"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "ssm:StartAutomationExecution",
      "Resource": "arn:aws:ssm:*:*:automation-definition/AWSSupport-TroubleshootS3AccessSameAccount:*",
      "Effect": "Allow",
      "Sid": "StartAutomationExecution"
    },
    {
      "Action": "access-analyzer:ValidatePolicy",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}