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

12 minutos de lectura
0

Mis usuarios están intentando acceder a los objetos de mi bucket de Amazon Simple Storage Service (Amazon S3), pero Amazon S3 devuelve el error 403 de acceso denegado.

Solución

Utilización del documento de Automatización de AWS Systems Manager

Utilice el documento de automatización AWSSupport-TroubleshootS3PublicRead en AWS Systems Manager. Este documento de automatización le ayuda a diagnosticar problemas al leer objetos de un bucket S3 público especificado.

Comprobación de la propiedad del objeto y el bucket

En el caso de los errores AccessDenied desde solicitudes GetObject o HeadObject, compruebe si el objeto también pertenece al propietario del bucket. Además, compruebe si el propietario del bucket tiene permisos de lectura o de control total de la lista de control de acceso (ACL).

Confirmación de la cuenta propietaria de los objetos

De forma predeterminada, un objeto de S3 pertenece a la cuenta de AWS que lo cargó. Esto es así aunque el bucket sea propiedad de otra cuenta. Si otras cuentas pueden subir objetos a su bucket, compruebe la cuenta que sea propietaria de los objetos a los que sus usuarios no pueden acceder.

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, asegúrese de utilizar la versión más reciente de la AWS CLI.

1.    Ejecute el comando list-buckets de la Interfaz de línea de comandos de AWS (AWS CLI) para obtener el ID canónico de Amazon S3 de su cuenta mediante la consulta del ID del propietario.

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

2.    Ejecute el comando list-objects para obtener el ID canónico de Amazon S3 de la cuenta propietaria del objeto al que los usuarios no pueden acceder. Sustituya DOC-EXAMPLE-BUCKET por el nombre de su bucket y exampleprefix por el valor de su prefijo.

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

Consejo: Utilice el comando list-objects para comprobar varios objetos.

3.    Si los ID canónicos no coinciden, significa que no es el propietario del objeto. El propietario del objeto puede concederle el control total del objeto mediante la ejecución del comando put-object-acl. Sustituya DOC-EXAMPLE-BUCKET por el nombre del bucket que contiene los objetos. Sustituya exampleobject.jpg por el nombre de la clave.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg --acl bucket-owner-full-control

4.    Una vez que el propietario del objeto cambie la ACL del objeto a bucket-owner-full-control, el propietario del bucket podrá acceder al objeto. Sin embargo, el cambio de ACL por sí solo no cambia la propiedad del objeto. Para cambiar el propietario del objeto a la cuenta del bucket, ejecute el comando cp desde la cuenta del bucket para copiar el objeto sobre sí mismo.

Copia de todos los objetos nuevos a un bucket de otra cuenta

1.    Defina una política de bucket que exija que los objetos se carguen con la ACL bucket-owner-full-control.

2.    Habilite y configure S3 Object Ownership como propietario del bucket preferido en la Consola de administración de AWS.

El propietario del bucket se actualiza automáticamente como propietario del objeto cuando el objeto se carga con la ACL bucket-owner-full-control.

Creación de un rol de IAM con permisos para el bucket

Para obtener permisos continuos válidos entre cuentas, cree un rol de IAM en su cuenta con permisos para su bucket. A continuación, conceda a otra cuenta de AWS el permiso para asumir ese rol de IAM. Para obtener más información, consulte Tutorial de IAM: delegación del acceso entre cuentas de AWS mediante roles de IAM.

Comprobación de la política de bucket o las políticas de usuario de IAM

Revise la política de bucket o las políticas de usuario de IAM asociadas para ver si hay alguna instrucción que pueda denegar el acceso. Compruebe que las solicitudes a su bucket cumplan las condiciones de la política de bucket o de las políticas de IAM. Compruebe si hay instrucciones de denegación incorrectas, acciones pendientes o espacios incorrectos en una política.

Condiciones de instrucción de denegación

Compruebe las instrucciones de denegación para ver las condiciones que bloquean el acceso en función de lo siguiente:

  • autenticación multifactor (MFA)
  • claves de cifrado
  • dirección IP específica
  • VPC o puntos de enlace de VPC específicos
  • usuarios o roles de IAM específicos

Nota: Si necesita MFA y los usuarios envían solicitudes a través de la AWS CLI, asegúrese de que los usuarios configuren la AWS CLI de modo que se utilice la MFA.

