Autoriser Amazon Redshift à accéder à d' AWS autres services en votre nom - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Autoriser Amazon Redshift à accéder à d' AWS autres services en votre nom

Certaines fonctionnalités d'Amazon Redshift nécessitent qu'Amazon Redshift accède à AWS d'autres services en votre nom. Par exemple, les commandes COPY et UNLOAD peuvent charger ou décharger les données de votre cluster Amazon Redshift à l'aide d'un compartiment Amazon S3. La commande CREATE EXTERNAL FUNCTION peut appeler une fonction AWS Lambda à l'aide d'une fonction Lambda définie par l'utilisateur (UDF) scalaire. Amazon Redshift Spectrum peut utiliser un catalogue de données dans Amazon AWS Glue Athena ou. Pour que vos clusters Amazon Redshift agissent en votre nom, vous fournissez les informations d'identification de sécurité à vos clusters. La méthode recommandée pour fournir des informations d'identification de sécurité consiste à spécifier un rôle AWS Identity and Access Management (IAM). Pour COPY et UNLOAD, vous pouvez fournir des informations d'identification temporaires.

Les utilisateurs ont besoin d'un accès programmatique s'ils souhaitent interagir avec AWS l'extérieur du AWS Management Console. La manière d'accorder un accès programmatique dépend du type d'utilisateur qui y accède AWS.

Pour accorder aux utilisateurs un accès programmatique, choisissez l’une des options suivantes.

Quel utilisateur a besoin d’un accès programmatique ? Pour Par

Identité de la main-d’œuvre

(Utilisateurs gérés dans IAM Identity Center)

Utilisez des informations d'identification temporaires pour signer les demandes programmatiques adressées aux AWS CLI AWS SDK ou AWS aux API.

Suivez les instructions de l’interface que vous souhaitez utiliser.

IAM Utilisez des informations d'identification temporaires pour signer les demandes programmatiques adressées aux AWS CLI AWS SDK ou AWS aux API. Suivez les instructions de la section Utilisation d'informations d'identification temporaires avec AWS les ressources du Guide de l'utilisateur IAM.
IAM

(Non recommandé)

Utilisez des informations d'identification à long terme pour signer les AWS CLI demandes programmatiques adressées aux AWS SDK ou AWS aux API.

Suivez les instructions de l’interface que vous souhaitez utiliser.

Découvrez ci-dessous comment créer un rôle IAM doté des autorisations appropriées pour accéder à d'autres AWS services. Vous devez également associer le rôle à votre cluster et spécifier l'Amazon Resource Name (ARN) du rôle lorsque vous exécutez la commande Amazon Redshift. Pour plus d'informations, consultez Autorisation des opérations COPY, UNLOAD, CREATE EXTERNAL FUNCTION et CREATE EXTERNAL SCHEMA à l'aide des rôles IAM.

De plus, un super-utilisateur peut accorder le privilège ASSUMEROLE à des utilisateurs et des groupes spécifiques pour fournir l'accès à un rôle pour les opérations COPY et UNLOAD. Pour plus d'informations, consultez la rubrique GRANT dans le Guide du développeur de la base de données Amazon Redshift.

Création d'un rôle IAM pour permettre à votre cluster Amazon Redshift d'accéder aux services AWS

Pour créer un rôle IAM afin d’autoriser votre cluster Amazon Redshift à communiquer avec d’autres services AWS en votre nom, procédez comme suit. Les valeurs utilisées dans cette section sont des exemples. Vous pouvez choisir des valeurs en fonction de vos besoins.

Pour créer un rôle IAM afin de permettre à Amazon Redshift d'accéder aux services AWS
  1. Ouvrez la console IAM.

  2. Dans le panneau de navigation, choisissez Roles (Rôles).

  3. Sélectionnez Create role (Créer un rôle).

  4. Choisissez Service AWS , puis Redshift.

  5. Sous Sélectionner votre cas d’utilisation, choisissez Redshift - Personnalisable, puis Suivant : Autorisations. La page Attacher une politique d’autorisations s’affiche.

  6. Pour accéder à Amazon S3 à l'aide de COPY, par exemple, vous pouvez utiliser AmazonS3ReadOnlyAccess et l'ajouter. Pour accéder à Amazon S3 à l'aide de COPY ou UNLOAD, nous vous suggérons de créer des politiques gérées qui restreignent l'accès au compartiment souhaité et utilisent les préfixes appropriés en conséquence. Pour les opérations de lecture et d'écriture, nous vous recommandons d'appliquer les moindres privilèges, ainsi que de restreindre uniquement les compartiments Amazon S3 et les préfixes de clé requis par Amazon Redshift.

    Pour accéder à l'appel des fonctions Lambda pour la commande CREATE EXTERNAL FUNCTION, ajoutez AWSLambdaRole.

    Pour Redshift Spectrum, en plus de l'accès à Amazon S3, ajoutez AWSGlueConsoleFullAccess ou AmazonAthenaFullAccess.

    Choisissez Suivant : Balises.

  7. La page Ajouter des balises s’affiche. Si vous le souhaitez, vous pouvez ajouter des balises. Choisissez Suivant : vérification.

  8. Pour Nom du rôle, indiquez le nom de votre rôle, par exemple RedshiftCopyUnload. Sélectionnez Create role (Créer un rôle).

  9. Le nouveau rôle est disponible pour tous les utilisateurs des clusters qui utilisent ce rôle. Pour limiter l’accès à des utilisateurs spécifiques uniquement sur certains clusters, ou sur des clusters dans des régions spécifiques, modifiez la relation d’approbation de ce rôle. Pour plus d'informations, consultez Restriction de l'accès aux rôles IAM.

  10. Associez le rôle à votre cluster. Vous pouvez associer un rôle IAM à un cluster lors de la création du cluster, ou vous pouvez ajouter le rôle à un cluster existant. Pour plus d'informations, consultez Association des rôles IAM aux clusters.

    Note

    Pour restreindre l'accès à des données spécifiques, utilisez un rôle IAM qui accorde les moindres privilèges requis.

