Comment résoudre les erreurs d'accès refusé dans Redshift Spectrum avec des compartiments Amazon S3 sur le même compte qu'Amazon Redshift ?

Lecture de 4 minute(s)
0

Je souhaite accéder aux données stockées dans des compartiments Amazon Simple Storage Service (Amazon S3) au sein du même compte AWS que mon cluster Amazon Redshift. Je souhaite également accéder aux données d'Amazon Redshift Spectrum avec AWS Glue comme catalogue de données. Cependant, je reçois des erreurs d'autorisation.

Brève description

Le rôle AWS Identity and Access Management (IAM) associé au cluster Redshift doit disposer d'autorisations pour AWS Glue et Amazon S3. Si le rôle IAM ne dispose pas des autorisations appropriées, il est possible que vous receviez un message d'erreur.

Lorsque vous créez un schéma externe, le message d'erreur suivant peut s'afficher :

« 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 » (Erreur SQL [XX000] : ERREUR : L'utilisateur : arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession n'est pas autorisé à exécuter : glue:CreateDatabase surla ressource : arn:aws:glue:eu-west-1:111111111111:catalog car aucune politique basée sur l'identité n'autorise l'action glue:CreateDatabase)

Lorsque vous interrogez une table Redshift Spectrum, le message d'erreur suivant peut s'afficher :

« 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 » (Erreur SQL [XX000] : ERREUR : Détail de l'erreur d’analyse de Spectrum - erreur : Code d'erreur d’analyse de Spectrum : Contexte 15007 : Interdit : Codes de réponse d’erreurs HTTP 4## : Message 403 : AccessDenied Accès refusé)

Lorsque vous interrogez une table Redshift Spectrum et que le compartiment S3 utilise une clé de chiffrement AWS Key Management Services (AWS KMS), le message d'erreur suivant peut s'afficher :

« 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 » (Erreur SQL [XX000] : ERREUR : Erreur d’analyse de Spectrum - erreur : Code d’erreur d’analyse de Spectrum : Contexte 15007 : Interdit : Code d’erreur de réponse HTTP : Message 403 : AccessDenied. Le texte chiffré se réfère à une clé principale personnalisée qui n’existe pas, n’existe pas dans cette région ou vous ne disposez pas d’une autorisation d’accès)

Pour résoudre ces erreurs, vous devez associer une politique IAM dotée des autorisations requises au rôle IAM utilisé par Amazon Redshift. Si vous avez utilisé une clé AWS KMS pour chiffrer le compartiment S3, vous devez également ajouter des autorisations pour utiliser cette clé.

Résolution

Créez une politique IAM. Associez ensuite les politiques suivantes au rôle IAM associé au cluster Redshift.

Associez la politique gérée par AWS AWSGlueConsoleFullAccess.

Utilisez l'exemple de politique suivant qui autorise l'accès en lecture au compartiment S3 dans lequel vous stockez les données :

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

Remarque : Remplacez bucket name par le nom de votre compartiment S3.

Pour un compartiment chiffré par clé AWS KMS, attachez la politique IAM suivante qui fournit les autorisations minimales pour permettre à Redshift Spectrum de déchiffrer les données chiffrées dans 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"
      ]
    }
  ]
}

Remarque : Remplacez region par la région AWS dans laquelle se trouve votre compartiment S3. Remplacez également l'ID de compte AWS par votre identifiant de compte et l'ID de clé KMS par la clé de chiffrement KMS.

Informations connexes

Comment puis-je créer un accès intercompte Amazon Redshift Spectrum à AWS Glue et Amazon S3 ?

Politiques IAM pour Amazon Redshift Spectrum

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois