RAM Roles for Service Accounts (RRSA) permet d'isoler les permissions OpenAPI au niveau des pods au sein de votre cluster. Cette fonctionnalité offre un contrôle granulaire sur l'accès aux ressources cloud et réduit les risques de sécurité. Cette rubrique explique comment utiliser la fonctionnalité RRSA.
Contexte
OIDC (OpenID Connect) est un protocole d'authentification basé sur OAuth 2.0. Alibaba Cloud RAM prend en charge le SSO de rôle basé sur OIDC. Les applications d'un cluster Kubernetes utilisent des identifiants temporaires fournis par Security Token Service (STS) pour accéder aux API des ressources cloud. Alibaba Cloud Container Service (ACS) prend en charge RRSA. Dans les scénarios multi-locataires, RRSA assure une isolation fine des permissions d'accès aux ressources cloud entre les pods d'applications d'un même cluster. Avec ACS, RRSA permet également de contrôler la durée de validité des identifiants temporaires.
RRSA fonctionne comme suit :
-
Déployez un pod d'application utilisant la fonctionnalité de projection de volume de jeton de compte de service.
RemarqueLa projection de volume de jeton de compte de service est activée par défaut dans les clusters ACS.
Le cluster crée et monte le fichier de jeton OIDC du compte de service correspondant pour le pod d'application.
-
L'application du pod utilise le fichier de jeton OIDC monté pour appeler l'API STS
AssumeRoleWithOIDCafin d'obtenir un identifiant temporaire pour un rôle RAM spécifié.RemarqueVous devez modifier au préalable la politique de confiance du rôle RAM pour autoriser le compte de service du pod à endosser ce rôle. Pour plus d'informations, consultez AssumeRoleWithOIDC.
L'application du pod utilise l'identifiant temporaire obtenu pour accéder aux API des ressources cloud.
Activer RRSA
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Cluster Information.
Sur la page de détails du cluster, cliquez sur l'onglet Basic Information. Dans la section Security and Auditing, cliquez sur Enable en regard de RRSA OIDC.
-
Dans la boîte de dialogue Enable RRSA, cliquez sur OK.
RemarqueL'activation de la fonctionnalité RRSA prend environ 2 à 3 minutes. Si le Cluster Status reste à l'état Updating, cliquez sur le bouton

