Configuration des autorisations IAM pour accéder aux sources de données (pour les administrateurs) - Amazon SageMaker AI

Configuration des autorisations IAM pour accéder aux sources de données (pour les administrateurs)

Les administrateurs doivent s’assurer que le rôle d’exécution utilisé par les applications JupyterLab dispose des autorisations IAM AWS nécessaires pour accéder aux données via les connexions AWS Glue configurées.

  • Connexions créées par les administrateurs à l’aide de l’AWS CLI : pour visualiser les connexions AWS Glue créées par les administrateurs et accéder à leurs données, les utilisateurs doivent demander à leur administrateur d’attacher des autorisations spécifiques au rôle d’exécution SageMaker AI utilisé par leur application JupyterLab dans Studio. Cela inclut l’accès à AWS Glue, Secrets Manager et aux autorisations spécifiques à la base de données. Les connexions créées par les administrateurs sont visibles par toutes les applications partageant le rôle d’exécution autorisé à consulter des catalogues AWS Glue ou des bases de données spécifiques. Pour en savoir plus sur la liste des autorisations requises par type de source de données, consultez les autorisations de connexion définies par l’administrateur dans Autorisations IAM requises par les connexions définies par l’administrateur.

  • Connexions créées par les utilisateurs à l’aide de l’interface utilisateur de l’extension SQL dans JupyterLab : les connexions créées par les profils utilisateur partageant le même rôle d’exécution seront également répertoriées, sauf si la visibilité de leurs connexions est limitée à celles créées par l’utilisateur. Les connexions créées par les utilisateurs sont balisées avec le profil utilisateur qui les a créées. Pour limiter la possibilité d’afficher, de mettre à jour ou de supprimer ces connexions créées par l’utilisateur uniquement à l’utilisateur qui les a créées, les administrateurs peuvent ajouter des restrictions de contrôle d’accès supplémentaires basées sur les balises aux autorisations IAM du rôle d’exécution. Pour en savoir plus sur le contrôle d’accès supplémentaire requis, basé sur les balises, consultez Autorisations IAM requises par les connexions définies par l’utilisateur.

Autorisations IAM requises par les connexions définies par l’administrateur

Pour accorder au rôle d’exécution SageMaker AI utilisé par votre application JupyterLab dans Studio l’accès à une source de données par le biais d’une connexion AWS Glue, attachez la politique en ligne suivante au rôle.

Pour consulter les détails des autorisations et des politiques spécifiques à chaque source de données ou méthode d’authentification, choisissez le type de connexion approprié ci-dessous.

Note

Nous vous recommandons de limiter les autorisations de votre politique aux seules ressources et actions requises.

Pour réduire la portée des politiques et accorder un accès de moindre privilège, remplacez le caractère générique "Resource": ["*"] dans votre politique par des ARN spécifiques aux ressources exactes nécessitant un accès. Pour plus d’informations sur la manière de contrôler l’accès à vos ressources, consultez Optimisation de l’accès aux ressources AWS grâce à des autorisations ARN granulaires.

Note

