Tous les produits
Search
Centre de documentation

Platform For AI:Configurer le rôle RAM EAS

Dernière mise à jour :Aug 25, 2026

Associez un rôle RAM à votre service EAS afin que le code exécuté au sein du service puisse appeler d'autres API Alibaba Cloud sans stocker de clés AccessKey à long terme. Lors de l'exécution, l'instance de service récupère automatiquement des identifiants STS temporaires et les actualise avant leur expiration.

Avantages

L'utilisation d'un rôle RAM plutôt que de clés AccessKey codées en dur vous offre deux avantages majeurs :

  • Sécurité : Les identifiants sont éphémères et ne sont jamais stockés dans l'image ou la configuration de votre service. Aucune clé à long terme ne risque d'être divulguée.

  • Contrôle granulaire : Mettez à jour la politique d'autorisation du rôle RAM à tout moment pour modifier les ressources accessibles par le service, sans avoir besoin de redéployer.

Limites

Chaque service EAS ne peut être associé qu'à un seul rôle RAM.

Choisir un type de rôle

Default Roles of PAI Custom Roles
Description Le rôle de service intégré AliyunServiceRoleForPaiEas, disponible automatiquement Un rôle RAM que vous créez et configurez
Autorisations MaxCompute et OSS uniquement Tout service Alibaba Cloud que vous autorisez
Cas d'utilisation Accès au bucket OSS par défaut de l'espace de travail ou aux projets MaxCompute pour lesquels le propriétaire du service dispose d'autorisations d'exécution Tout autre scénario, ou lorsque vous avez besoin d'un contrôle plus fin des autorisations
Effort de configuration Ajoutez un champ JSON à la configuration du service Créez un rôle, accordez des politiques, puis ajoutez l'ARN du rôle à la configuration du service

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un service EAS dans PAI, ou un déploiement prêt à être configuré

  • (Pour les rôles personnalisés) Un accès à la console RAM pour créer et gérer des rôles

  • (Pour les utilisateurs RAM) Contactez le compte principal pour accorder l'autorisation ram:PassRole — consultez la section Accorder l'autorisation PassRole à un utilisateur RAM

Associer le rôle par défaut PAI

Ajoutez le champ suivant au JSON dans la section Service Configuration lors du déploiement :

"options": {
  "enable_ram_role": true
}

Une fois cette option activée, l'instance de service peut accéder :

  • Aux données des projets MaxCompute pour lesquels le propriétaire du service EAS dispose d'autorisations d'exécution, via le SDK PyODPS

  • Aux données du bucket OSS par défaut prédéfini dans l'espace de travail actuel, via le SDK OSS

Si vous effectuez un déploiement via un JSON direct et souhaitez utiliser le SDK OSS via le rôle par défaut PAI, incluez le champ metadata.workspace_id dans la configuration du service.

Associer un rôle RAM personnalisé

Étape 1 : Créer un rôle RAM

  1. Connectez-vous à la console RAM et créez un rôle RAM.

  2. Définissez les paramètres suivants :

    Paramètre Valeur
    Principal Type Cloud Service
    Principal Name Platform for AI/PAI (eas.pai.aliyuncs.com)
  3. Dans l'onglet Trust Policy du nouveau rôle, vérifiez que eas.pai.aliyuncs.com apparaît dans le tableau principal Service. Cette politique de confiance détermine quels services peuvent assumer le rôle. Une politique de confiance correctement configurée se présente comme suit :

    Important

    L'absence de cette entrée est la cause la plus fréquente de l'erreur de déploiement failed to assume role. Si le rôle a été créé avec un principal différent (par exemple, un autre service), cliquez sur Edit Trust Policy et ajoutez "eas.pai.aliyuncs.com" au tableau Service.

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "eas.pai.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }

Étape 2 : Accorder des autorisations au rôle

Joignez des politiques système ou personnalisées pour permettre au rôle d'accéder aux ressources requises par votre service. Par exemple, joignez la politique AliyunOSSReadOnlyAccess pour autoriser l'accès en lecture à OSS.

Important

Si le service monte des sources de données (NAS ou OSS) ou extrait des images personnalisées lors du déploiement, accordez au rôle les autorisations correspondantes :

Étape 3 : Associer le rôle lors du déploiement