Por ejemplo, en la siguiente política de bucket, Statement1 permite el acceso público para descargar objetos (s3:GetObject) de DOC-EXAMPLE-BUCKET. Sin embargo, Statement2 niega explícitamente a todos el acceso para descargar objetos desde DOC-EXAMPLE-BUCKET, a menos que la solicitud provenga del punto de enlace de la VPC vpce-1a2b3c4d. En este caso, la instrucción de denegación tiene prioridad. Esto significa que a los usuarios que intenten descargar objetos desde fuera de vpce-1a2b3c4d se les denegará el acceso.

{
  "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 de bucket o políticas de IAM

Compruebe si la política de bucket o las políticas de IAM permiten las acciones de Amazon S3 que sus usuarios necesitan. Por ejemplo, la siguiente política de bucket no incluye el permiso para la acción s3:PutObjectAcl. Si el usuario de IAM intenta modificar la lista de control de acceso (ACL) de un objeto, se mostrará un error de acceso denegado.

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

Otros errores de políticas

Compruebe que no haya espacios adicionales ni ARN incorrectos en la política de bucket ni en las políticas de usuario de IAM.

Por ejemplo, si una política de IAM tiene un espacio adicional en el nombre de recurso de Amazon (ARN) como aquí: **arn:aws:s3::: DOC-EXAMPLE-BUCKET/\ ***. En este caso, el ARN se evalúa incorrectamente como arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/ y muestra al usuario de IAM un error de acceso denegado.

Confirmación de si los límites de los permisos de IAM permiten el acceso a Amazon S3

Revise los límites de los permisos de IAM establecidos en las identidades de IAM que intentan acceder al bucket. Confirme si los límites de los permisos de IAM permiten el acceso a Amazon S3.

Comprobación de la configuración de Bloqueo del acceso público de Amazon S3 para el bucket

Si se muestran errores de acceso denegado en solicitudes de lectura pública que están permitidas, compruebe la configuración del Bloqueo del acceso público de Amazon S3 en el caso del bucket.

Revisa la configuración del Bloqueo del acceso público de S3 tanto en el nivel de cuenta como en el de bucket. Estas configuraciones pueden anular los permisos que permiten el acceso de lectura pública. El Bloqueo del acceso público de Amazon S3 se puede aplicar a cuentas de AWS o a buckets individuales.

Revisión de las credenciales de usuario

Revise las credenciales que sus usuarios han configurado para acceder a Amazon S3. Los SDK de AWS y la AWS CLI deben estar configurados de modo que se usen las credenciales del usuario o rol de IAM con acceso a su bucket.

En la AWS CLI, ejecute el comando configure para comprobar las credenciales configuradas:

aws configure list

Si los usuarios acceden a su bucket a través de una instancia de Amazon Elastic Compute Cloud (Amazon EC2), verifique si la instancia utiliza el rol correcto. Conéctese a la instancia y, a continuación, ejecute el comando: get-caller-identity:

aws sts get-caller-identity

Revisión de las credenciales de seguridad temporales

Si se muestra a los usuarios errores de acceso denegado procedentes de credenciales de seguridad temporales concedidas mediante AWS Security Token Service (AWS STS), revise la política de sesión asociada. Cuando un administrador crea credenciales de seguridad temporales mediante la llamada a la API AssumeRole o el comando assume-role, puede aprobar políticas específicas de la sesión.

Para encontrar las políticas de sesión asociadas a los errores de acceso denegado de Amazon S3, busque los eventos AssumeRole en el historial de eventos de AWS CloudTrail. Asegúrese de buscar los eventos AssumeRole en el mismo periodo de tiempo que las solicitudes fallidas para acceder a Amazon S3. A continuación, revise el campo requestParameters en los registros de CloudTrail correspondientes para ver si hay algún parámetro ** policy** o policyArns. Confirme que la política o el ARN de la política asociados concedan los permisos necesarios de Amazon S3.

Por ejemplo, el siguiente fragmento de un registro de CloudTrail muestra que las credenciales temporales incluyen una política de sesión en línea que otorga permisos s3:GetObject a 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/*"]
		}
	}
]
}
"
}

Confirmación de si la política de puntos de enlace de Amazon VPC incluye los permisos correctos para acceder a sus buckets y objetos de S3

Si los usuarios acceden a su bucket con una instancia de EC2 enrutada a través de un punto de enlace de la VPC, consulte la política de punto de enlace de VPC.

Por ejemplo, la siguiente política de punto de enlace de VPC solo permite el acceso a DOC-EXAMPLE-BUCKET. Los usuarios que envíen solicitudes a través de este punto de enlace de VPC no podrán acceder a ningún otro 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": "*"
    }
  ]
}

Revisión de la política de IAM de su punto de acceso de Amazon S3

Si usa un punto de acceso de Amazon S3 para administrar el acceso a su bucket, revise la política de IAM del punto de acceso.

Los permisos concedidos en una política de punto de acceso solo son efectivos si la política de bucket subyacente también permite el mismo acceso. Confirme que la política de bucket y la política de punto de acceso concedan los permisos correctos.

Confirmación de que al objeto no le falte ningún objeto ni contenga caracteres especiales

Compruebe si el objeto solicitado existe en el bucket. De lo contrario, la solicitud no encontrará el objeto y Amazon S3 dará por supuesto que el objeto no existe. Si no tiene los permisos correctos de s3:ListBucket, se mostrará un error de acceso denegado (en lugar del error 404 Not Found).

Un objeto con un carácter especial (como un espacio) requiere un tratamiento especial para recuperarlo.

Ejecute el comando head-object de la AWS CLI para comprobar si un objeto existe en el bucket. Sustituya DOC-EXAMPLE-BUCKET por el nombre del bucket que desee comprobar.

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

Si el objeto existe en el bucket, el error Acceso denegado no está enmascarando un error 404 Not Found. Compruebe otros requisitos de configuración para solucionar el error de acceso denegado.

Si el objeto no está en el bucket, el error Acceso denegado está enmascarando un error 404 Not Found. Solucione el problema relacionado con el objeto que falta.

Comprobación de la configuración de cifrado de AWS KMS

Tenga en cuenta lo siguiente sobre el cifrado de AWS KMS (SSE-KMS):

  • Si un usuario de IAM no puede acceder a un objeto para el que tiene todos los permisos, compruebe si el objeto está cifrado mediante SSE-KMS. Puede usar la consola de Amazon S3 para ver las propiedades del objeto, que incluyen la información de cifrado en el lado del servidor del objeto.
  • Si el objeto está cifrado con SSE-KMS, asegúrese de que la política de claves de KMS conceda al usuario de IAM los permisos mínimos necesarios para usar la clave. Por ejemplo, si el usuario de IAM solo utiliza la clave para descargar un objeto de S3, deberá tener permisos kms:Decrypt. Para obtener más información, consulte Allows access to the AWS account and enables IAM policies.
  • Si la identidad y la clave de IAM están en la misma cuenta, los permisos kms:Decrypt deben concederse mediante la política de claves. La política de claves debe hacer referencia a la misma identidad de IAM que la política de IAM.
  • Si el usuario de IAM pertenece a una cuenta diferente a la de la clave de AWS KMS, estos permisos también se deben conceder en la política de IAM. Por ejemplo, para descargar los objetos cifrados con SSE-KMS, los permisos kms:Decrypt deben especificarse tanto en la política de claves como en la política de IAM. Para obtener más información sobre el acceso entre cuentas con el usuario de IAM y la clave de KMS, consulte Allowing users in other accounts to use a KMS key.

Confirmación de si los usuarios han especificado el parámetro request-payer (si utiliza Pago por el solicitante)

Si su bucket tiene activado Pago por el solicitante, los usuarios de otras cuentas deberán especificar el parámetro request-payer cuando envíen solicitudes a su bucket. Para comprobar si se ha activado el pago por el solicitante, utilice la consola de Amazon S3 para ver las propiedades de su bucket.

El siguiente ejemplo de comando de la AWS CLI incluye el parámetro correcto para acceder a un bucket entre cuentas con pago por el solicitante:

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

Comprobación de la política de control de servicios de AWS Organizations

Si utiliza AWS Organizations, revise las políticas de control de servicios para asegurarse de que se permite el acceso a Amazon S3. Las políticas de control de servicios especifican los permisos máximos para las cuentas afectadas. Por ejemplo, la siguiente política deniega explícitamente el acceso a Amazon S3 y produce un error de acceso denegado:

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

Para obtener más información sobre las características de AWS Organizations, consulte Enabling all features in your organization.

Información relacionada

Solución de problemas

Obtención de los ID de las solicitudes de Amazon S3 para AWS Support

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años