La divulgation d'identifiants d'accès peut compromettre vos ressources cloud et vos activités commerciales. Sécurisez vos identifiants en choisissant la méthode d'authentification adaptée à chaque scénario de déploiement.
Qu'est-ce qu'un identifiant d'accès ?
Un identifiant d'accès permet de vérifier votre identité lorsque vous utilisez des outils de développement (API, CLI, SDK ou Terraform) pour accéder à Alibaba Cloud.
Paire AccessKey : composée d'un AccessKey ID et d'un AccessKey Secret. Il s'agit d'un identifiant permanent pour les comptes Alibaba Cloud et les utilisateurs RAM. Créer une paire AccessKey.
Jeton STS : un jeton Security Token Service (STS) est un identifiant temporaire délivré à un rôle RAM, avec une période de validité et une étendue d'autorisations personnalisées. Qu'est-ce que STS ?.
Causes courantes de fuite d'identifiants
Les paires AccessKey codées en dur dans le code applicatif sont exposées à toute personne disposant d'un accès en lecture au dépôt et deviennent publiques si le code est poussé vers des communautés open source ou des services d'hébergement de code.
Les paires AccessKey intégrées dans le code côté client peuvent être extraites par décompilation de l'application.
La documentation technique ou les supports partagés contiennent des informations sur les paires AccessKey.
Les exemples de code figurant dans la documentation produit contiennent des informations sur les paires AccessKey.
Les réponses API qui manquent de contrôles d'autorisation appropriés renvoient des informations d'identification d'accès.
Méthodes sécurisées pour utiliser les identifiants d'accès
Réduisez au minimum la durée d'exposition et l'étendue des identifiants. Choisissez une méthode sécurisée en fonction de votre scénario de déploiement.
|
Méthode |
Scénario |
|
Applications déployées dans un cluster ACK. RRSA isole les autorisations au niveau du rôle RAM afin que chaque application assume un rôle unique. |
|
|
Applications déployées sur une instance ECS. L'instance assume un rôle RAM pour accéder à l'OpenAPI d'Alibaba Cloud. |
|
|
Personnel de développement, d'exploitation et de produit ayant besoin d'identifiants pour l'O&M, la gestion ou le débogage. Utilisez le SSO basé sur les rôles pour assumer un rôle RAM et obtenir un jeton STS. |
|
|
Applications déployées dans Function Compute (FC) nécessitant un accès à d'autres ressources cloud. Associez la fonction FC à un rôle RAM pour utiliser un jeton STS au lieu d'identifiants permanents. |
|
|
Scénarios où les solutions précédentes ne s'appliquent pas. Stockez les identifiants dans des variables d'environnement système. |
Utiliser les rôles RAM pour les comptes de service (RRSA)
Prérequis
Cette méthode s'applique aux services cloud compatibles avec RAM.
-
Version du cluster : Kubernetes 1.22 ou ultérieure, sur un cluster géré ACK (Basic ou Pro), un cluster ACK Serverless (Basic ou Pro) ou un cluster ACK Edge (Pro uniquement).
Le SDK Alibaba Cloud V2.0 est utilisé.
Les SDK personnalisés pour les produits de passerelle auto-gérés ne peuvent pas être utilisés.
Fonctionnement

