Je souhaite accéder aux données stockées dans les compartiments Amazon Simple Storage Service (Amazon S3) au sein du même compte que mon cluster Amazon Redshift. Je souhaite également accéder aux données en utilisant Amazon Redshift Spectrum avec AWS Glue comme catalogue de données. Mais je reçois des notifications d'erreurs d'autorisation.
Brève description
Le rôle AWS Identity and Access Management (IAM) associé au cluster Redshift doit disposer d'autorisations sur les services AWS Glue et S3. Si le rôle IAM ne dispose pas des autorisations appropriées, vous risquez de recevoir l'une des erreurs suivantes :
Lors de la création d'un schéma externe :
SQL Error [XX000]: ERROR:
User: arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession is not authorized to perform: glue:CreateDatabase on resource: arn:aws:glue:eu-west-1:111111111111:catalog because no identity-based policy allows the glue:CreateDatabase action
Lorsque vous essayez d'interroger une table Redshift Spectrum :
SQL Error [XX000]: ERROR: Spectrum Scan Error
Detail:
-----------------------------------------------
error: Spectrum Scan Error
code: 15007
context: Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied
Lorsque vous essayez d'interroger une table Redshift Spectrum alors que le compartiment S3 utilise une clé de chiffrement AWS KMS (Key Management Services) :
SQL Error [XX000]: ERROR: Spectrum Scan Error
Detail:
-----------------------------------------------
error: Spectrum Scan Error
code: 15007
context: Forbidden: HTTP response error code: 403 Message: AccessDenied The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access
Pour résoudre ces erreurs, vous devez associer une politique IAM avec les autorisations requises au rôle IAM utilisé par Amazon Redshift. Si le compartiment S3 est chiffré à l'aide d'une clé KMS, vous devez également associer des autorisations pour utiliser la clé.
Résolution
Associez la politique gérée par AWS AWSGlueConsoleFullAccess au rôle IAM associé au cluster Redshift.
Créez une politique IAM à l'aide de l'exemple suivant et associez la politique au rôle IAM associé au cluster Redshift. Cela permet d'accéder en lecture au compartiment S3 dans lequel les données sont stockées :
Remarque : remplacez le nom du compartiment par le nom de votre compartiment S3.
{
"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>"
]
}
]
}
Si le compartiment S3 utilisé par Redshift Spectrum est chiffré à l'aide d'une clé de chiffrement AWS KMS, créez et attachez la politique IAM suivante. Associez la politique au rôle IAM associé au cluster Redshift. Cette politique fournit un accès permettant à Redshift Spectrum de déchiffrer les données cryptées dans Amazon S3. Voici un exemple des autorisations minimales pour autoriser le déchiffrement :
Remarque : remplacez region (région) par la région AWS dans laquelle se trouve votre compartiment S3, remplacez AWS account ID (ID de compte AWS) par votre identifiant de compte et remplacez l'identifiant KMS key ID (ID de clé KMS) par la clé de cryptage KMS.
{
"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>"
]
}
]
}
Informations connexes
Comment créer un accès intercompte Amazon Redshift Spectrum à AWS Glue et à Amazon S3 ?
Politiques IAM pour Amazon Redshift Spectrum