Notes d’utilisation - 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.

Notes d’utilisation

Pour attribuer des privilèges sur un objet, vous devez répondre à l’un des critères suivants :

  • Être le propriétaire de l’objet.

  • Être un super-utilisateur.

  • Avoir un privilège accordé pour cet objet et ce privilège.

Par exemple, la commande suivante autorise l’utilisateur HR à exécuter des commandes SELECT sur la table des employés et à accorder et révoquer le même privilège aux autres utilisateurs.

grant select on table employees to HR with grant option;

HR ne peut pas accorder de privilèges pour une opération autre que SELECT, ou sur toute autre table que celle des employés.

Par exemple, la commande suivante autorise l’utilisateur HR à exécuter des commandes ALTER sur la table des employés et à accorder et révoquer le même privilège aux autres utilisateurs.

grant ALTER on table employees to HR with grant option;

HR ne peut pas accorder de privilèges pour une opération autre que ALTER ou sur toute autre table que celle des employés.

Le fait d’avoir les privilèges octroyés sur une vue n’implique pas d’avoir les privilèges sur les tables sous-jacentes. De même, le fait d’avoir les privilèges octroyés sur un schéma n’implique pas d’avoir les privilèges sur les tables du schéma. Accordez explicitement l’accès aux tables sous-jacentes.

Pour accorder des privilèges à une AWS Lake Formation table, le rôle IAM associé au schéma externe de la table doit être autorisé à accorder des privilèges à la table externe. L’exemple suivant crée un schéma externe avec un rôle IAM myGrantor associé. Le rôle IAM myGrantor a l’autorisation d’accorder des autorisations. La commande GRANT utilise l’autorisation du rôle IAM myGrantor associé au schéma externe pour accorder des autorisations au rôle IAM myGrantee.

create external schema mySchema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myGrantor' create external database if not exists;
grant select on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

Si vous accordez des privilèges GRANT ALL à un rôle IAM, des privilèges individuels sont accordés dans le catalogue de données Lake Formation. Par exemple, les privilèges GRANT ALL suivants permettent aux privilèges individuels accordés (SELECT, ALTER, DROP, DELETE et INSERT) de s’afficher dans la console Lake Formation.

grant all on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

Les super-utilisateurs peuvent accéder à tous les objets, quelle que soit les commandes GRANT et REVOKE qui définissent les privilèges d’objet.

Notes d’utilisation pour le contrôle d’accès de niveau colonne

Les notes d’utilisation suivantes s’appliquent aux privilèges de niveau colonne sur les tables et les vues Amazon Redshift. Ces notes décrivent des tableaux ; les mêmes notes s’appliquent aux vues, sauf signalement explicite d’une exception.

  • Pour une table Amazon Redshift, vous pouvez accorder uniquement les privilèges SELECT et UPDATE au niveau de la colonne. Pour une vue Amazon Redshift, vous pouvez accorder uniquement le privilège SELECT au niveau de la colonne.

  • Le mot-clé ALL est synonyme des privilèges combinés SELECT et UPDATE lorsqu’ils sont utilisés dans le contexte d’un GRANT de niveau colonne sur une table.

  • Si vous ne disposez pas du privilège SELECT sur toutes les colonnes d’une table, l’opération SELECT * ne renvoie que les colonnes auxquelles vous avez accès. Lorsque vous utilisez une vue, une opération SELECT * tente d'accéder à toutes les colonnes de la vue. Si vous n'êtes pas autorisé à accéder à toutes les colonnes, ces requêtes échouent avec un message d'erreur de refus d'autorisation.

  • SELECT * ne s’étend pas aux seules colonnes accessibles dans les cas suivants :

    • Vous ne pouvez pas créer une vue normale avec seulement des colonnes accessibles en utilisant SELECT *.

    • Vous ne pouvez pas créer une vue matérialisée avec seulement des colonnes accessibles en utilisant SELECT *.

  • Si vous disposez du privilège SELECT ou UPDATE sur une table ou une vue et que vous ajoutez une colonne, vous disposez toujours des mêmes privilèges sur la table ou la vue et donc, sur toutes ses colonnes.

  • Seul le propriétaire d’une table ou un superutilisateur peut accorder des privilèges de niveau colonne.

  • La clause WITH GRANT OPTION n’est pas prise en charge pour les privilèges de niveau colonne.

  • Vous ne pouvez pas détenir le même privilège au niveau de la table et de la colonne. Par exemple, l’utilisateur data_scientist ne peut pas avoir à la fois le privilège SELECT sur la table employee et le privilège SELECT sur la colonne employee.department. Tenez compte des résultats suivants lorsque vous accordez le même privilège à une table et à une colonne de la table :

    • Si un utilisateur dispose d’un privilège de niveau table sur une table, l’octroi du même privilège au niveau de la colonne n’a aucun effet.

    • Si un utilisateur dispose d’un privilège de niveau table sur une table, la révocation du même privilège pour une ou plusieurs colonnes de la table renvoie une erreur. Au lieu de cela, révoquez le privilège au niveau de la table.

    • Si un utilisateur dispose d’un privilège au niveau de la colonne, l’octroi du même privilège au niveau de la table renvoie une erreur.

    • Si un utilisateur dispose d’un privilège au niveau de la colonne, la révocation du même privilège au niveau de la table révoque les privilèges de colonne et de table pour toutes les colonnes de la table.

  • Vous ne pouvez pas accorder de privilèges de niveau colonne sur les vues de liaison tardive.

  • Pour créer une vue matérialisée, vous devez disposer du privilège SELECT au niveau de la table sur les tables de base. Même si vous disposez de privilèges au niveau de colonnes spécifiques, vous ne pouvez pas créer de vue matérialisée uniquement avec ces colonnes. Toutefois, vous pouvez accorder le privilège SELECT aux colonnes d’une vue matérialisée, de la même manière que les vues régulières.

  • Pour rechercher des privilèges de niveau colonne, utilisez la vue PG_ATTRIBUTE_INFO.

