Quiero cargar un archivo grande al bucket de Amazon Simple Storage Service (Amazon S3). En mi solicitud de carga, incluyo información de cifrado con una clave de AWS Key Management Service (AWS KMS). Sin embargo, aparece un error de acceso denegado.
Descripción corta
Confirma que tienes permiso para llevar a cabo acciones de kms:Decrypt en la clave de AWS KMS que utilizas para cifrar el objeto.
En el caso de archivos grandes, los comandos de AWS S3 de alto nivel de la interfaz de la línea de comandos de AWS (AWS CLI), los AWS SDK y muchos programas de terceros llevan a cabo automáticamente una carga multiparte. Para usar una clave de AWS KMS para cifrar una carga multiparte, debes tener los permisos kms:GenerateDataKey y kms:Decrypt. El permiso kms:GenerateDataKey te permite iniciar la carga. El permiso kms:Decrypt te permite cifrar las partes recién cargadas con la clave que utilizaste para las partes anteriores del mismo objeto.
Nota: Para realizar una carga multiparte con cifrado mediante una clave de AWS KMS, debes disponer de lo siguiente:
- Permiso para las acciones kms:Decrypt y kms:GenerateDataKey en la clave.
- Permisos para la acción kms:GenerateDataKey en la API CreateMultipartUpload.
- Permisos para la acción kms:Decrypt en las API UploadPart y UploadPartCopy. Estos permisos son necesarios porque Amazon S3 debe descifrar y leer los datos de las partes cifradas del archivo antes de completar la carga multiparte.
Si tu usuario o rol de AWS Identity and Access Management (IAM) está en la misma cuenta de AWS que la clave de KMS, debes tener estos permisos en la política de claves. Si tu usuario o rol de IAM pertenece a una cuenta diferente de la clave de KMS, debes tener los permisos tanto en la política de claves como en su usuario o rol de IAM.
Resolución
Política de claves
Revisa la política de claves de AWS KMS en la vista de políticas de la Consola de administración de AWS.
En la política de claves, busca las instrucciones en las que el nombre de recurso de Amazon (ARN) de tu usuario o rol de IAM aparezca como entidad principal de AWS. El ARN tiene el formato siguiente: arn:aws:iam::111122223333:user/john.
A continuación, consulta la lista de acciones que permiten tus instrucciones de usuario o rol de IAM. En las cargas multiparte, la lista de acciones permitidas debe incluir kms:Decrypt con SSE-KMS.
Por ejemplo, la siguiente instrucción de una política de claves permite al usuario John llevar a cabo las acciones kms:Decrypt y kms:GenerateDataKey:
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/john"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}
Permisos de IAM
Para revisar los permisos que tienes en IAM, abre la consola de IAM y, a continuación, elige tu usuario o rol de IAM.
Revisa la lista de políticas de permisos que se aplican a tu usuario o rol de IAM. Asegúrate de que se aplique una política que te permita llevar a cabo la acción kms:Decrypt en la clave que utilizas para cifrar el objeto:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
]
}
}
La instrucción de ejemplo concede al usuario de IAM acceso para ejecutar kms:Decrypt y kms:GenerateDataKey en la clave arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd.
Para obtener instrucciones sobre cómo actualizar los permisos de IAM, consulta Cambio de los permisos de un usuario de IAM.
Información relacionada
AWS Policy Generator (Generador de políticas de AWS)
Cifrado de datos en Amazon S3