Quiero acceder a los datos que están almacenados en los buckets de Amazon Simple Storage Service (Amazon S3) dentro de la misma cuenta de AWS que mi clúster de Amazon Redshift. También quiero acceder a los datos de Amazon Redshift Spectrum con AWS Glue como catálogo de datos. Sin embargo, se muestran errores de permiso.
Descripción corta
El rol de AWS Identity and Access Management (IAM) asociado al clúster de Redshift debe tener permisos para AWS Glue y Amazon S3. Si el rol de IAM no tiene los permisos correctos, es posible que se muestre un mensaje de error.
Al crear un esquema externo, es posible que se muestre el siguiente mensaje de error:
«Error de SQL [XX000]: ERROR: El usuario: arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession no está autorizado a ejecutar: glue:CreateDatabase en el recurso: arn:aws:glue:eu-west-1:111111111111:catalog porque ninguna política basada en la identidad permite la acción glue:CreateDatabase»
Al consultar una tabla de Redshift Spectrum, es posible que se muestre el siguiente mensaje de error:
«Error de SQL [XX000]: ERROR: Detalle del error de análisis de Spectrum: ----------------------------------------------- error: Código de error de análisis de Spectrum: Contexto 15007: Forbidden: Código de error de respuesta HTTP: 403 Mensaje: Acceso denegado AccessDenied»
Cuando consulta una tabla de Redshift Spectrum y el bucket de S3 utiliza una clave de cifrado de AWS Key Management Service (AWS KMS), es posible que se muestre el siguiente mensaje de error:
«Error de SQL [XX000]: ERROR: Detalle del error de análisis de Spectrum: ----------------------------------------------- error: Código de error de análisis de Spectrum: Contexto 15007: Forbidden: Código de error de respuesta HTTP: 403 Mensaje: AccessDenied El texto cifrado hace referencia a una clave maestra de cliente que no existe, no existe en esta región o a la que no se le permite acceder»
Para resolver estos errores, debe adjuntar una política de IAM con los permisos necesarios al rol de IAM que usa Amazon Redshift. Si ha usado una clave de AWS KMS para cifrar el bucket de S3, también debe agregar permisos para usar la clave.
Resolución
Cree una política de IAM. A continuación, adjunte las siguientes políticas al rol de IAM asociado al clúster de Redshift.
Adjunte la política administrada de AWS AWSGlueConsoleFullAccess.
Utilice el siguiente ejemplo de política que permite el acceso de lectura al bucket de S3 en el que almacena los datos:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allows Redshift to Read S3 bucket specified",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket name/*",
"arn:aws:s3:::bucket name"
]
}
]
}
Nota: Sustituya el nombre del bucket por el nombre de su bucket de S3.
Para un bucket cifrado con clave de AWS KMS, adjunte la siguiente política de IAM, que proporciona los permisos mínimos para permitir a Redshift Spectrum descifrar los datos cifrados en Amazon S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow Redshift to use the KMS key",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:region:AWS account ID:key/KMS key ID"
]
}
]
}
Nota: Sustituya region por la región de AWS en la que se encuentra su bucket de S3. Además, sustituya el ID de cuenta de AWS por el ID de su cuenta y el ID de clave de KMS por la clave de cifrado de KMS.
Información relacionada
¿Cómo puedo crear un acceso entre cuentas de Amazon Redshift Spectrum para AWS Glue y Amazon S3?
Políticas de IAM para Amazon Redshift Spectrum