Restriction de l'accès aux rôles IAM

Par défaut, les rôles IAM qui sont disponibles pour un cluster Amazon Redshift sont disponibles pour tous les utilisateurs de ce cluster. Vous pouvez choisir de restreindre les rôles IAM à des utilisateurs de base de données Amazon Redshift spécifiques sur des clusters spécifiques ou à des régions spécifiques.

Pour permettre uniquement aux utilisateurs de base de données spécifiques d'utiliser un rôle IAM, procédez comme suit.

Pour identifier les utilisateurs de base de données spécifiques avec accès à un rôle IAM
  1. Identifiez l'Amazon Resource Name (ARN) pour les utilisateurs de base de données de votre cluster Amazon Redshift. L'ARN d'un utilisateur de base de données est au format : arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name.

    Pour Amazon Redshift sans serveur, utilisez le format ARN suivant. arn:aws:redshift:region:account-id:dbuser:workgroup-name/user-name

  2. Ouvrez la console IAM.

  3. Dans le panneau de navigation, choisissez Roles (Rôles).

  4. Sélectionnez le rôle IAM de votre choix pour restreindre l'accès aux utilisateurs de base de données Amazon Redshift spécifiques.

  5. Choisissez l'onglet Relations d'approbation, puis Modifier la relation d'approbation. Un nouveau rôle IAM qui permet à Amazon Redshift AWS d'accéder à d'autres services en votre nom repose sur une relation de confiance comme suit :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. Ajoutez une condition à la section action sts:AssumeRole de la relation d'approbation qui limite le champ sts:ExternalId aux valeurs que vous spécifiez. Incluez un ARN pour chaque utilisateur de base de données auquel vous voulez accorder l'accès au rôle. L'ID externe peut être n'importe quelle chaîne unique.

    Par exemple, la relation d'approbation suivante spécifie seuls les utilisateurs de base de données user1 et user2 sur le cluster my-cluster de la région us-west-2 ont l'autorisation d'utiliser ce rôle IAM.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1", "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2" ] } } }] }
  7. Choisissez Mettre à jour la politique d'approbation.

Restriction d'un rôle IAM à une région AWS

Vous pouvez restreindre l'accès à un rôle IAM uniquement dans une certaine AWS région. Par défaut, les rôles IAM pour Amazon Redshift ne sont pas limités à une seule région.

Pour limiter l'utilisation d'un rôle IAM par région, procédez comme suit.

Pour identifier les régions autorisées pour un rôle IAM
  1. Ouvrez la console IAM à l'adresse https://console.aws.amazon.com/.

  2. Dans le panneau de navigation, choisissez Roles (Rôles).

  3. Sélectionnez le rôle de votre choix pour modifier à l'aide de régions spécifiques.

  4. Choisissez l'onglet Relations d'approbation, puis Modifier la relation d'approbation. Un nouveau rôle IAM qui permet à Amazon Redshift AWS d'accéder à d'autres services en votre nom repose sur une relation de confiance comme suit :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. Modifiez la liste Service pour Principal avec la liste des régions spécifiques pour lesquelles vous voulez permettre l'utilisation du rôle. Chaque région de la liste Service doit être au format suivant : redshift.region.amazonaws.com.

    Par exemple, la relation d'approbation modifiée suivante permet d'utiliser le rôle IAM dans les régions us-east-1 et us-west-2 uniquement.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.us-east-1.amazonaws.com", "redshift.us-west-2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. Choisissez Mettre à jour la politique de confiance

Chaînage des rôles IAM dans Amazon Redshift