Ajoutez les éléments suivants au JSON dans la section Service Configuration . Remplacez role_arn par l'ARN du rôle que vous avez créé. Pour trouver l'ARN, consultez la section Afficher le rôle RAM.

"options": {
  "enable_ram_role": true
},
"role_arn": "acs:ram::111*************:role/${RoleName}"

Accorder l'autorisation PassRole à un utilisateur RAM

Si vous déployez des services EAS en tant qu'utilisateur RAM (sous-compte), le compte principal doit vous accorder l'autorisation ram:PassRole . Sans celle-ci, le déploiement échoue avec une erreur de configuration de rôle.

Demandez au compte principal de joindre la politique personnalisée suivante à votre utilisateur RAM. Remplacez ${RoleName} par le nom du rôle RAM associé au service EAS. Pour obtenir de l'aide, consultez les sections Créer une politique d'autorisation personnalisée et Accorder des autorisations à un utilisateur RAM.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "acs:ram::*:role/${RoleName}"
    }
  ]
}

Obtenir des identifiants d'accès temporaires

Après avoir associé un rôle, l'instance de service peut récupérer des identifiants temporaires STS de trois manières. Ces trois méthodes renvoient les mêmes champs d'identifiants.

Méthode 1 : Outil Credentials

L'outil Credentials lit les identifiants depuis un endpoint local injecté automatiquement dans l'instance de service. Les identifiants sont mis à jour périodiquement ; votre code n'a pas besoin de gérer leur rotation.

Lors du déploiement, installez alibabacloud_credentials dans la section Third-party Library Configuration (ignorez cette étape si elle est déjà présente dans votre image).

Utilisez ensuite le code suivant pour initialiser un client authentifié :

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig

credentials_config = CredConfig(type='credentials_uri')
credentials_client = CredClient(credentials_config)

Pour des exemples dans d'autres langages, consultez la section Bonnes pratiques pour l'accès aux API OpenAPI Alibaba Cloud à l'aide d'identifiants d'accès.

Méthode 2 : Appeler l'endpoint local des identifiants

Au sein de l'instance de service, appelez le serveur local injecté automatiquement pour obtenir les identifiants actuels :

# Retrieve temporary credentials for the instance RAM role
curl $ALIBABA_CLOUD_CREDENTIALS_URI

Exemple de réponse :

{
  "Code": "Success",
  "AccessKeyId": "STS.N*********7",
  "AccessKeySecret": "3***************d",
  "SecurityToken": "DFE32G*******",
  "Expiration": "2024-05-21T10:39:29Z"
}
Champ Description
SecurityToken Le jeton temporaire pour le rôle RAM
Expiration Date d'expiration des identifiants (UTC)

Méthode 3 : Lire le fichier d'identifiants

PAI-EAS écrit automatiquement les identifiants dans /etc/ram/credentials au sein de l'instance de service et actualise périodiquement le fichier. Lisez ce fichier directement lorsqu'un appel HTTP local n'est pas pratique :

{
  "Code": "Success",
  "AccessKeyId": "STS.N*********7",
  "AccessKeySecret": "3***************d",
  "SecurityToken": "DFE32G*******",
  "Expiration": "2024-05-21T10:39:29Z"
}

Exemples

Les exemples suivants montrent comment accéder à OSS et MaxCompute depuis un service EAS en utilisant le rôle RAM. Les deux exemples utilisent providers.DefaultCredentialsProvider(), qui récupère automatiquement les identifiants depuis l'endpoint local injecté.

Les exemples utilisent la page Custom Deployment dans la console PAI. Pour une description complète des paramètres, consultez la section Description des paramètres de déploiement personnalisé via la console.

Fonctionnement des exemples : Montez un script Python sur l'instance de service via Model Configuration , puis définissez la commande d'exécution pour l'exécuter. Cela évite de construire une image personnalisée.

Exemple 1 : Accéder aux données OSS

import oss2
from alibabacloud_credentials.client import Client
from alibabacloud_credentials import providers
from itertools import islice

if __name__ == '__main__':
    auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider())
    bucket = oss2.Bucket(
        auth,
        '<oss_endpoint>',   # Internal endpoint, e.g. oss-cn-hangzhou-internal.aliyuncs.com
        '<oss_bucket>'      # Must be the default OSS bucket for the current workspace
    )

    for b in islice(oss2.ObjectIterator(bucket), 10):
        print(b.key)