Fonctionnement de RRSA
Sans RRSA, tout pod sur un nœud peut lire les identifiants du rôle d'instance ECS via les métadonnées d'instance et hériter de toutes les autorisations accordées à ce rôle. Pour restreindre les autorisations RAM par application, empêchez les applications de récupérer les identifiants temporaires du rôle d'instance via les métadonnées d'instance ECS ou ECI, ou n'attachez aucune politique d'autorisation RAM au rôle d'instance.
RRSA résout ce problème en liant un rôle RAM à un compte de service Kubernetes. Au démarrage d'un pod, celui-ci reçoit un jeton OIDC limité à son compte de service, appelle l'API AssumeRoleWithOIDC et reçoit un jeton STS limité au rôle pour accéder aux API cloud.
Le flux d'authentification :
Injection de jeton : Lorsqu'un pod démarre, ACK utilise la projection de volume de jeton de compte de service pour monter un fichier de jeton OIDC limité au compte de service du pod.
Assumption de rôle : L'application appelle l'API
AssumeRoleWithOIDCen utilisant ce jeton OIDC.Réception des identifiants STS : STS valide le jeton OIDC auprès du fournisseur OIDC enregistré et renvoie des identifiants limités au rôle RAM.
Accès aux ressources : Le pod utilise les identifiants STS à courte durée de vie pour accéder aux API Alibaba Cloud autorisées.
Les jetons OIDC ont une durée de vie courte. Lisez le jeton depuis le fichier à chaque demande d'authentification — ne le mettez pas en cache. ACK renouvelle automatiquement les jetons avant leur expiration.
Lorsque RRSA est activé, ACK effectue automatiquement les opérations suivantes :
Crée un émetteur OIDC dédié pour le cluster.
Met à jour la configuration
service-account-issuerdu cluster, en fusionnant le nouvel émetteur OIDC avec la valeur existante.Crée un fournisseur d'identité (IdP) OIDC dans votre compte, nommé
ack-rrsa-<cluster_id>, configuré pour le single sign-on (SSO) avec l'émetteur OIDC du cluster.
Procédure
Activer RRSA pour votre cluster ACK.
Utiliser RRSA dans votre cluster ACK.
Exemples de code
Alibaba Cloud SDK V2.0 prend en charge l'authentification par jeton OIDC RRSA. Tout SDK de service cloud construit sur V2.0 et prenant en charge les jetons STS prend également en charge RRSA.
|
Langage |
Version |
Démo |
|
Go |
Alibaba Cloud Credentials for Go 1.2.6 ou ultérieure. Pour plus d'instructions, consultez Méthode 6 : Utiliser OIDCRoleArn. |
|
|
Java |
Alibaba Cloud Credentials for Java 0.2.10 ou ultérieure. Pour plus d'instructions, consultez Méthode 6 : ARN de rôle OIDC. |
|
|
Python 3 |
Alibaba Cloud Credentials for Python 0.3.1 ou ultérieure. Pour plus d'instructions, consultez Gérer les identifiants d'accès. |
|
|
Node.js / TypeScript |
Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 ou ultérieure. Pour plus d'instructions, consultez Méthode 6 : Utiliser OIDCRoleArn. |
Utiliser un rôle RAM d'instance
Prérequis
Cette méthode s'applique aux services cloud compatibles avec RAM.
Le SDK Alibaba Cloud V2.0 est utilisé.
Les SDK personnalisés pour les produits de passerelle auto-gérés ne peuvent pas être utilisés.
Fonctionnement
Vous pouvez attacher un rôle Resource Access Management (RAM) d'instance à une instance Elastic Compute Service (ECS). L'instance ECS peut alors utiliser l'identifiant temporaire Security Token Service (STS) du rôle RAM d'instance pour accéder aux API d'autres services Alibaba Cloud. L'identifiant temporaire STS est mis à jour périodiquement. Cela garantit la sécurité de votre paire AccessKey et met en œuvre un contrôle d'accès et une gestion des autorisations granulaires via RAM.

