Autorisation des pods de votre cluster à accéder aux services IBM Cloud avec des profils sécurisés IAM
Virtual Private Cloud Infrastructure classique Satellite
Accordez aux pods d'application qui s'exécutent dans votre cluster IBM Cloud® Kubernetes Service un accès aux services IBM Cloud en créant un profil sécurisé dans IBM Cloud Identity and Access Management (IAM).
Vous pouvez activer les profils sécurisés IAM en exécutant la commande ibmcloud ks cluster master refresh
.
- Dans IAM
- Commencez par créer un profil sécurisé IAM. Reliez ensuite ce dernier à la ressource de calcul IBM Cloud Kubernetes Service en sélectionnant les conditions que les clusters doivent respecter, parmi lesquelles un espace de noms et un compte de service Kubernetes dans les clusters. Enfin, affectez des règles d'accès aux services IBM Cloud que vos applications doivent utiliser.
- Dans votre cluster
- Grâce à la projection de volume de jeton de compte de serviceKubernetes, les applications qui s'exécutent dans l'espace de nomKubernetes de votre cluster lié et qui utilisent le compte de service de l'espace de nom peuvent échanger la clé publique du compte de service pour obtenir un jeton d'accès IAM IBM Cloud. Votre application peut utiliser ce jeton d'accès pour authentifier des demandes d'API destinées aux services IBM Cloud, tels que des bases de données, Watson ou des infrastructures VPC. Avec les règles d'accès du profil sécurisé, vous pouvez contrôler les actions que le jeton permet à l'application d'effectuer.
Prérequis
Pour utiliser des identités IBM Cloud IAM avec des pods de votre cluster, vérifiez que vous respectez les prérequis.
Droits minimaux requis
- Rôle d'accès Afficheur plateforme et rôle d'accès Programme d'écriture service pour le cluster dans IBM Cloud IAM for Kubernetes Service.
- Les actions
iam-identity.profile.create
etiam-identity.profile.linkToResource
pour le service IAM d'identité.
Création d'un profil sécurisé IAM pour votre cluster dans l'API
En tant qu'administrateur de compte, créez un profil sécurisé dans IBM Cloud Identity and Access Management. Pour plus d'informations, voir la documentation d'IAM.
Avant de commencer : vérifiez que vous respectez les prérequis.
-
Créez un profil sécurisé IAM dans IBM Cloud Identity and Access Management. Notez l'
uuid
(ID de profil) dans la sortie.-
Remplacez
<access_token>
par votre jeton IBM Cloud. Pour obtenir ce jeton à partir de la ligne de commande, connectez-vous et exécutez la commandeibmcloud iam oauth-tokens
. -
Entrez un
<profile_name>
et un<description>
facultatif pour le profil sécurisé IAM. -
Remplacez
<account_id>
par l'ID de votre compte IBM Cloud. Pour obtenir cet ID à partir de la ligne de commande, exécutez la commandeibmcloud account show
.curl -L -X POST 'https://iam.cloud.ibm.com/v1/profiles' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <access_token>' \ -H 'Content-Type: application/json' \ --data-raw '{ "name": "<profile_name>", "description": "<description>", "account_id": "<account_id>" }'
-
-
Liez le profil sécurisé IAM à un espace de noms Kubernetes dans le cluster IBM Cloud Kubernetes Service.
-
Obtenez votre
<profile-id>
à partir de la sortie de la première étape. Vous pouvez également exécuter la commande d'API suivante :curl -L -X GET 'https://iam.cloud.ibm.com/v1/profiles/?account_id=<account_id>' \ -H 'Accept: application/json' \ -H 'Authorization: <access_token>' \ -H 'Content-Type: application/json' \
-
Extrayez le nom de votre cluster et le nom CRN en exécutant la commande d'API suivante :
curl --location --request GET 'https://containers.cloud.ibm.com/global/v1/clusters' \ --header 'Authorization: <access_token>'
-
Liez le profil sécurisé IAM à votre cluster.
-
Pour
<link_name>
, entrez un nom pour le lien entre le profil sécurisé et le cluster. -
Remplacez
<profile-id>
,<access_token>
,<cluster_crn>
et<cluster_name>
par les valeurs que vous avez précédemment extraites. -
Pour
<ns>
, entrez l'espace de nom dans votre cluster. Pour répertorier les espaces de noms, connectez-vous au cluster et en exécutez la commandekubectl get ns
. Il n'est pas nécessaire que l'espace de noms Kubernetes entré existe déjà. Tout espace de noms futur portant ce nom pourra établir une relation de confiance.curl -L -X POST 'https://iam.cloud.ibm.com/v1/profiles/<profile-id>/links' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer <access_token>' \ -H 'Content-Type: application/json' \ --data-raw '{ "name": "<link_name>", "cr_type": "<sa>", "link": { "crn": "<cluster_crn>", "namespace": "<ns>", "name": "<cluster_name>" } }'
-
-
-
Affectez le profil sécurisé à un groupe d'accès avec des règles d'accès aux services IBM Cloud auxquels vos applications doivent pouvoir accéder.
Vos clusters peuvent désormais établir une relation de confiance avec IBM Cloud IAM. Les développeurs peuvent ensuite configurer leurs pods d'application pour échanger le jeton d'identité contre un jeton IAM et authentifier les demandes destinées aux services IBM Cloud.
Création d'un profil sécurisé IAM pour votre cluster dans l'interface utilisateur
En tant qu'administrateur de compte, créez un profil sécurisé dans IBM Cloud Identity and Access Management. Pour plus d'informations, voir la documentation d'IAM.
Avant de commencer : vérifiez que vous respectez les prérequis.
-
Connectez-vous à la consoleIBM Cloud IAM Trusted profiles.
-
Cliquez sur Créer.
-
Donnez un nom à votre profil sécurisé et cliquez sur Continuer.
-
Pour le type d'entité de confiance, sélectionnez Ressources de calcul.
-
Pour le service de calcul, sélectionnez Kubernetes.
-
Pour les ressources de calcul, choisissez parmi les options suivantes pour déterminer les clusters ou les ressources du cluster qui peuvent établir une relation de confiance.
- Toute ressource de service : tous les clusters existants ou créés ultérieurement. Pour lier le profil sécurisé uniquement aux clusters sous certaines conditions, vous pouvez ajouter une nouvelle condition +.
Par exemple, vous pouvez ajouter des conditions telles que des clusters uniquement dans un groupe de ressources, uniquement des clusters avec un espace de nom
prod
Kubernetes, ou uniquement des clusters avec un compte de servicetrusted-profile
Kubernetes. - Ressources spécifiques : un cluster spécifique. Cliquez sur Ajouter une autre ressource + pour sélectionner un cluster et définir des conditions, telles que l'espace de noms Kubernetes ou le compte de service Kubernetes qui peut établir la relation de confiance.
- Cliquez sur Continu.
Les noms de compte de service et d'espace de nom de Kubernetes que vous entrez ne doivent pas déjà existés. Tous les futurs espaces de noms ou comptes de service portant ces noms pourront établir une relation de confiance. Pour répertorier les espaces de noms existants, connectez-vous au cluster et exécutez la commande
kubectl get ns
. Pour répertorier les comptes de service existants, connectez-vous à votre cluster et exécutezkubectl get sa -n <namespace>
. - Toute ressource de service : tous les clusters existants ou créés ultérieurement. Pour lier le profil sécurisé uniquement aux clusters sous certaines conditions, vous pouvez ajouter une nouvelle condition +.
Par exemple, vous pouvez ajouter des conditions telles que des clusters uniquement dans un groupe de ressources, uniquement des clusters avec un espace de nom
-
Accordez le profil sécurisé à toutes les règles d'accès aux services IAM et à la gestion des comptes que vous souhaitez pour que le pod de votre cluster puisse y accéder.
- Par exemple, vous pouvez accorder un accès à Tous les services avec l'offre Identity and Access activée et à Toutes les ressources dans ces services, avec les rôles d'accès à la plateforme Editeur, les rôles d'accès au service Auteur et les rôles d'accès au groupe de ressources Afficheur.
- Cliquez sur Ajouter + pour ajouter la règle au profil et continuez à ajouter autant de règles que vous le souhaitez.
-
Dans le panneau récapitulatif, examinez les détails du profil, de la relation de confiance et de l'accès. Cliquez ensuite sur Créer.
Vos clusters peuvent désormais établir une relation de confiance avec IBM Cloud IAM. Les développeurs peuvent ensuite configurer leurs pods d'application pour échanger le jeton d'identité contre un jeton IAM et authentifier les demandes destinées aux services IBM Cloud.
Configuration des pods d'application pour s'authentifier auprès des services IBM Cloud
En tant que développeur, vous pouvez configurer les serveurs d'applications afin qu'ils s'authentifient auprès des services IBM Cloud sur des clusters liés à un profil de confiance IAM configuré.
Avant de commencer :
- Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
- Vérifiez que l'administrateur de compte a créé un profil sécurisé IAM pour votre cluster.
Pour configurer les serveurs d'application afin qu'ils s'authentifient auprès des services IBM Cloud, procédez comme suit :
-
Concevez votre fichier de configuration de pod pour utiliser la projection de volume de jeton de compte de service.
-
Dans la section
containers
, montez le jeton d'identité dans la sectionvolumeMounts
.... volumeMounts: - mountPath: /var/run/secrets/tokens name: sa-token
-
Dans la section
volumes
, définissez la projection du volume avec jeton de compte de service.Modifiez la zone
expirationSeconds
pour contrôler la durée de validité du jeton. Pour extraire des jetons IAM, le délai d'expiration des jetons de compte de service doit être inférieur ou égal à une heure.... volumes: - name: sa-token projected: sources: - serviceAccountToken: path: sa-token expirationSeconds: 3600 audience: iam ...
-
-
Créez votre application de manière à échanger le jeton projeté du compte de service contre un jeton IAM utilisable pour les appels d'API adressés ultérieurement aux services IBM Cloud. Consultez l'exemple de demande d'authentification suivant. Remplacez
${profile_id}
par l'ID du profil sécurisé auquel le cluster est lié. Pour répertorier les ID de profil disponibles, vous ou l'administrateur de compte pouvez utiliser la commandeibmcloud iam tps
,GET 'https://iam.cloud.ibm.com/v1/profiles/?account_id=<account_id>'
, ou vous pouvez afficher les profils sécurisés dans la console IAM.curl -s -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ -d grant_type=urn:ibm:params:oauth:grant-type:cr-token \ -d cr_token=$(cat /var/run/secrets/tokens/sa-token) \ -d profile_id=${profile_id} \ https://iam.cloud.ibm.com/identity/token
-
Avant de déployer votre application, essayez l'exemple de travail Kubernetes suivant pour tester l'échange de jeton. Dans le travail Kubernetes suivant, un pod
curl
fait une demande d'API à IBM Cloud IAM pour vérifier que la clé publique du cluster est échangée pour un jeton d'accès IAM. Votre application peut appeler d'autres services IBM Cloud autorisés par le profil sécurisé.apiVersion: batch/v1 kind: Job metadata: name: token-exchange-job namespace: default spec: template: spec: containers: - name: curl image: curlimages/curl:7.77.0 command: ["/bin/sh"] args: ["-c", "curl -s -H \"Content-Type: application/x-www-form-urlencoded\" -H \"Accept: application/json\" -d grant_type=urn:ibm:params:oauth:grant-type:cr-token -d cr_token=$(cat /var/run/secrets/tokens/sa-token) -d profile_id=<profile_id> https://iam.cloud.ibm.com/identity/token"] volumeMounts: - mountPath: /var/run/secrets/tokens name: sa-token restartPolicy: Never serviceAccountName: default volumes: - name: sa-token projected: sources: - serviceAccountToken: path: sa-token expirationSeconds: 3600 audience: iam
-
Déployez le travail.
kubectl apply -f exchange-job.yaml
-
Vérifiez les détails du travail pour vous assurer qu'il a abouti.
kubectl describe job token-exchange-job
-
Consultez la sortie des messages
job completed
etsucceeded
pour vérifier que le travail a abouti. -
Si le travail a abouti, consultez vos événements globaux Activity Tracker à Francfort pour vérifier la ligne de journal avec les détails de la demande de profil sécurisé. Si le travail a échoué, vérifiez votre configuration et réessayez.