Saltar al contenido

¿Cómo soluciono los errores de acceso denegado cuando los usuarios de IAM de otra cuenta de AWS intentan acceder a mi bucket de Amazon S3?

8 minutos de lectura
0

Mi política de bucket de Amazon Simple Storage Service (Amazon S3) concede total acceso a otra cuenta de AWS. Sin embargo, cuando los usuarios de AWS Identity and Access Management (IAM) de la otra cuenta intentan acceder a mi bucket, aparece el error «Access Denied».

Descripción corta

Si tu política de bucket ya concede acceso a la otra cuenta, los usuarios con varias cuentas pueden recibir errores de acceso denegado por los siguientes motivos:

  • La política de IAM del usuario no concede acceso al bucket.
  • Has cifrado el objeto con AWS Key Management Service (AWS KMS) y el usuario no tiene acceso a la clave de AWS KMS.
  • Una instrucción Deny en la política de bucket o en la política de IAM bloquea el acceso del usuario.
  • La política de puntos de enlace de Amazon Virtual Private Cloud (Amazon VPC) bloquea el acceso al bucket.
  • La política de control de servicio (SCP) de AWS Organizations bloquea el acceso al bucket.
  • El objeto no pertenece a la cuenta propietaria del bucket.
  • Has activado el Pago por solicitante para el bucket de Amazon S3.
  • Has aprobado una política de sesión que bloquea el acceso al bucket.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

La política de IAM del usuario no concede acceso al bucket

Para el acceso entre cuentas, asegúrate de conceder acceso al bucket tanto en la política de IAM de la cuenta del usuario como en la política de bucket de tu cuenta.

Para agregar permisos de bucket a la política de IAM en la cuenta de los usuarios, sigue estos pasos:

  1. Abre la consola de IAM.
  2. En el panel de navegación, selecciona los usuarios o roles de IAM que no pueden acceder al bucket.
  3. En Políticas de permisos, expande cada política para ver su documento de política JSON.
  4. En los documentos de políticas JSON que contienen el nombre del bucket, confirma que las políticas permiten las acciones de S3 correctas en el bucket.
  5. Si el usuario o el rol de IAM no conceden acceso al bucket, agrega una política que conceda los permisos adecuados.
    El siguiente ejemplo de política de IAM concede a un usuario acceso para descargar objetos de la solicitud GetObject de DOC-EXAMPLE-BUCKET:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ExampleStmt",
                "Action": "s3:GetObject",
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
                ]
            }
        ]
    }

Nota: Si usas perfiles de instancia o asumes un rol, asegúrate de que tu política tenga los permisos correctos.

Has cifrado el objeto con AWS KMS

Si tanto la política de IAM como la política de bucket permiten el acceso entre cuentas, comprueba el cifrado predeterminado del bucket con AWS KMS. También puedes comprobar las propiedades del objeto para ver el cifrado de AWS KMS. Si has cifrado el objeto con una clave de KMS, el usuario también debe tener permisos para usar la clave.