Flux de travail :
L'application récupère un jeton STS en accédant aux métadonnées d'instance ECS.
L'application utilise le jeton STS pour accéder aux ressources cloud. Qu'est-ce que STS ?.
Procédure
Attribuez un rôle RAM à une instance ECS. Rôles RAM d'instance.
Exemples de code
Alibaba Cloud Credentials simplifie l'utilisation des rôles RAM d'instance. Ces exemples appellent l'opération DescribeRegions d'ECS avec un rôle RAM d'instance.
|
Langage de programmation |
Exemple de code |
|
Go |
|
|
Java |
|
|
Python |
|
|
PHP |
|
|
Node.js |
|
|
.NET |
Assumption de rôle en chaîne inter-comptes
Si votre application sur une instance ECS doit accéder à des ressources dans un autre compte Alibaba Cloud, vous pouvez utiliser l'assumption de rôle en chaîne inter-comptes pour obtenir un accès sans stocker de paire AccessKey.
Fonctionnement
L'instance ECS obtient d'abord des identifiants temporaires pour son propre rôle RAM d'instance à partir des métadonnées d'instance. Elle utilise ensuite ces identifiants pour appeler sts:AssumeRole afin d'assumer un rôle RAM dans le compte de destination et d'obtenir un jeton STS pour ce compte. Ce processus est appelé assumption de rôle en chaîne.
Procédure
Dans le compte de destination, créez un rôle RAM. Définissez
Principal.RAMdans la politique de confiance du rôle sur le nom de ressource Alibaba Cloud (ARN) du rôle RAM d'instance dans le compte source, par exempleacs:ram::<source-account-id>:role/<instance-role-name>. Accordez à ce rôle les autorisations nécessaires à l'application.Sur le rôle RAM d'instance dans le compte source, attachez une politique d'autorisation accordant l'autorisation
sts:AssumeRole. Vous pouvez utiliser la politique systèmeAliyunSTSAssumeRoleAccess.Sur l'instance ECS, utilisez l'outil Alibaba Cloud Credentials pour effectuer l'assumption de rôle en chaîne. L'outil obtient d'abord les identifiants temporaires du rôle RAM d'instance à partir des métadonnées d'instance. Il utilise ensuite ces identifiants pour appeler
sts:AssumeRoleafin d'assumer le rôle RAM dans le compte de destination et d'obtenir un jeton STS inter-comptes.
Jeton STS pour le développement et le débogage
Scénario
Pour le personnel de développement, d'exploitation et de produit ayant besoin d'identifiants pour l'O&M, la gestion ou le débogage, utilisez le SSO basé sur les rôles pour assumer un rôle RAM et obtenir un jeton STS au lieu d'une paire AccessKey permanente.
Procédure
Pour les scénarios mono-compte, nous vous recommandons de configurer le SSO de rôle basé sur SAML au sein du compte cloud et d'attribuer des rôles RAM aux employés en fonction de leurs fonctions. Les employés peuvent ensuite utiliser l'outil saml2alibabacloud en ligne de commande pour obtenir un jeton STS après s'être authentifiés auprès du fournisseur d'identité (IdP).
Pour les scénarios multi-comptes, nous vous recommandons d'utiliser CloudSSO pour configurer le single sign-on pour plusieurs comptes. Après configuration, les employés peuvent utiliser la CLI pour se connecter à CloudSSO et accéder aux ressources Alibaba Cloud.
Utiliser un jeton STS dans Function Compute
Scénario
Au lieu de coder en dur la paire AccessKey d'un utilisateur RAM dans une fonction FC, associez la fonction à un rôle RAM. L'application utilise alors un jeton STS pour accéder aux ressources cloud, évitant ainsi la fuite d'identifiants permanents.
Architecture de la solution
Les rôles de fonction FC gèrent les identifiants temporaires au moment de l'exécution, évitant l'exposition à long terme des paires AccessKey. Configurez le rôle et les autorisations une seule fois ; les fonctions obtiennent automatiquement des identifiants temporaires.
Un administrateur crée un rôle approuvé par Function Compute et lui accorde les autorisations requises (1), puis associe le rôle à la fonction FC (2). L'application récupère un jeton STS à partir du contexte de la fonction (3). Durant ce processus, Function Compute appelle AssumeRole pour obtenir le jeton STS auprès de RAM/STS (i). L'application utilise le jeton STS pour appeler l'API de la ressource cloud cible (4), et l'API de la ressource renvoie le résultat à l'application cliente.

Procédure
Accorder à Function Compute des autorisations pour accéder à d'autres services Alibaba Cloud.
Configurer des variables d'environnement système
Procédure
Configurez les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET.
<ACCESS_KEY_ID>
Exemples de code du SDK Alibaba Cloud
Les SDK Alibaba Cloud créent un identifiant par défaut à partir des variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET et l'utilisent pour authentifier automatiquement les requêtes. Ces exemples appellent l'opération DescribeRegions d'ECS.
|
Langage de programmation |
Exemple de code |
|
Go |
|
|
Java |
|
|
Python |
|
|
PHP |
|
|
Node.js |
|
|
.NET |
Exemple de code générique
Si vous ne pouvez pas utiliser les SDK Alibaba Cloud (par exemple, des SDK personnalisés pour des produits de passerelle auto-gérés), chargez directement les variables d'environnement. Exemple en Java :
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;
public class DemoTest {
public static void main(String[] args) throws Exception{
Config config = new Config();
// Specify the type of credential you want to use.
config.setType("access_key");
// The AccessKeyId of your RAM user.
config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// The AccessKeySecret of your RAM user.
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Client client = new Client(config);
}
}
Remédier aux fuites d'identifiants
Fuite de paire AccessKey : Remédier à une paire AccessKey compromise.
Fuite de jeton STS : Que faire en cas de fuite d'un jeton STS ?.
Références
Bonnes pratiques connexes en matière de sécurité cloud :