situé dans le coin supérieur droit de la page pour actualiser l'affichage.Lorsque l'état du cluster passe de Updating à Running, la fonctionnalité RRSA est activée pour le cluster. Passez la souris sur Enabled en regard de RRSA OIDC pour afficher l'URL et l'ARN du fournisseur d'identité OIDC.
Une fois la fonctionnalité RRSA activée pour un cluster, la console ACS effectue les opérations suivantes en arrière-plan :
Elle crée automatiquement un service OIDC Issuer dédié pour le cluster. Ce service est géré par ACS et ne nécessite aucune maintenance manuelle.
Elle crée un fournisseur d'identité OIDC dans votre compte, utilisant cet OIDC Issuer. Le fournisseur d'identité OIDC est nommé
ack-rrsa-<cluster_id>, où<cluster_id>correspond à l'ID de votre cluster.
Utiliser RRSA
Après avoir activé la fonctionnalité RRSA, suivez ces étapes pour permettre aux applications de votre cluster d'obtenir des identifiants temporaires afin d'accéder aux API des ressources cloud via RRSA.
Créer et autoriser un nouveau rôle RAM
Pour utiliser un rôle RAM existant au lieu d'en créer un nouveau, vous pouvez ajouter les permissions requises au rôle RAM existant.
L'application déployée dans cet exemple utilise la fonctionnalité RRSA pour endosser un rôle spécifié et récupérer la liste des clusters du compte actuel. Les principales ressources utilisées sont les suivantes :
Namespace :
rrsa-demo.Compte de service :
demo-sa.Rôle RAM :
demo-role-for-rrsa.
-
Créez un rôle RAM nommé
demo-role-for-rrsa.Connectez-vous à la console RAM avec votre compte Alibaba Cloud.
Dans le volet de navigation de gauche, choisissez . Sur la page Roles, cliquez sur Create Role.
Dans le panneau Create Role, cliquez sur Switch to Policy Editor pour créer un rôle.
-
Dans l'onglet Visual Editor, configurez les informations du rôle comme décrit dans le tableau suivant, puis cliquez sur OK.
Paramètre
Description
Effect
La valeur par défaut est Allow.
Principal
Sélectionnez Identity Provider et cliquez sur Edit.
Définissez le type de fournisseur d'identité sur OIDC et sélectionnez le fournisseur d'identité OIDC du cluster, par exemple
ack-rrsa-<cluster_id>.<cluster_id>correspond à l'ID de votre cluster.Action
Par défaut, sts:AssumeRole est sélectionné.
Condition
-
oidc:iss : cette condition est ajoutée automatiquement après la sélection du Identity Provider. Conservez le paramètre par défaut.
-
oidc:aud : cette condition est ajoutée automatiquement après la sélection du Identity Provider. Conservez le paramètre par défaut.
-
oidc:sub : vous devez ajouter manuellement cette condition en cliquant sur Add Condition.
-
Key :
oidc:sub -
Operator :
StringEquals -
Value : le format est
system:serviceaccount:<namespace>:<serviceAccountName>.-
<namespace>: le namespace où réside l'application. -
<serviceAccountName>: le nom du compte de service.
Selon les informations de l'application de test, saisissez
system:serviceaccount:rrsa-demo:demo-sa. -
-
-
Dans la boîte de dialogue qui s'affiche, saisissez le nom du rôle
demo-role-for-rrsaet cliquez sur OK.
Accordez au rôle créé la politique système AliyunCSReadOnlyAccess, requise par l'application de test. Pour plus d'informations, consultez Gérer les permissions d'un rôle RAM.
-
Déployez l'application de test.
-
Créez un fichier nommé
demo.yamlavec le contenu suivant.RemarqueRemplacez les espaces réservés suivants dans le modèle d'application d'exemple.
<role_arn>: remplacez cette valeur par l'ARN du rôle RAM utilisé par l'application. Vous pouvez obtenir l'ARN dans le champ ARN de la page Basic Information du rôle sur la console RAM.<oidc_provider_arn>: remplacez cette valeur par l'ARN du fournisseur OIDC du cluster. Vous pouvez obtenir cet ARN en passant la souris sur Enabled en regard de RRSA OIDC dans l'onglet Basic Information de la page Cluster Information.
-
Exécutez la commande suivante pour déployer l'application de test.
kubectl apply -f demo.yamlUne fois l'application déployée, l'application peut utiliser le jeton OIDC monté, l'ARN du rôle RAM et l'ARN du fournisseur d'identité OIDC pour appeler l'API
AssumeRoleWithOIDCde STS afin d'obtenir un identifiant temporaire pour le rôle RAM spécifié. L'application utilise ensuite cet identifiant temporaire pour accéder aux API des ressources cloud. Pour plus d'informations, consultez AssumeRoleWithOIDC.
-
-
Exécutez la commande suivante pour consulter les journaux de l'application de test.
kubectl -n rrsa-demo logs demoLe résultat attendu est une liste de clusters ACK :
20**/**/** 08:35:23 ======= [begin] list ACK clusters with RRSA ======= clusters: cluster id: cf***, cluster name: foo* cluster id: c8***, cluster name: bar* cluster id: c4***, cluster name: foob* 20**/**/** 08:35:24 ======= [end] list ACK clusters with RRSA ======= -
Facultatif : Détachez la politique système AliyunCSReadOnlyAccess du rôle. Pour plus d'informations, consultez Supprimer les permissions d'un rôle RAM.
Patientez environ 30 secondes, puis exécutez la commande suivante pour consulter à nouveau les journaux de l'application :
kubectl -n rrsa-demo logs demoUne erreur de refus d'autorisation est attendue :
20**/**/** 10:09:33 ======= [begin] list ACK clusters with RRSA ======= 20**/**/** 10:09:33 SDKError: StatusCode: 403 Code: StatusForbidden Message: code: 403, STSToken policy Forbidden for action cs:DescribeClusters request id: XXXX Data: {"accessDeniedDetail":{"AuthAction":"cs:DescribeClusters","AuthPrincipalDisplayName":"demo-role-for-rrsa:ack-ram-tool","AuthPrincipalOwnerId":"XXXX","AuthPrincipalType":"AssumedRoleUser","EncodedDiagnosticMessage":"XXXX","NoPermissionType":"ImplicitDeny","PolicyType":"ResourceGroupLevelIdentityBasedPolicy"},"code":"StatusForbidden","message":"STSToken policy Forbidden for action cs:DescribeClusters","requestId":"XXXX","status":403,"statusCode":403}
Autoriser un rôle RAM existant
Si votre application doit utiliser un rôle RAM existant plutôt qu'un nouveau, modifiez la politique de confiance du rôle RAM en ajoutant une instruction permettant aux applications utilisant un compte de service spécifique d'endosser ce rôle et d'obtenir des identifiants temporaires. Pour plus d'informations, consultez Modifier la politique de confiance d'un rôle RAM.
Le code suivant montre un exemple d'entrée Statement à ajouter à la politique de confiance du rôle RAM.
Remplacez les espaces réservés suivants dans l'exemple d'entrée Statement.
<oidc_issuer_url>: remplacez cette valeur par l'URL du fournisseur OIDC du cluster. Vous pouvez obtenir l'URL en passant la souris sur Enabled en regard de RRSA OIDC dans l'onglet Basic Information de la page Cluster Information.<oidc_provider_arn>: remplacez cette valeur par l'ARN du fournisseur OIDC du cluster. Vous pouvez obtenir l'ARN en passant la souris sur Enabled en regard de RRSA OIDC dans l'onglet Basic Information de la page Cluster Information.<namespace>: remplacez cette valeur par le namespace où réside l'application.<service_account>: remplacez cette valeur par le compte de service utilisé par l'application.
{
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"oidc:aud": "sts.aliyuncs.com",
"oidc:iss": "<oidc_issuer_url>",
"oidc:sub": "system:serviceaccount:<namespace>:<service_account>"
}
},
"Effect": "Allow",
"Principal": {
"Federated": [
"<oidc_provider_arn>"
]
}
}
Références
-
Certains SDK officiels d'Alibaba Cloud intègrent une prise en charge native de l'authentification via les jetons OIDC RRSA. Le tableau ci-dessous indique les versions de SDK compatibles avec cette fonctionnalité et fournit des liens vers des exemples de code.
Langage
Version du SDK
Exemple de code
Go
Alibaba Cloud Credentials for Go 1.2.6 et versions ultérieures
Java
Alibaba Cloud Credentials for Java 0.2.10 et versions ultérieures
Python 3
Alibaba Cloud Credentials for Python 0.3.1 et versions ultérieures
Node.js et TypeScript
Alibaba Cloud Credentials for TypeScript/Node.js 2.2.6 et versions ultérieures
Lors de l'exécution d'un SSO basé sur les rôles OIDC, appelez l'API AssumeRoleWithOIDC pour obtenir un identifiant temporaire permettant d'endosser un rôle RAM.