Para conceder a un usuario de IAM los permisos para descargar y cargar en un bucket y usar la clave de AWS KMS, sigue estos pasos:

  1. Edita la política de claves de KMS para agregar la siguiente instrucción:

    {
        "Sid": "ExampleStmt",
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:user/Jane"
        },
        "Resource": "*"
    }

    Nota: Sustituye el ARN de ejemplo por el ARN de tu entidad principal.

  2. Si la clave de KMS pertenece a la misma cuenta que la del usuario de IAM, no es necesario que modifiques la política de claves. Si la clave de AWS KMS pertenece a tu cuenta, debes actualizar los permisos del usuario de IAM para agregar la siguiente instrucción de política de IAM:

    {
        "Sid": "KMSAccess",
        "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }

    Nota: Sustituye el ARN de la clave de KMS de ejemplo por el ARN de tu clave de KMS.

Para obtener más información, consulta ¿Por qué los usuarios con varias cuentas reciben errores de acceso denegado cuando intentan acceder a los objetos de S3 que he cifrado con una clave de AWS KMS administrada por el cliente?

Una instrucción Deny en la política bloquea el acceso de los usuarios

Consulta la política de bucket y las políticas de IAM del usuario para ver si hay instrucciones que denieguen explícitamente el acceso del usuario al bucket.

Para comprobar la política de bucket, sigue estos pasos:

  1. Abre la consola de Amazon S3.
  2. En la lista de buckets, selecciona el bucket con la política de bucket que quieras comprobar.
  3. Selecciona la pestaña Permisos.
  4. En Política de bucket, comprueba si hay instrucciones con «Effect»: «Deny».
  5. Modifica la política de bucket para eliminar las instrucciones «Effect»: «Deny» que denieguen el acceso del usuario al bucket.

Para comprobar las políticas de IAM de los usuarios, sigue estos pasos:

  1. Abre la consola de IAM.
  2. En el panel de navegación, selecciona los usuarios o roles de IAM que no pueden acceder al bucket.
  3. En Políticas de permisos, expande cada política para ver los documentos de políticas JSON.
  4. En los documentos de políticas de JSON relacionados con el bucket de S3, comprueba si hay instrucciones que contengan «Effect»: «Deny».
  5. Modifica las políticas de permisos de IAM del usuario para eliminar las instrucciones «Effect»: «Deny» que denieguen el acceso del usuario al bucket.

La política de punto de enlace de VPC bloquea el acceso al bucket

Si los usuarios acceden al bucket con una instancia de Amazon Elastic Compute Cloud (Amazon EC2) mediante un punto de enlace de VPC, comprueba la política de puntos de enlace de VPC. Confirma que la política de puntos de enlace de VPC incluya los permisos adecuados para acceder al bucket de S3.

La siguiente política de ejemplo de puntos de enlace de VPC permite el acceso a DOC-EXAMPLE-BUCKET:

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

Advertencia: El elemento «Entidad principal»: «*» permite que todos los que usen el punto de enlace de VPC tengan acceso al bucket. Asegúrate de restringir el alcance del valor de entidad principal para tu caso de uso.

El SCP de Organizations bloquea el acceso al bucket

Si la cuenta del usuario usa Organizations, comprueba las SCP para ver si hay instrucciones Deny que bloquean el acceso al bucket. 

El siguiente ejemplo de política deniega explícitamente el acceso a Amazon S3:

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

El objeto no pertenece a la cuenta propietaria del bucket

De forma predeterminada, la cuenta que carga el objeto es la propietaria del objeto, incluso si otra cuenta es propietaria del bucket. Los permisos del bucket no se aplican automáticamente a un objeto que pertenezca a otra cuenta.

Para resolver los errores de acceso denegado de propiedad de objetos de S3, sigue estas prácticas recomendadas:

Has activado el Pago por solicitante

Si has activado el Pago por solicitante para tu bucket, los usuarios de otras cuentas deben especificar el parámetro x-amz-request-payer.

Los usuarios deben realizar las siguientes acciones:

  • Para las solicitudes DELETE, GET, HEAD, POST y PUT, incluye x-amz-request-payer : requester en el encabezado.
  • Para las URL firmadas, incluye x-amz-request-payer=requester en la solicitud.
  • Para los comandos de la AWS CLI, incluye el parámetro --request-payer:
    aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester
    

Una política de sesión ha bloqueado el acceso al bucket

Asegúrate de que la política de sesión que has aprobado no bloquee el acceso al bucket de S3.

Información relacionada

¿Cómo puedo solucionar los errores 403 de acceso denegado de Amazon S3?

Un usuario con permiso para agregar objetos a mi bucket de Amazon S3 recibe errores Access Denied. ¿Por qué?

OFICIAL DE AWSActualizada hace un año