Remplacez les espaces réservés :

Espace réservé Description
<oss_bucket> Nom de votre bucket OSS. Doit correspondre au bucket OSS par défaut prédéfini dans l'espace de travail actuel.
<oss_endpoint> L'endpoint de la région de votre bucket. EAS ne se connecte pas à Internet public par défaut, utilisez donc l'endpoint interne (par exemple, oss-cn-hangzhou-internal.aliyuncs.com). Pour utiliser un endpoint public, configurez un VPC avec accès Internet pour EAS. Consultez la section Configuration réseau.

Exemple 2 : Accéder à MaxCompute (PyODPS)

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>',    # Your MaxCompute project name
        endpoint='<odps_endpoint>'   # Internal endpoint, e.g. https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api
    )

    for t in o.list_tables():
        print(t)

Remplacez les espaces réservés :

Espace réservé Description
<odps_project> Nom de votre projet MaxCompute. Retrouvez-le dans la console MaxCompute sous Workspace > Project Management . Si vous déployez en tant qu'utilisateur RAM, assurez-vous que l'utilisateur dispose des autorisations d'opération pour le projet. Consultez la section Autoriser d'autres utilisateurs.
<odps_endpoint> L'endpoint de la région de votre projet. EAS ne se connecte pas à Internet public par défaut, utilisez donc l'endpoint interne (par exemple, https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api). Pour utiliser un endpoint public, configurez un VPC avec accès Internet pour EAS. Consultez la section Configuration réseau.

Déployer les exemples

Sur la page Déploiement personnalisé , configurez les paramètres suivants :

Paramètre Valeur
Run Command (sous Environment Information) python /mnt/data/xx.py
Model Configuration Montez le répertoire contenant votre script et définissez le chemin de montage sur /mnt/data/
Third-party Library List (sous Third-party Library Configuration) alibabacloud_credentials , pyodps , oss2 — ignorez si préinstallé dans votre image
Service Configuration Ajoutez "options": { "enable_ram_role": true } au JSON

Après avoir cliqué sur Deploy , affichez la sortie dans les journaux du service une fois celui-ci en cours d'exécution.

Dépannage

Rôle introuvable

Symptôme : Vous rencontrez une erreur Permission Denied avec le code d'erreur Forbidden.PrivilegeDenied . L'action d'autorisation est ram:PassRole , et le résultat de la vérification des autorisations indique des permissions insuffisantes.

Vérifiez dans la console RAM si le rôle existe.

  • Le rôle n'existe pas : Mettez à jour la configuration du service pour référencer un nom de rôle existant.

  • Le rôle existe mais l'erreur persiste : L'utilisateur RAM qui déploie le service ne dispose pas de l'autorisation ram:PassRole . Demandez au compte principal de joindre la politique suivante (remplacez ${RoleName} par le nom du rôle). Consultez la section Accorder des autorisations à un utilisateur RAM.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "acs:ram::*:role/${RoleName}"
        }
      ]
    }

Échec de l'assumption du rôle

Symptôme : L'onglet Deployment Events de la page Elastic Algorithm Service affiche :

unable to render, error: failed to assume role for user, reason: You are not authorized to do this action. You should be authorized by RAM.

La politique de confiance du rôle RAM n'inclut pas eas.pai.aliyuncs.com en tant que principal de confiance. Pour résoudre ce problème :

  1. Connectez-vous à la console RAM en tant qu'administrateur RAM.

  2. Dans le volet de navigation de gauche, choisissez Identities > Roles .

  3. Cliquez sur le nom du rôle RAM cible.

  4. Dans l'onglet Trust Policy , cliquez sur Edit Trust Policy .

  5. Dans le tableau Service , ajoutez "eas.pai.aliyuncs.com" et cliquez sur OK .

Avant :

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "RAM": ["acs:ram::aaa:root"],
        "Service": ["xxx.aliyuncs.com"]
      }
    }
  ],
  "Version": "1"
}

Après :

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "RAM": ["acs:ram::aaa:root"],
        "Service": [
          "xxx.aliyuncs.com",
          "eas.pai.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}