L'association d'un rôle RAM à une instance DSW permet à cette dernière d'utiliser les identifiants STS temporaires du rôle pour accéder à d'autres ressources cloud. Cette approche élimine la nécessité de configurer des AccessKeys à long terme et réduit les risques de fuite d'identifiants.
Qu'est-ce qu'un rôle RAM d'instance
Un rôle RAM d'instance fournit une identité temporaire basée sur les rôles pour une instance DSW. Lorsqu'un rôle RAM est attribué à une instance DSW :
Les processus exécutés au sein de l'instance obtiennent automatiquement des identifiants STS à court terme depuis le service de métadonnées local ou un fichier d'identifiants.
Ces identifiants accordent les autorisations définies par la stratégie de permissions associée, permettant un accès sécurisé aux services cloud autorisés tels que OSS, MaxCompute et PAI-DLC.
Cette méthode évite totalement le stockage d'une AccessKey en texte clair dans votre code ou vos fichiers de configuration, vous aidant ainsi à respecter les exigences de sécurité et de conformité.
Les principaux avantages sont les suivants :
Sécurité : utilise des identifiants STS à court terme actualisés automatiquement plutôt que des AccessKeys à long terme, éliminant ainsi les risques liés aux clés codées en dur et aux fuites d'identifiants.
Gestion simplifiée : centralise la gestion des autorisations via les stratégies de rôle RAM. Les modifications de stratégie prennent effet immédiatement sans nécessiter le redémarrage des instances ni la mise à jour du code.
Confiance native : les identifiants sont émis par le Security Token Service (STS) d'Alibaba Cloud, ce qui les rend fiables par défaut sans nécessiter de middleware d'authentification supplémentaire.
Limites
Vous ne pouvez associer qu'un seul rôle RAM à une instance DSW à la fois.
Procédure
Étape 1 : Configurer un rôle RAM
Sur la page de configuration de l'instance DSW, choisissez l'une des trois options de rôle suivantes :
Rôle par défaut de PAI
Platform for AI (PAI) fournit un rôle par défaut. Après avoir attribué ce rôle à une instance, celle-ci obtient automatiquement l'accès aux ressources suivantes sans qu'il soit nécessaire de configurer une AccessKey :
Soumettre des tâches aux projets MaxCompute où le propriétaire de l'instance dispose d'autorisations d'exécution, en utilisant le SDK ODPS.
Accéder aux données du bucket configuré comme chemin de stockage par défaut pour l'espace de travail actuel, en utilisant le SDK OSS.
Utiliser le service Tongyi Lingma dans WebIDE.
Créer et soumettre des tâches d'entraînement à l'espace de travail actuel en utilisant le SDK PAI ou PAI-DLC.
Rôle personnalisé
-
Connectez-vous à la console RAM et créez un rôle RAM. Pour des instructions détaillées, consultez la rubrique Créer un rôle RAM pour un service Alibaba Cloud de confiance.
Configurez les paramètres clés comme suit :
Type d'entité de confiance : Service Alibaba Cloud
Nom de l'entité de confiance : Platform for AI (pai.aliyun.cs.com)
-
Accordez des autorisations au rôle RAM.
Cliquez sur Add Authorization et attachez une stratégie d'autorisation système ou personnalisée au rôle RAM. Cela accorde au rôle les autorisations nécessaires pour accéder aux ressources requises ou les gérer. Par exemple, ajoutez la stratégie AliyunOSSFullAccess. Pour plus d'informations, consultez l'étape Étape 3 : Accorder des autorisations à un rôle RAM.
RemarqueSi vous utilisez un utilisateur RAM pour gérer l'instance DSW, demandez à l'administrateur de votre compte principal de créer et d'attacher la stratégie d'autorisation suivante à votre utilisateur RAM. Cette stratégie permet à votre utilisateur RAM d'utiliser le rôle RAM de l'instance.
Le code suivant présente la stratégie d'autorisation requise. Remplacez
${RoleName}par le nom du rôle RAM de l'instance DSW.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
Aucun rôle associé
Si votre instance est visible publiquement au sein de l'espace de travail, nous vous recommandons de ne pas lui associer de rôle RAM afin d'éviter toute exposition des autorisations. Lors de la création d'une instance ou de la modification de sa configuration, dans la section Advanced Information, définissez Instance RAM Role sur Does Not Associate Role.
Mettre à jour la configuration du rôle RAM
-
Accédez à la page DSW.
Connectez-vous à la console PAI et sélectionnez votre région et votre espace de travail cibles.
Dans le volet de navigation de gauche, choisissez Model Training > Data Science Workshop (DSW) pour accéder à la page DSW.
Cliquez sur Change Settings à droite de l'instance DSW.
-
Dans la section Roles and Permissions, configurez le rôle RAM de l'instance.
ImportantSi vous changez le rôle RAM d'une instance en cours d'exécution, en passant de Default Roles of PAI ou Custom Roles à Does Not Associate Role, ou inversement de Does Not Associate Role à Default Roles of PAI ou Custom Roles, l'instance redémarre immédiatement. Assurez-vous d'avoir enregistré votre travail sur l'instance.
Une fois la configuration terminée, cliquez sur OK.
Étape 2 : Obtenir des identifiants temporaires
Après avoir associé un rôle RAM à une instance, vous pouvez obtenir et utiliser ses identifiants temporaires de plusieurs manières pour accéder aux services cloud.
Outil Credentials
Nous vous recommandons d'utiliser l'outil Credentials fourni par les SDK Alibaba Cloud. Il gère automatiquement l'obtention et l'actualisation des identifiants, ce qui constitue la meilleure pratique pour accéder aux services cloud.
-
Installez la dépendance (exemple Python) :
pip install alibabacloud_credentials -
Exemple d'utilisation :
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' # Optional. If you have not configured other access methods in the default credential chain, you do not need to explicitly specify the type. The Credentials SDK obtains temporary credentials by using the URI method. ) credentialsClient = CredClient(credentialsConfig)
Pour plus d'exemples de SDK dans d'autres langages, consultez la rubrique Meilleures pratiques pour l'utilisation des identifiants afin d'accéder à l'OpenAPI Alibaba Cloud.
Service local
Dans l'instance DSW, exécutez la commande suivante dans le terminal pour obtenir les identifiants depuis le service injecté localement.
# Obtain temporary access credentials for the instance RAM role
curl $ALIBABA_CLOUD_CREDENTIALS_URI
Voici un exemple de réponse :
SecurityToken : le jeton temporaire pour le rôle RAM de l'instance.
Expiration : l'heure d'expiration des identifiants d'accès temporaires.
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}
Fichier local
Dans une instance DSW, PAI injecte automatiquement et actualise périodiquement un fichier contenant les identifiants temporaires pour le rôle RAM de l'instance. Vous pouvez obtenir ces identifiants en lisant le fichier situé dans le chemin /mnt/.alibabacloud/credentials. Le contenu du fichier est le suivant :
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}
Étape 3 : Accéder à d'autres services cloud
Accéder à OSS
-
Exécutez les commandes suivantes pour installer l'outil Credentials et le SDK OSS :
# Install the credentials tool pip install alibabacloud_credentials # Install the OSS SDK pip install oss2 -
Utilisez les identifiants temporaires du rôle RAM de l'instance pour accéder à OSS et répertorier 10 objets dans un bucket spécifié. Pour les endpoints de région OSS, consultez la rubrique Régions et endpoints.
import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials import providers from itertools import islice auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider()) bucket = oss2.Bucket(auth, '<oss_endpoint>',# Replace with the endpoint of the region where your OSS bucket is located. '<oss_bucket>'# Replace with your OSS bucket name. ) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key)
Accéder à MaxCompute
-
Exécutez les commandes suivantes pour installer l'outil Credentials et le SDK ODPS :
# Install the credentials tool pip install alibabacloud_credentials # Install the ODPS SDK pip install odps -
Utilisez les identifiants temporaires du rôle RAM de l'instance pour accéder à MaxCompute et récupérer la liste des tables dans un projet spécifié. Pour les endpoints de région MaxCompute, consultez la rubrique Endpoints.
from alibabacloud_credentials import providers from odps.accounts import CredentialProviderAccount from odps import ODPS if __name__ == '__main__': account = CredentialProviderAccount(providers.DefaultCredentialsProvider()) o = ODPS( account=account, project="<odps_project>", # Replace with your project name. endpoint="<odps_endpoint>"# Replace with the endpoint of the region where your project is located. ) for t in o.list_tables(): print(t)
Accéder à PAI-DLC
-
Exécutez les commandes suivantes pour installer l'outil Credentials, le SDK OpenAPI et le SDK PAI-DLC :
# Install the credentials tool pip install alibabacloud_credentials # Install the Alibaba Cloud OpenAPI SDK pip install alibabacloud-tea-util alibabacloud_tea_openapi # Install the PAI-DLC SDK pip install alibabacloud_pai_dlc20201203 -
Utilisez les identifiants temporaires du rôle RAM de l'instance pour accéder à PAI-DLC et répertorier les tâches PAI-DLC dans un espace de travail spécifié.
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.client import Client as pai_dlc20201203Client from alibabacloud_pai_dlc20201203 import models as pai_dlc_20201203_models from alibabacloud_tea_util.models import RuntimeOptions # Use the Credentials tool to initialize the PAI-DLC client. credentialsClient = CredClient() config = Config(credential=credentialsClient) config.endpoint = '<dlc_endpoint>' # Replace with the endpoint of your region. client = pai_dlc20201203Client(config) # Initialize the request and call the ListJobs API. list_jobs_request = pai_dlc_20201203_models.ListJobsRequest() list_jobs_request.workspace_id = '<workspace_id>' # Replace with your workspace ID. runtime_options = RuntimeOptions() headers = {} resp = client.list_jobs_with_options(list_jobs_request, headers, runtime_options) jobs = resp.to_map()['body']['Jobs'] print(jobs[0])
FAQ
Résoudre l'erreur PassRoleFailedError
Connectez-vous à la console RAM pour vérifier que le rôle existe.
Si le rôle n'existe pas, modifiez le rôle RAM de l'instance pour utiliser un rôle existant.
-
Si le rôle existe, demandez à l'administrateur de votre compte principal d'accorder à votre utilisateur RAM l'autorisation d'utiliser ce rôle. La stratégie d'autorisation requise est la suivante (remplacez ${RoleName} par le nom du rôle RAM) :
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
Résoudre l'erreur AssumeRoleFailedError
Cette erreur survient généralement parce que la stratégie de confiance de votre rôle est configurée incorrectement. Suivez ces étapes pour résoudre le problème :
Connectez-vous à la console RAM en tant qu'administrateur RAM.
Dans le volet de navigation de gauche, choisissez Identity Management > Roles.
Sur la page Roles, cliquez sur le nom du rôle RAM cible.
Dans l'onglet Trust Policy, cliquez sur Edit Trust Policy.
-
Modifiez la stratégie de confiance pour ajouter
pai.aliyuncs.comau principalService, puis cliquez sur OK.Par exemple, si la stratégie de confiance d'origine est :
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com" ] } } ], "Version": "1" }Mettez à jour la stratégie pour inclure
pai.aliyuncs.com:{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com", "pai.aliyuncs.com" ] } } ], "Version": "1" }