Lorsque vous attachez un rôle à votre cluster, celui-ci peut assumer ce rôle pour accéder à Amazon S3, Amazon Athena et en votre AWS Lambda nom. AWS Glue Si un rôle attaché à votre cluster n’a pas accès aux ressources nécessaires, vous pouvez créer une chaîne avec un autre rôle, lequel peut appartenir à un autre compte. Votre cluster endosse alors provisoirement le rôle relié par la chaîne afin d’accéder aux données. Vous pouvez également accorder des accès entre comptes en créant des chaînes de rôles. Chaque rôle de la chaîne passe au rôle suivant, jusqu’à ce que le cluster endosse le dernier rôle de la chaîne. Le nombre maximal de rôles IAM que vous pouvez associer est soumis à un quota. Pour plus d'informations, consultez le quota « Rôles IAM du cluster permettant à Amazon Redshift AWS d'accéder à d'autres services » dans. Quotas pour les objets Amazon Redshift

Supposons, par exemple, que l'entreprise A souhaite accéder aux données d'un compartiment Amazon S3 appartenant à l'entreprise B. L'entreprise A crée un rôle de AWS service pour Amazon Redshift nommé RoleA et l'attache à son cluster. L'entreprise B crée un rôle nommé RoleB qui est autorisé à accéder aux données du compartiment de l'entreprise B. Pour accéder aux données dans le compartiment de l'entreprise B, l'entreprise A exécute une commande COPY à l'aide d'un paramètre iam_role qui relie par chaîne RoleA et RoleB. Pendant la durée de l'opération COPY, RoleA endosse temporairement RoleB pour accéder au compartiment Amazon S3.

Pour créer une chaîne de rôles, vous devez établir une relation d’approbation entre ces rôles. Un rôle qui endosse un autre rôle (par exemple, RoleA) doit disposer d'une politique d'autorisations qui l'autorise à endosser le rôle relié par la chaîne suivant (par exemple, RoleB). De même, le rôle qui transmet les autorisations (RoleB) doit avoir une politique d'approbation lui permettant de transmettre ses autorisations au rôle relié par la chaîne précédent (RoleA). Pour plus d'informations, consultez la rubrique Utilisation de rôles IAM dans le Guide de l'utilisateur IAM.

Le premier rôle de la chaîne doit être attaché au cluster. Le premier rôle, et chaque rôle ultérieur qui endosse le rôle suivant dans la chaîne, doivent avoir une politique incluant une déclaration spécifique. Cette déclaration comprend l'effet Allow sur l'action sts:AssumeRole ainsi que l'Amazon Resource Name (ARN) du rôle suivant dans un élément Resource. Dans notre exemple, RoleA comporte la politique d'autorisation suivante, qui l'autorise à endosser RoleB, appartenant au compte AWS 210987654321.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::210987654321:role/RoleB" } ] }

Un rôle transféré à un autre rôle doit établir une relation de confiance avec le rôle qui assume le rôle ou avec le AWS compte propriétaire du rôle. Dans notre exemple, RoleB possède la politique d'approbation suivante pour établir une relation d'approbation avec RoleA.

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

La politique de confiance suivante établit une relation de confiance avec le propriétaire du RoleA AWS compte123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
Note

Pour restreindre l'autorisation de chaînage de rôles à des utilisateurs spécifiques, définissez une condition. Pour plus d'informations, consultez Restriction de l'accès aux rôles IAM.

Lorsque vous exécutez une commande UNLOAD, COPY, CREATE EXTERNAL FUNCTION ou CREATE EXTERNAL SCHEMA, vous enchaînez les rôles en incluant une liste d'ARN de rôles, séparés par des virgules, dans le paramètre iam_role. L'exemple suivant montre la syntaxe d'une chaîne de rôles dans le paramètre iam_role.

unload ('select * from venue limit 10') to 's3://acmedata/redshift/venue_pipe_' IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
Note

L'intégralité de la chaîne de rôle est placée entre guillemets simples et ne doit pas contenir d'espaces.

Dans les exemples suivants, RoleA est attaché au cluster appartenant au compte AWS 123456789012. RoleB, qui appartient au compte 210987654321, a l'autorisation d'accéder au compartiment nommé s3://companyb/redshift/. L'exemple suivant crée une chaîne avec RoleA et RoleB pour décharger des données dans le compartiment s3://companyb/redshift/.

unload ('select * from venue limit 10') to 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

L'exemple suivant utilise une commande COPY pour charger les données qui ont été déchargées dans l'exemple précédent.

copy venue from 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Dans l'exemple suivant, CREATE EXTERNAL SCHEMA utilise des rôles reliés par chaîne pour endosser le rôle RoleB.

create external schema spectrumexample from data catalog database 'exampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Dans l'exemple suivant, CREATE EXTERNAL FUNCTION utilise des rôles reliés par chaîne pour endosser le rôle RoleB.

create external function lambda_example(varchar) returns varchar volatile lambda 'exampleLambdaFunction' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Pour en savoir plus, veuillez également consulter Autorisation des opérations COPY, UNLOAD, CREATE EXTERNAL FUNCTION et CREATE EXTERNAL SCHEMA à l'aide des rôles IAM.