¿Cómo soluciono los errores «403 Access Denied» de mi bucket de Amazon S3, donde todos los recursos provienen de la misma cuenta de AWS?

5 minutos de lectura
0

Quiero acceder a mi bucket de Amazon Simple Storage Service (Amazon S3). Todos los recursos pertinentes provienen de la misma cuenta de AWS. Sin embargo, aparece un error «403 Access Denied».

Descripción breve

Si realiza una solicitud prohibida a su bucket de Amazon S3, el servicio devuelve el error «403 Access Denied». Para solucionar manualmente los errores «403 Access Denied», consulte ¿Cómo soluciono los errores 403 Access Denied de Amazon S3?

También puede utilizar el runbook AWSSupport-TroubleshootS3AccessSameAccount de AWS Systems Manager para poder diagnosticar los problemas de acceso denegado desde su bucket de Amazon S3. El runbook evalúa el nivel de acceso que se concede al solicitante en su recurso de Amazon S3 para todos los recursos pertinentes de la misma cuenta de AWS. Esto incluye las políticas de acceso, usuarios y recursos asociadas al recurso de Amazon S3. También incluye el usuario o rol de AWS Identity and Access Management (IAM) que se especifica en los parámetros de entrada.

Nota: El runbook AWSSupport-TroubleshootS3AccessSameAccount no evalúa los permisos de los recursos entre cuentas. Además, el solicitante debe estar en la misma cuenta de AWS que el bucket u objeto de Amazon S3.

Resolución

Pasos necesarios

Siga estos pasos para ejecutar el runbook AWSSupport-TroubleshootS3AccessSameAccount desde la consola de Systems Manager:

1.    Abra la consola de Systems Manager.

2.    En el panel de navegación, elija Automatización.

3.    Elija Ejecutar automatización.

4.    En Elegir documento, elija la pestaña Propiedad de Amazon.

5.    En la barra de búsqueda de Documento de automatización, elija el filtro Prefijo de nombre del documento en la lista desplegable. A continuación, elija Igual a en la lista desplegable e introduzca AWSSupport-TroubleshootS3AccessSameAccount. A continuación, pulse Intro.

6.    Seleccione AWSSupport-TroubleshootS3AccessSameAccount.

7.    Elija Siguiente.

8.    Seleccione Ejecución simple.

9.    En S3ResourceArn, introduzca el ARN del bucket u objeto de S3 del que desee solucionar el problema. Por ejemplo, para comprobar si se ha cargado o descargado un objeto.

arn:aws:s3:::bucket_name/key_name

10.    En S3Action, elija la acción S3 que desee que evalúe el runbook.

11.    En RequesterARN, introduzca el ARN de rol o de usuario de IAM cuyo nivel de acceso en el recurso de S3 específico quiera encontrar:

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

12.    Elija Ejecutar.

Utilice el estado Ejecución para hacer un seguimiento del progreso del documento. Cuando el estado cambie a Acción realizada correctamente, revise los datos que aparecen en la sección Resultados. Los resultados incluyen códigos de error para cada objeto evaluado.
Nota: Para revisar el resultado de un paso individual de la evaluación, elija el ID de paso pertinente en Pasos ejecutados.

Pasos opcionales

Los pasos siguientes son opcionales.

  • En AutomationAssumeRole, puede seleccionar un rol de IAM para que Systems Manager lo asuma al enviar solicitudes al bucket. Si deja este campo en blanco, Systems Manager utilizará la identidad de IAM que usted utilice para configurar el documento. Para obtener más información, consulte la sección Permisos de IAM necesarios para AutomationAssumeRole.
    Importante: La política de confianza del rol de IAM que seleccione debe permitir que Systems Manager Automation asuma el rol. Además, el rol de IAM debe tener permiso para ejecutar el runbook AWSSupport-TroubleshootS3AccessSameAccount.

  • Si el ARN de IAM es un rol y quiere proporcionar un nombre de sesión específico, introduzca el nombre de la sesión en RequesterRoleSessionName.

  • Si el objeto tiene varias versiones, en S3ObjectVersionId introduzca el VersionId del objeto. Este parámetro le permite especificar la versión del objeto cuyo contexto de acceso quiera evaluar.

  • Si es relevante para la acción, introduzca el ARN de clave de KMS en KmsKeyArn. Por ejemplo, para probar la descarga de un objeto cifrado con una clave de KMS.

  • En VpcEndPointId, puede introducir el ID de punto de conexión de Amazon Virtual Private Cloud (Amazon VPC) relacionado con la evaluación del acceso. Las políticas de bucket de Amazon S3 pueden controlar el acceso a los buckets desde puntos de conexión específicos de Amazon VPC.

  • En ContextKeyList, puede introducir la lista de claves de contexto de condiciones y los valores correspondientes relacionados con la evaluación de la política. Por ejemplo, una denegación explícita de PutObject en la 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'}
  • Si desea que el runbook compare los datos de entrada con una política de control de servicio (SCP) específica de AWS Organizations, introduzca la SCP en SCPPolicy. Elimine las nuevas líneas, pestañas o espacios en blanco al introducir un valor. Si ejecuta el runbook desde la cuenta de administración de la organización, este paso no es necesario.

  • En Etiquetas, puede etiquetar las automatizaciones para ayudarle a categorizarlas.

  • En Enlace de ejecución compartido y comando de AWS CLI, el runbook proporciona un ejemplo de comando de Interfaz de la línea de comandos de AWS (AWS CLI) para Linux, Unix y macOS X. El runbook también proporciona un enlace compartible.

Permisos de IAM necesarios para AutomationAssumeRole

El parámetro AutomationAssumeRole requiere ciertas acciones para utilizar el runbook.

El siguiente ejemplo de política incluye las acciones necesarias para el rol de automatización:

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