Comment créer un accès entre comptes Amazon Redshift Spectrum à AWS Glue et à Amazon S3 ?

Date de la dernière mise à jour : 11/08/2020

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

Brève description

Pour accéder aux ressources AWS qui se trouvent dans un autre compte Amazon Redshift Spectrum, procédez comme suit :

1.    Dans le compte 1, créez un rôle AWS Identity and Access Management (IAM) avec une relation d'approbation avec Amazon Redshift. Ce rôle doit être attaché au cluster Amazon Redshift.

2.    Dans le compte 2, créez un autre rôle avec un accès à AWS Glue et à Amazon S3. Ce rôle modifie la relation d'approbation et permet au compte Amazon Redshift d'endosser ce rôle.

3.    Dans le compte 1, modifiez la relation d'approbation pour le rôle existant afin qu'il endosse le rôle créé dans le compte AWS Glue et Amazon S3.

Solution

Compte 1 : créer un rôle AWS Identity and Access Management (IAM) avec une relation d'approbation avec Amazon Redshift

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, sélectionnez Roles (Rôles), puis Create role (Créer un rôle).

3.    Dans la section Select type of trusted entity (Sélectionner le type d'entité de confiance), sélectionnez AWS service (Service AWS).

4.    Sélectionnez Redshift.

5.    Dans la section Select your use case (Sélectionner votre cas d'utilisation), sélectionnez Redshift - Customizable (Redshift - Personnalisable).

6.    Sélectionnez Next: Permissions, Next: Tags (Étape suivante : autorisations, Étape suivante : balises), puis Next: Review (Étape suivante : vérification). Vous n'avez pas besoin d'ajouter des stratégies ou des balises.

7.    Saisissez un Role name (Nom de rôle), puis choisissez Create rôle (Créer un rôle). Dans les exemples suivants, nous ferons référence à ce rôle sous le nom de redshift_role1.

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

Compte 2 : créer un autre rôle avec un accès à AWS Glue et Amazon S3

1.    Ouvrez la console IAM.

2.    Sélectionnez Stratégies, puis Créer une stratégie.

3.    Choisissez l'onglet JSON, puis saisissez une politique IAM similaire à celle-ci :

{
  "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, veillez à accorder les autorisations appropriées à Amazon Redshift.

4.    Sélectionnez Examiner une stratégie

5.    Saisissez un nom pour la stratégie, puis sélectionnez Créer une stratégie.

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

7.    Dans la section Select type of trusted entity (Sélectionner le type d'entité), sélectionnez Another AWS account (Un autre compte AWS).

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

9.    Sélectionnez Next: Permissions (Étape suivante : autorisations).

10.    Dans la liste des stratégies, cochez la case en regard du nom de la stratégie que vous avez créée.

11.    Sélectionnez Next: Tags (Étape suivante : balises), puis Next: Review (Étape suivante : vérification). Vous n'avez pas besoin d'ajouter de balises.

12.    Saisissez un Nom de rôle, puis sélectionnez Créer un rôle. Dans les exemples suivants, nous ferons référence à ce rôle sous le nom de glue_s3_role2.

13.    Dans le volet de navigation, sélectionnez Roles (Rôles).

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

15.    Sélectionnez Edit trust relationship (Modifier la relation d'approbation).

16.    Supprimez la stratégie existante, puis remplacez-la par une stratégie similaire à celle-ci. 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.    Sélectionnez Mettre à jour la stratégie d'approbation.

Compte 1 : modifier la relation d'approbation pour le rôle créé dans Amazon Redshift

1.    Ouvrez la console IAM.

2.    Sélectionnez Rôles dans le volet de navigation, puis le nom du premier rôle (redshift_role1) que vous avez créé précédemment.

3.    Sélectionnez Add inline policy (Ajouter une stratégie en ligne).

4.    Sélectionnez l'onglet JSON. Supprimez la stratégie existante, puis saisissez une stratégie IAM similaire à celle-ci. 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"
    }
  ]
}

5.    Choisissez Review policy (Vérifier la stratégie).

6.    Saisissez un nom pour la stratégie, puis sélectionnez Create policy (Créer une stratégie).

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 illustré dans 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 les valeurs suivantes :
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 du compte glue_s3_account2 à l'aide d'Amazon Redshift Spectrum à partir de votre cluster Amazon Redshift du compte redshift_account1, du moment que toutes les ressources se trouvent dans la même région. Vous n'avez pas besoin de créer d'autres tables externes, car Redshift Spectrum peut accéder aux tables AWS Glue existantes.

La requête de l'exemple suivant renvoie le nombre de lignes d'une table AWS Glue qui a été 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 votre table AWS Glue.


Cette page vous a-t-elle été utile ?


Besoin d'aide pour une question technique ou de facturation ?