Notes d’utilisation pour l’octroi de l’autorisation ASSUMEROLE

Les notes d’utilisation suivantes s’appliquent à l’octroi de l’autorisation ASSUMEROLE dans Amazon Redshift.

Vous utilisez l’autorisation ASSUMEROLE pour contrôler les autorisations d’accès des rôles IAM pour les utilisateurs, les rôles ou les groupes de bases de données sur des commandes telles que COPY, UNLOAD, EXTERNAL FUNCTION ou CREATE MODEL. Après avoir accordé l’autorisation ASSUMEROLE à un utilisateur, un rôle ou un groupe pour un rôle IAM, l’utilisateur, le rôle ou le groupe peut assumer ce rôle lors de l’exécution de la commande. L’autorisation ASSUMEROLE vous permet d’accorder l’accès aux autorisations appropriées en fonction des besoins.

Seul un super-utilisateur de la base de données peut accorder ou révoquer l’autorisation ASSUMEROLE pour les utilisateurs, les rôles et les groupes. Un super-utilisateur conserve toujours l’autorisation ASSUMEROLE.

Pour autoriser l’utilisation de l’autorisation ASSUMEROLE pour les utilisateurs, les rôles et les groupes, un super-utilisateur effectue les deux actions suivantes :

  • Exécuter l’instruction suivante une fois sur le cluster :

    revoke assumerole on all from public for all;
  • Accordez l’autorisation ASSUMEROLE aux utilisateurs, aux rôles et aux groupes pour les autorisations appropriées.

Vous pouvez spécifier la création de chaînes de rôles dans la clause ON lorsque vous accordez l’autorisation ASSUMEROLE. Vous utilisez des virgules pour séparer les rôles dans une chaîne de rôles, par exemple Role1,Role2,Role3. Si la création de chaînes de rôles a été spécifiée lors de l’octroi de l’autorisation ASSUMEROLE, vous devez spécifier la chaîne de rôles lors de l’exécution des autorisations accordées par l’autorisation ASSUMEROLE. Vous ne pouvez pas spécifier des rôles individuels dans la chaîne de rôles lorsque vous exécutez des autorisations accordées par l’autorisation ASSUMEROLE. Par exemple, si un utilisateur, un rôle ou un groupe se voit attribuer la chaîne de rôles Role1,Role2,Role3, vous ne pouvez pas spécifier uniquement Role1 pour effectuer des opérations.

Si un utilisateur tente d’effectuer une opération COPY, UNLOAD, EXTERNAL FUNCTION ou CREATE MODEL et n’a pas obtenu l’autorisation ASSUMEROLE, un message semblable au suivant s’affiche.

ERROR: User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY

Pour répertorier les utilisateurs qui ont obtenu l’accès aux rôles et commandes IAM via l’autorisation ASSUMEROLE, consultez HAS_ASSUMEROLE_PRIVILEGE. Pour répertorier les rôles IAM et les autorisations de commande qui ont été accordées à un utilisateur que vous spécifiez, consultez PG_GET_IAM_ROLE_BY_USER. Pour répertorier les utilisateurs, les rôles et les groupes auxquels l’accès a été accordé à un rôle IAM que vous spécifiez, consultez PG_GET_GRANTEE_BY_IAM_ROLE.

Notes d’utilisation pour l’octroi d’autorisations de machine learning

Vous ne pouvez pas accorder ou révoquer directement les autorisations liées à une fonction ML. Une fonction ML appartient à un modèle ML et les autorisations sont contrôlées par le biais du modèle. En revanche, vous pouvez accorder des autorisations liées au modèle ML. L’exemple suivant montre comment autoriser tous les utilisateurs à exécuter la fonction ML associée au modèle customer_churn.

GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;

Vous pouvez également accorder toutes les autorisations à un utilisateur pour le modèle MLcustomer_churn.

GRANT ALL on MODEL customer_churn TO ml_user;

L’octroi de l’autorisation EXECUTE liée à une fonction de ML échouera s’il existe une fonction de ML dans le schéma, même si cette fonction de ML dispose déjà de l’autorisation EXECUTE par le biais de GRANT EXECUTE ON MODEL. Nous vous recommandons d’utiliser un schéma distinct lorsque vous utilisez la commande CREATE MODEL afin de conserver les fonctions ML dans un schéma distinct. L’exemple suivant vous montre comment procéder.

CREATE MODEL ml_schema.customer_churn FROM customer_data TARGET churn FUNCTION ml_schema.customer_churn_prediction IAM_ROLE default SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket' );