Nous recommandons vivement de limiter cette politique aux seules actions et ressources requises.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetS3AndDataSourcesMetadata", "Effect": "Allow", "Action": [ "glue:GetDatabases", "glue:GetSchema", "glue:GetTables", "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation", "glue:GetDatabase", "glue:GetTable", "glue:ListSchemas", "glue:GetPartitions" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:connection/*" ] }, { "Sid": "ExecuteQueries", "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:ListDatabases", "athena:ListTableMetadata", "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:RunQuery", "athena:StartSession", "athena:GetQueryResults", "athena:ListWorkGroups", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:GetBucketLocation", "athena:GetDataCatalog", "s3:AbortMultipartUpload", "s3:GetObject", "s3:PutObject", "athena:GetWorkGroup" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:athena:us-east-1:111122223333:workgroup/workgroup-name" ] }, { "Sid": "GetGlueConnections", "Effect": "Allow", "Action": [ "glue:GetConnections", "glue:GetConnection" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:connection/*" ] }, { "Sid": "GetSecrets", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name" ] }, { "Sid": "GetClusterCredentials", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name" ] } ] }
Note

Nous recommandons vivement de limiter cette politique aux seules ressources requises.

Pour plus d’informations, consultez Exemples de politiques d’autorisation IAM dans la documentation d’Athena.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetS3AndDataSourcesMetadata", "Effect": "Allow", "Action": [ "glue:GetDatabases", "glue:GetSchema", "glue:GetTables", "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation", "glue:GetDatabase", "glue:GetTable", "glue:ListSchemas", "glue:GetPartitions" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:glue:region:account_id:catalog", "arn:aws:glue:region:account_id:connection/*", "..." ] }, { "Sid": "ExecuteAthenaQueries", "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:ListDatabases", "athena:ListTableMetadata", "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:RunQuery", "athena:StartSession", "athena:GetQueryResults", "athena:ListWorkGroups", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:GetBucketLocation", "athena:GetDataCatalog", "s3:AbortMultipartUpload", "s3:GetObject", "s3:PutObject", "athena:GetWorkGroup" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:athena:region:account_id:workgroup/workgroup-name", "..." ] ] }, { "Sid": "GetGlueConnections", "Effect": "Allow", "Action": [ "glue:GetConnections", "glue:GetConnection" ], "Resource": [ "arn:aws:glue:region:account_id:catalog", "arn:aws:glue:region:account_id:connection/*", "..." ] }, { "Sid": "GetSecrets", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account_id:secret:secret-name", "..." ] } ] }
Note

Nous recommandons vivement de limiter cette politique aux seules ressources requises.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetS3Metadata", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "..." ] }, { "Sid": "GetGlueConnections", "Effect": "Allow", "Action": [ "glue:GetConnections", "glue:GetConnection" ], "Resource": "arn:aws:glue:region:account_id:catalog", "arn:aws:glue:region:account_id:connection/*", "..." ] }, { "Sid": "GetSecrets", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account_id:secret:secret-name", "..." ] } ] }
Note

Nous recommandons vivement de limiter cette politique aux seules ressources requises.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetS3Metadata", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Sid": "GetGlueConnections", "Effect": "Allow", "Action": [ "glue:GetConnections", "glue:GetConnection" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:connection/*", "arn:aws:glue:us-east-1:111122223333:connection/connection-name" ] }, { "Sid": "GetSecrets", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name", "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name-with-suffix" ] }, { "Sid": "GetClusterCredentials", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name", "arn:aws:redshift:us-east-1:111122223333:dbuser:cluster-name/db-user-name" ] } ] }
Note

Nous recommandons vivement de limiter cette politique aux seules ressources requises.

{ { "Version": "2012-10-17", "Statement": [ { "Sid": "GetS3Metadata", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "..." ] }, { "Sid": "GetGlueConnections", "Effect": "Allow", "Action": [ "glue:GetConnections", "glue:GetConnection" ], "Resource": [ "arn:aws:glue:region:account_id:catalog", "arn:aws:glue:region:account_id:connection/*", "..." ] }, { "Sid": "GetSecrets", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account_id:secret:secret-name", "..." ] }, { "Sid": "GetRedshiftServerlessCredentials", "Effect": "Allow", "Action": [ "redshift-serverless:GetCredentials" ], "Resource": [ "arn:aws:redshift-serverless:region:account_id:namespace/namespace-id", "..." ] } ] } }

Autorisations IAM requises par les connexions définies par l’utilisateur

Les autorisations de politique IAM accordées à un utilisateur peuvent tenir compte de la présence de la balise UserProfile sur les ressources de connexion AWS Glue.

  • Pour visualiser les connexions AWS Glue :

    • Les utilisateurs peuvent visualiser toutes les connexions dépourvues de la balise UserProfile (créées par un administrateur).

    • Les utilisateurs peuvent visualiser les connexions dotées de la balise UserProfile ayant la même valeur que le nom de leur profil utilisateur.

    • Les utilisateurs ne peuvent pas visualiser les connexions dotées de la balise UserProfile ayant une valeur différente du nom de leur profil utilisateur.

  • Pour mettre à jour ou supprimer des connexions AWS Glue :

    • Les utilisateurs peuvent mettre à jour ou supprimer une connexion dotée de la balise UserProfile ayant la même valeur que le nom de leur profil utilisateur.

    • Les utilisateurs ne peuvent pas mettre à jour ni supprimer une connexion dotée de la balise UserProfile ayant une valeur différente du nom de leur profil utilisateur.

    • Les utilisateurs ne peuvent pas mettre à jour ni supprimer les connexions dépourvues de la balise UserProfile.

Pour ce faire, les administrateurs doivent accorder au rôle d’exécution utilisé par l’application JupyterLab du profil utilisateur des autorisations supplémentaires allant au-delà des autorisations de connexion existantes définies par l’administrateur. Plus précisément, outre les autorisations requises pour accéder aux connexions AWS Glue définies par l’administrateur, les deux autorisations IAM supplémentaires suivantes doivent être accordées au rôle d’exécution de l’utilisateur :

  • Autorisation de créer des connexions AWS Glue et d’associer la balise UserProfile à la valeur du nom de profil de l’utilisateur.

  • Autorisation d’afficher, de mettre à jour et de supprimer les connexions AWS Glue dont la balise UserProfile correspond au nom de profil de l’utilisateur.

Cette autorisation restreint l’accès aux connexions AWS Glue en fonction d’une valeur de balise de profil utilisateur spécifique. Mettez à jour la valeur de la balise UserProfile avec le nom de profil de l’utilisateur que vous souhaitez cibler.

"Action": [ "glue:GetConnection", "glue:GetConnections" ], "Resource": [ "arn:aws:glue:region:account_id:connection/*" ], "Condition": { "StringEqualsIfExists": { "aws:ResourceTag/UserProfile": "user_profile_name" } }

Cette autorisation limite la capacité à créer, mettre à jour et supprimer des connexions créées par l’utilisateur aux seules connexions créées par le profil utilisateur avec la valeur de balise UserProfile spécifiée.

"Action": [ "glue:DeleteConnection", "glue:UpdateConnection", "glue:CreateConnection", "glue:TagResource" ], "Resource": [ "arn:aws:glue:region:account_id:connection/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/UserProfile": "user_profile" } }

Optimisation de l’accès aux ressources AWS grâce à des autorisations ARN granulaires

Pour un contrôle plus précis de l’accès à vos ressources AWS, remplacez la ressource générique "Resource": ["*"] dans vos politiques par les Amazon Resource Names (ARN) spécifiques aux seules ressources nécessitant un accès. L’utilisation des ARN exacts plutôt que d’un caractère générique restreint l’accès aux ressources prévues.

  • Utilisation des ARN de compartiments Amazon S3 spécifiques

    Par exemple, "arn:aws:s3:::bucket-name" ou "arn:aws:s3:::bucket-name/*" pour les opérations au niveau du compartiment ou au niveau de l’objet.

    Pour en savoir plus sur tous les types de ressources dans Amazon S3, consultez Types de ressources définis par Amazon S3.

  • Utilisation des ARN de bases de données AWS Glue spécifiques

    Par exemple, "arn:aws:glue:region:account-id:catalog" ou "arn:aws:glue:region:account-id:database/db-name". Pour en savoir plus sur tous les types de ressources dans AWS Glue, consultez Types de ressources définis par AWS Glue.

  • Utilisation des ARN de groupes de travail Athena spécifiques

    Par exemple "arn:aws:athena:region:account-id:workgroup/workgroup-name". Pour en savoir plus sur les types de ressources dans Athena, consultez Types de ressources définis par Athena.

  • Utilisation des ARN de secrets AWS Secrets Manager spécifiques

    Par exemple "arn:aws:secretsmanager:region:account-id:secret:secret-name". Pour en savoir plus sur tous les types de ressources dans AWS Secrets Manager, consultez Types de ressources définis par AWS Secrets Manager.

  • Utilisation des ARN de clusters Amazon Redshift spécifiques

    Par exemple "arn:aws:redshift:region:account-id:cluster:cluster-name". Pour en savoir plus sur les types de ressources dans Amazon Redshift, consultez Types de ressources définis par Amazon Redshift. Pour en savoir plus sur tous les types de ressources dans Redshift sans serveur, consultez Types de ressources définis par Redshift sans serveur.