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

Lecture de 6 minute(s)
0

Je souhaite utiliser Amazon Redshift Spectrum pour accéder à AWS Glue et à Amazon Simple Storage Service (Amazon S3) depuis un autre compte AWS situé dans la même région AWS. Comment dois-je procéder ?

Brève description

Pour accéder à des ressources AWS qui se trouvent dans un autre compte à partir d’Amazon Redshift Spectrum, procédez comme suit :

1.    Dans le compte 1, créez un rôle IAM (Gestion des identités et des accès AWS) disposant d’une relation d’approbation avec Amazon Redshift. Ce rôle doit être associé au cluster Amazon Redshift.

2.    Dans le compte 2, créez un autre rôle pouvant accéder à la fois à AWS Glue et à Amazon S3. Ce rôle modifie la relation d’approbation et permet au compte Amazon Redshift d’assumer ce rôle.

3.    Dans le compte 1, modifiez les autorisations du rôle existant afin qu’il assume le rôle créé dans le compte AWS Glue et Amazon S3.

Résolution

Compte 1 : création d’un rôle IAM AWS disposant d’une relation d’approbation avec Amazon Redshift

1.    Ouvrez la console IAM.

2.    Choisissez Rôles dans le volet de navigation, puis Créer un rôle.

3.    Dans Sélectionner le type d’entité de confiance, choisissez le service AWS.

4.    Choisissez Redshift.

5.    Dans Sélectionner votre cas d’utilisation, choisissez ** Redshift - Personnalisable**.

6.    Choisissez Suivant : Autorisations, Suivant : Balises, puis ** Suivant : Vérification**. Vous n’avez pas besoin d’ajouter de politiques ou de balises.

7.    Saisissez le Nom du rôle, puis choisissez Créer un rôle. Dans les exemples suivants, ce rôle est nommé redshift_role1.

8.    Associez redshift_role1 au cluster Amazon Redshift. Cette association permet à votre cluster d’assumer le rôle nouvellement créé pour accéder à Amazon S3, Amazon Athena et AWS Glue.

Compte 2 : création d’un autre rôle disposant d’un accès à AWS Glue et Amazon S3

1.    Ouvrez la console IAM.

2.    Choisissez Politiques, puis choisissez Créer une politique.

3.    Choisissez l’onglet JSON, puis saisissez une politique IAM sur ce modèle :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "glue:BatchCreatePartition",
        "glue:UpdateDatabase",
        "glue:CreateTable",
        "glue:DeleteDatabase",
        "glue:GetTables",
        "glue:GetPartitions",
        "glue:BatchDeletePartition",
        "glue:UpdateTable",
        "glue:BatchGetPartition",
        "glue:DeleteTable",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetDatabase",
        "glue:GetPartition",
        "glue:CreateDatabase",
        "glue:BatchDeleteTable",
        "glue:CreatePartition",
        "glue:DeletePartition",
        "glue:UpdatePartition"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucketMultipartUploads",
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": [
        "arn:aws:s3:::your_bucket",
        "arn:aws:s3:::your_bucket/*"
      ]
    },
    {
      "Sid": "VisualEditor2",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "<KMS_KEY_ARN>"
      ]
    }
  ]
}

Remplacez your_bucket par le nom du compartiment S3 auquel vous souhaitez accéder avec Amazon Redshift Spectrum. Remplacez KMS_KEY_ARN par l’ARN de la clé KMS qui chiffre votre compartiment S3.

Remarque : si les fichiers de votre compartiment S3 sont chiffrés, vous devez accorder les autorisations adéquates à Amazon Redshift.

4.    Choisissez Vérifier une politique.

5.    Saisissez un Nom pour la politique, puis choisissez Créer une politique.

6.    Dans le volet de navigation, choisissez Rôles, puis Créer un rôle.

7.    Dans Sélectionner le type d’entité de confiance, choisissez Autre compte AWS.

8.    Dans ID de compte, saisissez l’ID du compte qui utilise Amazon Redshift. Pour en savoir plus, consultez la section Trouver votre ID de compte AWS.

9.    Choisissez Suivant : Autorisations.

10.    Dans la liste des politiques, cochez la case à côté du nom de la politique que vous avez créée.

11.    Choisissez Suivant : Balises, puis Suivant : Vérification. Vous n’avez pas besoin d’ajouter de balises.

12.    Saisissez le Nom du rôle, puis choisissez Créer un rôle. Dans les exemples suivants, nous l’appellerons glue_s3_role2.

13.    Dans le volet de navigation, choisissez Rôles.

14.    Sélectionnez le nom du rôle que vous avez créé, puis choisissez l’onglet Relations d’approbation.

15.    Choisissez ensuite Modifier la relation d’approbation.

16.    Supprimez la politique existante, puis remplacez-la par une politique similaire à la suivante. Remplacez redshift_account1 par l’ID du compte qui utilise Amazon Redshift. Remplacez redshift_role1 par le nom du premier rôle que vous avez créé.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::redshift_account1:role/redshift_role1"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

17.    Choisissez ensuite Mettre à jour la politique de confiance.

Compte 1 : modification des autorisations du rôle créé dans Amazon Redshift

1.    Ouvrez la console IAM.

2.    Choisissez Rôles dans le volet de navigation, puis choisissez le nom du premier rôle (redshift_role1) créé précédemment.

3.    Dans la section Autorisations, choisissez Ajouter une politique en ligne.

4.    Choisissez l’onglet JSON. Supprimez la politique existante, puis entrez une politique IAM similaire à la suivante. Remplacez glue_s3_account2 par l’ID du compte qui utilise AWS Glue et Amazon S3. Remplacez glue_s3_role2 par le nom du deuxième rôle que vous avez créé :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1487639602000",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::glue_s3_account2:role/glue_s3_role2"
    }
  ]
}<br>

5.    Choisissez Vérifier une politique.

6.    Saisissez un nom pour la politique, puis choisissez Créer une politique.

7.    Connectez-vous au cluster Amazon Redshift.

8.    Créez un schéma externe à l’aide des rôles que vous avez créés dans les deux comptes, comme le montre l’exemple suivant :

create external schema spectrum_schema
from data catalog
database 'your_db'
iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'

Remplacez ces valeurs :
your_db : le nom de votre base de données dans AWS Glue.
redshift_account1 : l’ID du compte Amazon Redshift.
redshift_role1 : le nom du rôle que vous avez créé dans le compte Amazon Redshift.
glue_s3_account2 : l’ID du compte AWS Glue et Amazon S3.
glue_s3_role2 : le nom du rôle que vous avez créé dans le compte AWS Glue et Amazon S3.

Vous pouvez désormais interroger les tables AWS Glue dans glue_s3_account2 à l’aide d’Amazon Redshift Spectrum depuis votre cluster Amazon Redshift dans redshift_account1, à condition que toutes les ressources se trouvent dans la même région. Vous n’avez pas besoin de recréer vos tables externes, car Redshift Spectrum peut accéder à vos tables AWS Glue existantes.

La requête utilisée dans l’exemple suivant renvoie le nombre de lignes d’une table AWS Glue créée dans le schéma externe :

select count(*) from spectrum_schema.glue_table;

Remarque : remplacez spectrum_schema et glue_table par le nom de votre schéma et de la table AWS Glue.

Informations connexes

Chaînage des rôles IAM dans Amazon Redshift

Politiques IAM pour Amazon Redshift Spectrum

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans