Gestion des identités et des accès AWS pour SageMaker HyperPod
Gestion des identités et des accès AWS (IAM) est un service AWS qui aide un administrateur à contrôler en toute sécurité l’accès aux ressources AWS. Des administrateurs IAM contrôlent les personnes qui peuvent être authentifiées (connectées) et autorisées (disposant d'autorisations) pour utiliser des ressources Amazon EKS. IAM est un service AWS que vous pouvez utiliser sans frais supplémentaires.
Important
Les politiques IAM personnalisées qui autorisent Amazon SageMaker Studio ou Amazon SageMaker Studio Classic à créer des ressources Amazon SageMaker doivent également accorder des autorisations pour ajouter des balises à ces ressources. L’autorisation d’ajouter des balises aux ressources est requise, car Studio et Studio Classic balisent automatiquement toutes les ressources qu’ils créent. Si une politique IAM autorise Studio et Studio Classic à créer des ressources mais n’autorise pas le balisage, des erreurs « AccessDenied » peuvent se produire lors de la tentative de création de ressources. Pour plus d’informations, consultez Octroi d’autorisations pour baliser les ressources SageMaker AI.
Les Politiques gérées par AWS pour Amazon SageMaker AI qui autorisent la création de ressources SageMaker incluent déjà des autorisations permettant d’ajouter des balises lors de la création de ces ressources.
Supposons qu’il existe deux couches principales d’utilisateurs de SageMaker HyperPod : les administrateurs de cluster et les scientifiques des données.
-
Utilisateurs administrateurs de cluster : ils sont responsables de la création et de la gestion des clusters SageMaker HyperPod. Cela inclut la configuration des clusters HyperPod et la gestion de l’accès des utilisateurs à ceux-ci.
-
Créez et configurez des clusters SageMaker HyperPod avec Slurm ou Amazon EKS.
-
Créez et configurez des rôles IAM pour les utilisateurs scientifiques des données et les ressources des clusters HyperPod.
-
Pour l’orchestration de SageMaker HyperPod avec Amazon EKS, créez et configurez des entrées d’accès EKS, un contrôle d’accès basé sur les rôles (RBAC) et l’identité du pod pour répondre aux cas d’utilisation de science des données.
-
-
Utilisateurs scientifiques des données : concentrez-vous sur l’entraînement des modèles ML. Ils utilisent l’orchestrateur open source ou la CLI de SageMaker HyperPod pour soumettre et gérer les tâches d’entraînement.
-
Assumez et utilisez le rôle IAM fourni par les utilisateurs administrateurs de cluster.
-
Interagissez avec les interfaces de ligne de commande de l’orchestrateur open source pris en charge par SageMaker HyperPod (Slurm ou Kubernetes) ou l’interface de ligne de commande de SageMaker HyperPod pour vérifier la capacité des clusters, vous connecter à un cluster et soumettre des charges de travail.
-
Configurez des rôles IAM pour les administrateurs de clusters en attachant les autorisations ou politiques appropriées pour exploiter les clusters SageMaker HyperPod. Les administrateurs de cluster doivent également créer des rôles IAM pour fournir à SageMaker HyperPod les ressources nécessaires pour exécuter et communiquer avec les ressources AWS nécessaires, telles qu’Amazon S3, Amazon CloudWatch et AWS Systems Manager (SSM). Enfin, l’administrateur du compte AWS ou les administrateurs du cluster doivent autoriser les scientifiques à accéder aux clusters SageMaker HyperPod et à exécuter des charges de travail ML.
En fonction de l’orchestrateur que vous choisissez, les autorisations requises pour l’administrateur de cluster et les scientifiques peuvent varier. Vous pouvez également contrôler l’étendue des autorisations pour différentes actions dans les rôles à l’aide des clés de condition par service. Utilisez les références d’autorisation de service suivantes pour étendre la portée détaillée des services liés à SageMaker HyperPod.
-
Amazon Elastic Container Registry (pour l’orchestration de clusters SageMaker HyperPod avec Amazon EKS)
-
Amazon Elastic Kubernetes Service (pour l’orchestration de clusters SageMaker HyperPod avec Amazon EKS)
Rubriques
Autorisations IAM pour la création de clusters
La création de clusters HyperPod nécessite les autorisations IAM décrites dans l’exemple de politique suivant. Si votre Compte AWS dispose des autorisations AdministratorAccess, celles-ci sont accordées par défaut.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateCluster", "sagemaker:DeleteCluster", "sagemaker:UpdateCluster" ], "Resource": "arn:aws:sagemaker:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "sagemaker:AddTags" ], "Resource": "arn:aws:sagemaker:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "sagemaker:ListTags", "sagemaker:ListClusters", "sagemaker:ListClusterNodes", "sagemaker:ListComputeQuotas", "sagemaker:ListTrainingPlans", "sagemaker:DescribeCluster", "sagemaker:DescribeClusterNode" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:UpdateStack", "cloudformation:DeleteStack", "cloudformation:ContinueUpdateRollback", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:Get*", "cloudformation:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/sagemaker-*", "Condition": { "StringEquals": { "iam:PassedToService": [ "sagemaker.amazonaws.com", "eks.amazonaws.com", "lambda.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": [ "iam:PassRole", "iam:GetRole" ], "Resource": "arn:aws:iam::*:role/*" }, { "Sid": "AmazonVPCFullAccess", "Effect": "Allow", "Action": [ "ec2:AcceptVpcPeeringConnection", "ec2:AcceptVpcEndpointConnections", "ec2:AllocateAddress", "ec2:AssignIpv6Addresses", "ec2:AssignPrivateIpAddresses", "ec2:AssociateAddress", "ec2:AssociateDhcpOptions", "ec2:AssociateRouteTable", "ec2:AssociateSecurityGroupVpc", "ec2:AssociateSubnetCidrBlock", "ec2:AssociateVpcCidrBlock", "ec2:AttachClassicLinkVpc", "ec2:AttachInternetGateway", "ec2:AttachNetworkInterface", "ec2:AttachVpnGateway", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CreateCarrierGateway", "ec2:CreateCustomerGateway", "ec2:CreateDefaultSubnet", "ec2:CreateDefaultVpc", "ec2:CreateDhcpOptions", "ec2:CreateEgressOnlyInternetGateway", "ec2:CreateFlowLogs", "ec2:CreateInternetGateway", "ec2:CreateLocalGatewayRouteTableVpcAssociation", "ec2:CreateNatGateway", "ec2:CreateNetworkAcl", "ec2:CreateNetworkAclEntry", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateTags", "ec2:CreateVpc", "ec2:CreateVpcEndpoint", "ec2:CreateVpcEndpointConnectionNotification", "ec2:CreateVpcEndpointServiceConfiguration", "ec2:CreateVpcPeeringConnection", "ec2:CreateVpnConnection", "ec2:CreateVpnConnectionRoute", "ec2:CreateVpnGateway", "ec2:DeleteCarrierGateway", "ec2:DeleteCustomerGateway", "ec2:DeleteDhcpOptions", "ec2:DeleteEgressOnlyInternetGateway", "ec2:DeleteFlowLogs", "ec2:DeleteInternetGateway", "ec2:DeleteLocalGatewayRouteTableVpcAssociation", "ec2:DeleteNatGateway", "ec2:DeleteNetworkAcl", "ec2:DeleteNetworkAclEntry", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DeleteSecurityGroup", "ec2:DeleteSubnet", "ec2:DeleteTags", "ec2:DeleteVpc", "ec2:DeleteVpcEndpoints", "ec2:DeleteVpcEndpointConnectionNotifications", "ec2:DeleteVpcEndpointServiceConfigurations", "ec2:DeleteVpcPeeringConnection", "ec2:DeleteVpnConnection", "ec2:DeleteVpnConnectionRoute", "ec2:DeleteVpnGateway", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeCarrierGateways", "ec2:DescribeClassicLinkInstances", "ec2:DescribeCustomerGateways", "ec2:DescribeDhcpOptions", "ec2:DescribeEgressOnlyInternetGateways", "ec2:DescribeFlowLogs", "ec2:DescribeInstances", "ec2:DescribeInternetGateways", "ec2:DescribeIpv6Pools", "ec2:DescribeLocalGatewayRouteTables", "ec2:DescribeLocalGatewayRouteTableVpcAssociations", "ec2:DescribeKeyPairs", "ec2:DescribeMovingAddresses", "ec2:DescribeNatGateways", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaceAttribute", "ec2:DescribeNetworkInterfacePermissions", "ec2:DescribeNetworkInterfaces", "ec2:DescribePrefixLists", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroupReferences", "ec2:DescribeSecurityGroupRules", "ec2:DescribeSecurityGroups", "ec2:DescribeSecurityGroupVpcAssociations", "ec2:DescribeStaleSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeTags", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcClassicLink", "ec2:DescribeVpcClassicLinkDnsSupport", "ec2:DescribeVpcEndpointConnectionNotifications", "ec2:DescribeVpcEndpointConnections", "ec2:DescribeVpcEndpoints", "ec2:DescribeVpcEndpointServiceConfigurations", "ec2:DescribeVpcEndpointServicePermissions", "ec2:DescribeVpcEndpointServices", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeVpcs", "ec2:DescribeVpnConnections", "ec2:DescribeVpnGateways", "ec2:DetachClassicLinkVpc", "ec2:DetachInternetGateway", "ec2:DetachNetworkInterface", "ec2:DetachVpnGateway", "ec2:DisableVgwRoutePropagation", "ec2:DisableVpcClassicLink", "ec2:DisableVpcClassicLinkDnsSupport", "ec2:DisassociateAddress", "ec2:DisassociateRouteTable", "ec2:DisassociateSecurityGroupVpc", "ec2:DisassociateSubnetCidrBlock", "ec2:DisassociateVpcCidrBlock", "ec2:EnableVgwRoutePropagation", "ec2:EnableVpcClassicLink", "ec2:EnableVpcClassicLinkDnsSupport", "ec2:GetSecurityGroupsForVpc", "ec2:ModifyNetworkInterfaceAttribute", "ec2:ModifySecurityGroupRules", "ec2:ModifySubnetAttribute", "ec2:ModifyVpcAttribute", "ec2:ModifyVpcEndpoint", "ec2:ModifyVpcEndpointConnectionNotification", "ec2:ModifyVpcEndpointServiceConfiguration", "ec2:ModifyVpcEndpointServicePermissions", "ec2:ModifyVpcPeeringConnectionOptions", "ec2:ModifyVpcTenancy", "ec2:MoveAddressToVpc", "ec2:RejectVpcEndpointConnections", "ec2:RejectVpcPeeringConnection", "ec2:ReleaseAddress", "ec2:ReplaceNetworkAclAssociation", "ec2:ReplaceNetworkAclEntry", "ec2:ReplaceRoute", "ec2:ReplaceRouteTableAssociation", "ec2:ResetNetworkInterfaceAttribute", "ec2:RestoreAddressToClassic", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:UnassignIpv6Addresses", "ec2:UnassignPrivateIpAddresses", "ec2:UpdateSecurityGroupRuleDescriptionsEgress", "ec2:UpdateSecurityGroupRuleDescriptionsIngress" ], "Resource": "*" }, { "Sid": "CloudWatchPermissions", "Effect": "Allow", "Action": [ "cloudwatch:*", "logs:*", "sns:CreateTopic", "sns:ListSubscriptions", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "sns:Subscribe", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRole", "oam:ListSinks", "rum:*", "synthetics:*", "xray:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucket", "s3:PutBucketPolicy", "s3:PutBucketTagging", "s3:PutBucketPublicAccessBlock", "s3:PutBucketLogging", "s3:DeleteBucketPolicy", "s3:PutObject", "s3:DeleteObject", "s3:PutEncryptionConfiguration", "s3:AbortMultipartUpload", "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::*", "arn:aws:s3:::*/*" ] }, { "Effect": "Allow", "Action": [ "eks:CreateCluster", "eks:DeleteCluster", "eks:CreateNodegroup", "eks:DeleteNodegroup", "eks:UpdateNodegroupConfig", "eks:UpdateNodegroupVersion", "eks:UpdateClusterConfig", "eks:UpdateClusterVersion", "eks:CreateFargateProfile", "eks:DeleteFargateProfile", "eks:CreateAddon", "eks:DeleteAddon", "eks:UpdateAddon", "eks:CreateAccessEntry", "eks:DeleteAccessEntry", "eks:UpdateAccessEntry", "eks:AssociateAccessPolicy", "eks:AssociateIdentityProviderConfig", "eks:DisassociateIdentityProviderConfig", "eks:TagResource", "eks:UntagResource", "eks:AccessKubernetesApi", "eks:Describe*", "eks:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameter", "ssm:PutParameter", "ssm:DeleteParameter", "ssm:DescribeParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "sagemaker.*.amazonaws.com", "ec2.*.amazonaws.com", "s3.*.amazonaws.com", "eks.*.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration", "lambda:AddPermission", "lambda:RemovePermission", "lambda:PublishLayerVersion", "lambda:DeleteLayerVersion", "lambda:InvokeFunction", "lambda:Get*", "lambda:List*", "lambda:TagResource" ], "Resource": [ "arn:aws:lambda:*:*:function:*", "arn:aws:lambda:*:*:layer:*" ] }, { "Effect": "Allow", "Action": [ "iam:DeleteRole", "iam:DeleteRolePolicy" ], "Resource": [ "arn:aws:iam::*:role/*sagemaker*", "arn:aws:iam::*:role/*eks*", "arn:aws:iam::*:role/*hyperpod*", "arn:aws:iam::*:policy/*sagemaker*", "arn:aws:iam::*:policy/*hyperpod*", "arn:aws:iam::*:role/*LifeCycleScriptStack*", "arn:aws:iam::*:role/*LifeCycleScript*" ] }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:TagRole", "iam:PutRolePolicy", "iam:Get*", "iam:List*", "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::*:role/*", "arn:aws:iam::*:policy/*" ] }, { "Sid": "FullAccessToFSx", "Effect": "Allow", "Action": [ "fsx:AssociateFileGateway", "fsx:AssociateFileSystemAliases", "fsx:CancelDataRepositoryTask", "fsx:CopyBackup", "fsx:CopySnapshotAndUpdateVolume", "fsx:CreateAndAttachS3AccessPoint", "fsx:CreateBackup", "fsx:CreateDataRepositoryAssociation", "fsx:CreateDataRepositoryTask", "fsx:CreateFileCache", "fsx:CreateFileSystem", "fsx:CreateFileSystemFromBackup", "fsx:CreateSnapshot", "fsx:CreateStorageVirtualMachine", "fsx:CreateVolume", "fsx:CreateVolumeFromBackup", "fsx:DetachAndDeleteS3AccessPoint", "fsx:DeleteBackup", "fsx:DeleteDataRepositoryAssociation", "fsx:DeleteFileCache", "fsx:DeleteFileSystem", "fsx:DeleteSnapshot", "fsx:DeleteStorageVirtualMachine", "fsx:DeleteVolume", "fsx:DescribeAssociatedFileGateways", "fsx:DescribeBackups", "fsx:DescribeDataRepositoryAssociations", "fsx:DescribeDataRepositoryTasks", "fsx:DescribeFileCaches", "fsx:DescribeFileSystemAliases", "fsx:DescribeFileSystems", "fsx:DescribeS3AccessPointAttachments", "fsx:DescribeSharedVpcConfiguration", "fsx:DescribeSnapshots", "fsx:DescribeStorageVirtualMachines", "fsx:DescribeVolumes", "fsx:DisassociateFileGateway", "fsx:DisassociateFileSystemAliases", "fsx:ListTagsForResource", "fsx:ManageBackupPrincipalAssociations", "fsx:ReleaseFileSystemNfsV3Locks", "fsx:RestoreVolumeFromSnapshot", "fsx:TagResource", "fsx:UntagResource", "fsx:UpdateDataRepositoryAssociation", "fsx:UpdateFileCache", "fsx:UpdateFileSystem", "fsx:UpdateSharedVpcConfiguration", "fsx:UpdateSnapshot", "fsx:UpdateStorageVirtualMachine", "fsx:UpdateVolume" ], "Resource": "*" } ] }
Utilisateurs IAM pour l’administrateur de cluster
Les administrateurs de clusters (administrateurs) exploitent et configurent des clusters SageMaker HyperPod, en effectuant les tâches dans Opérations du cluster SageMaker HyperPod Slurm. L’exemple de politique suivant inclut l’ensemble minimal d’autorisations permettant aux administrateurs de clusters d’exécuter les API principales de SageMaker HyperPod et de gérer les clusters SageMaker HyperPod au sein de votre compte AWS.
Note
Les utilisateurs IAM dotés de rôles d’administrateur de cluster peuvent utiliser des clés de condition pour fournir un contrôle d’accès précis lors de la gestion des ressources de cluster SageMaker HyperPod spécifiquement pour les actions CreateCluster et UpdateCluster. Pour trouver les clés de condition prises en charge pour ces actions, recherchez CreateCluster ou UpdateCluster dans les actions définies par SageMaker AI.
Pour accorder des autorisations d’accès à la console SageMaker AI, utilisez l’exemple de politique fourni dans Autorisations requises pour utiliser la console Amazon SageMaker AI.
Pour accorder des autorisations d’accès à la console Amazon EC2 Systems Manager, utilisez l’exemple de politique fourni dans Utilisation de la console AWS Systems Manager dans le Guide de l’utilisateur AWS Systems Manager.
Vous pouvez également envisager d’attacher la politique AmazonSageMakerFullAccess au rôle ; toutefois, notez que la politique AmazonSageMakerFullAccess accorde des autorisations à l’ensemble des appels d’API, des fonctionnalités et des ressources SageMaker.
Pour obtenir des conseils sur les utilisateurs IAM en général, consultez Utilisateurs IAM dans le Guide de l’utilisateur Gestion des identités et des accès AWS.
Utilisateurs IAM pour les scientifiques
Les scientifiques se connectent et exécutent des charges de travail ML sur les nœuds des clusters SageMaker HyperPod provisionnés par les administrateurs des clusters. Pour les scientifiques de votre compte AWS, vous devez accorder l’autorisation "ssm:StartSession" d’exécuter la commande SSM start-session. Vous trouverez ci-dessous un exemple de politique pour les utilisateurs IAM.
Rôle IAM pour SageMaker HyperPod
Pour que les clusters SageMaker HyperPod puissent s’exécuter et communiquer avec les ressources AWS nécessaires, vous devez créer un rôle IAM que le cluster HyperPod doit assumer.
Commencez par attacher le rôle géré Politique gérée par AWS : AmazonSageMakerHyperPodServiceRolePolicy. Dans le cadre de cette politique gérée par AWS, les groupes d’instances de cluster SageMaker HyperPod assument le rôle de communiquer avec Amazon CloudWatch, Amazon S3 et l’agent AWS Systems Manager (agent SSM). Cette politique gérée est l’exigence minimale requise pour que les ressources SageMaker HyperPod fonctionnent correctement. Vous devez donc fournir un rôle IAM avec cette politique à tous les groupes d’instances.
Astuce
En fonction de vos préférences en matière de conception du niveau d’autorisations pour plusieurs groupes d’instances, vous pouvez également configurer plusieurs rôles IAM et les attacher à différents groupes d’instances. Lorsque vous configurez l’accès des utilisateurs de votre cluster à des nœuds de cluster SageMaker HyperPod spécifiques, les nœuds assument le rôle avec les autorisations sélectives que vous avez attachées manuellement.
Lorsque vous configurez l’accès des scientifiques à des nœuds de cluster spécifiques via AWS Systems Manager
Une fois que vous avez terminé de créer des rôles IAM, notez leurs noms et leurs ARN. Vous utilisez les rôles lors de la création d’un cluster SageMaker HyperPod, en accordant les autorisations appropriées requises pour que chaque groupe d’instances communique avec les ressources AWS nécessaires.