Accorder l'accès aux ressources d' Container Registry
Utilisez ce tutoriel pour savoir comment accorder l'accès à vos ressources en configurant IBM Cloud® Identity and Access Management (IAM) pour IBM Cloud® Container Registry.
Tous les comptes requièrent des règles d'accès IAM. Pour configurer et gérer les règles d'accès IAM, voir Définition des règles d'accès IAM.
Pour plus d'informations sur l'utilisation d'IAM pour gérer l'accès à vos ressources, voir Gestion de l'accès aux ressources.
Avant de commencer
Avant de commencer, vous devez effectuer les tâches suivantes :
- Suivez les instructions dans Initiation à IBM Cloud Container Registry.
- Assurez-vous de disposer de la version la plus récente du plug-in d’interface de ligne
container-registryde commande (CLI) pour la CLI IBM Cloud. Reportez-vous à la section Mise à jour du plug-in CLIcontainer-registry. - Assurez-vous de disposer de deux comptes IBM Cloud que vous pourrez utiliser pour ce tutoriel, l’un pour l’utilisateur A et l’autre pour l’utilisateur B; chacun doit utiliser une adresse e-mail unique. Vous travaillez dans votre propre compte ('utilisateur A) et vous invitez un autre utilisateur (utilisateur B) à utiliser votre compte. Vous pouvez choisir de créer un deuxième compte IBM Cloud ou de travailler avec un collègue disposant d'un compte IBM Cloud.
- Assurez-vous de disposer des autorisations d'accès appropriées pour ajouter et supprimer des espaces de nomsUne collection de référentiels stockant des images dans un registre. Un espace de nom est associé à un compte IBM Cloud, qui peut inclure plusieurs espaces de nom.; consultez la section Rôles d'accès pour configurer IBM Cloud Container Registry.
Autorisation d'un utilisateur à configurer le registre
Ajoutez un deuxième utilisateur à votre compte et accordez-lui la possibilité de configurer IBM Cloud Container Registry.
-
Ajoutez l'utilisateur B au compte de l'utilisateur A.
- Connectez-vous au compte de l'utilisateur A en exécutant la commande suivante.
ibmcloud login ``` 2. Invitez l'utilisateur B à accéder au compte de l'utilisateur A en exécutant la commande suivante, où `<user.b@example.com>` est l'adresse électronique de l'utilisateur B. ```txt {: pre} ibmcloud account user-invite <user.b@example.com> ``` 3. Procurez-vous l'ID de compte de l'utilisateur A en exécutant la commande suivante. ```txt {: pre} ibmcloud target ``` Notez l'ID de compte qui figure entre parenthèses ( ) sur la ligne Compte. -
Démontrez que l'utilisateur B peut cibler le compte de l'utilisateur A, mais ne peut pour l'instant rien faire avec IBM Cloud Container Registry.
- Connectez-vous en tant qu'utilisateur B et ciblez le compte de l'utilisateur A en exécutant la commande suivante, où
YOUR_ACCOUNT_IDest l'ID de compte de l'utilisateur A.
ibmcloud login -c YOUR_ACCOUNT_ID ``` 2. Essayez d'éditer votre quota de registre afin de le remplacer par 4 Go de trafic en exécutant la commande suivante. ```txt {: pre} ibmcloud cr quota-set --traffic 4000 ``` La commande échoue car l'utilisateur B ne dispose pas d'un droit d'accès approprié. - Connectez-vous en tant qu'utilisateur B et ciblez le compte de l'utilisateur A en exécutant la commande suivante, où
-
Accordez à l'utilisateur B le rôle Responsable pour que l'utilisateur B puisse configurer IBM Cloud Container Registry.
- Reconnectez-vous à votre compte en tant qu'utilisateur A (vous-même) en exécutant la commande suivante.
ibmcloud login ``` 2. Créez une règle qui affecte le rôle Responsable à l'utilisateur B en exécutant la commande suivante. ```txt {: pre} ibmcloud iam user-policy-create USER.B@EXAMPLE.COM --service-name container-registry --roles Manager ``` -
Vérifiez que l'utilisateur B peut désormais modifier des quotas dans le compte de l'utilisateur A.
- Connectez-vous en tant qu'utilisateur B afin de cibler le compte de l'utilisateur A en exécutant la commande suivante.
ibmcloud login -c YOUR_ACCOUNT_ID ``` 2. Essayez d'éditer votre quota de registre afin de le remplacer par 4 Go de trafic en exécutant la commande suivante. ```txt {: pre} ibmcloud cr quota-set --traffic 4000 ``` La commande aboutit car l'utilisateur B dispose des droits d'accès appropriés. 3. A présent, rétablissez le quota en exécutant la commande suivante. ```txt {: pre} ibmcloud cr quota-set --traffic 5120 ``` -
Effectuez des opérations de nettoyage.
- Reconnectez-vous à votre compte en tant qu'utilisateur A (vous-même) en exécutant la commande suivante.
ibmcloud login ``` 2. Répertoriez les règles pour l'utilisateur B, localisez la règle que vous venez de créer en exécutant la commande suivante, et notez l'ID. ```txt {: pre} ibmcloud iam user-policies <user.b@example.com> ``` 3. Supprimez la règle en exécutant la commande suivante, où `POLICY_ID` correspond à votre politique d'ID. ```txt {: pre} ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID ```
Autorisation d'un utilisateur à accéder à des espaces de nom spécifiques
Créez des espaces de nom avec des exemples d'image et octroyez les droits permettant d'y accéder. Vous allez créer des règles pour octroyer différents rôles d'accès à chaque espace de nom et vous allez afficher l'impact de ces actions.
-
Créez trois nouveaux espaces de nom dans le compte de l'utilisateur A. Ces espaces de nom doivent être uniques dans la région, par conséquent, vous choisissez vos propres noms d'espace de nom. Cela dit, ce tutoriel utilise
namespace_a,namespace_betnamespace_cen guise d'exemples.- Connectez-vous en tant qu'utilisateur A en exécutant la commande suivante.
ibmcloud login ``` 2. Créez `namespace_a` en exécutant la commande suivante. ```txt {: pre} ibmcloud cr namespace-add namespace_a ``` L'espace de nom doit être unique pour tous les comptes IBM Cloud de la même région. Les espaces de nom doivent comporter entre 4 et 30 caractères et contenir uniquement des lettres minuscules, des chiffres, des tirets (-) et des traits de soulignement (_). Les espaces de nom doivent commencer et se terminer par une lettre ou un chiffre. {: requirement} Si vous rencontrez un problème lors de l'ajout d'un espace de nom, voir [Pourquoi ne puis-je pas ajouter d'espace de nom?](/docs/Registry?topic=Registry-troubleshoot-add-namespace) pour obtenir de l'aide. {: tip} 3. Créez `namespace_b` en exécutant la commande suivante. ```txt {: pre} ibmcloud cr namespace-add namespace_b ``` 4. Créez `namespace_c` en exécutant la commande suivante. ```txt {: pre} ibmcloud cr namespace-add namespace_c ``` -
Démontrez que l'utilisateur B ne peut rien voir.
- Connectez-vous en tant qu'utilisateur B afin de cibler le compte de l'utilisateur A en exécutant la commande suivante.
ibmcloud login -c YOUR_ACCOUNT_ID ``` 2. Essayez de répertorier des espaces de nom en tant qu'utilisateur B en exécutant la commande suivante. ```txt {: pre} ibmcloud cr namespaces ``` Cette commande renvoie une liste vide car l'utilisateur B n'a pas accès aux espaces de nom. -
Créez des règles pour accorder à l'utilisateur B les droits lui permettant d'interagir avec les espaces de nom en exécutant la commande suivante.
- Connectez-vous en tant qu'utilisateur A en exécutant la commande suivante.
ibmcloud login ``` 2. Assurez-vous qu'au moins trois espaces de nom sont répertoriés en exécutant la commande suivante. ```txt {: pre} ibmcloud cr namespaces ``` Les trois espaces de nom que vous avez créés dans ce tutoriel (`namespace_a`, `namespace_b` et `namespace_c`) s'affichent. Si ces espaces de noms n'apparaissent pas, répétez les instructions pour les créer à nouveau. 3. Créez une règle qui accorde le rôle de Lecteur sur `namespace_b` à l'utilisateur B en exécutant la commande suivante, où `CLOUD_REGION` est le nom de votre région IBM Cloud, par exemple `us-south`. ```txt {: pre} ibmcloud iam user-policy-create USER.B@EXAMPLE.COM --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_b --roles Reader ``` Pour afficher les noms des régions IBM Cloud, exécutez la commande [`ibmcloud regions`](/docs/cli?topic=cli-ibmcloud_cli#ibmcloud_regions). {: tip} 4. Créez une seconde règle qui affecte les rôles Lecteur et Editeur sur `namespace_c` à l'utilisateur B en exécutant la commande suivante. ```txt {: pre} ibmcloud iam user-policy-create USER.B@EXAMPLE.COM --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_c --roles Reader,Writer ``` Cette commande ajoute deux rôles à la même ressource dans la même règle. {: note} -
Envoyez les images dans
namespace_aetnamespace_b.- Extrayez l'image
hello-worlden exécutant la commande suivante.
docker pull hello-world ``` 2. Balisez l'image sur `namespace_a` en exécutant la commande suivante, où `REGISTRY_REGION` est le nom de votre [Région IBM Cloud Container Registry](/docs/Registry?topic=Registry-registry_overview#registry_regions), par exemple `us-south`. ```txt {: pre} docker tag hello-world REGISTRY_REGION.icr.io/namespace_a/hello-world ``` 3. Attribuez l'étiquette `namespace_b` à l'image en exécutant la commande suivante. ```txt {: pre} docker tag hello-world REGISTRY_REGION.icr.io/namespace_b/hello-world ``` 4. Connectez-vous à IBM Cloud Container Registry en exécutant la commande [`ibmcloud cr login`](/docs/Registry?topic=Registry-containerregcli#bx_cr_login). ```txt {: pre} ibmcloud cr login ``` IBM Cloud Container Registry prend en charge Docker et d'autres clients. Pour vous connecter à l'aide d'autres clients, voir [Accès interactif à vos espaces de nom](/docs/Registry?topic=Registry-registry_access#registry_access_interactive). {: tip} Si vous avez un problème lorsque vous tentez de vous connecter, reportez-vous à la section [Pourquoi ne puis-je pas me connecter à Container Registry?](/docs/Registry?topic=Registry-troubleshoot-login) pour obtenir de l'aide. {: tip} 5. Envoyez l'image à `namespace_a` en exécutant la commande suivante. ```txt {: pre} docker push REGISTRY_REGION.icr.io/namespace_a/hello-world ``` 6. Envoyez l'image à `namespace_b` en exécutant la commande suivante. ```txt {: pre} docker push REGISTRY_REGION.icr.io/namespace_b/hello-world ``` - Extrayez l'image
-
Vérifiez que l'utilisateur B peut interagir avec
namespace_betnamespace_cmais pas avecnamespace_a.- Connectez-vous en tant qu'utilisateur B en exécutant la commande suivante.
ibmcloud login -c YOUR_ACCOUNT_ID ``` 2. Vérifiez que l'utilisateur B peut voir `namespace_b` et `namespace_c`, mais pas `namespace_a` car il n'a pas accès à `namespace_a`, en exécutant la commande suivante. ```txt {: pre} ibmcloud cr namespaces ``` 3. Répertoriez vos images en exécutant la commande suivante. ```txt {: pre} ibmcloud cr images ``` L'image dans `namespace_b` apparaît dans la liste, mais l'image dans `namespace_a` n'apparaît pas dans la liste, car l'utilisateur B n'a pas accès à `namespace_a`. 4. Connectez-vous à IBM Cloud Container Registry en exécutant la commande suivante. ```txt {: pre} ibmcloud cr login ``` IBM Cloud Container Registry prend en charge Docker et d'autres clients. Pour vous connecter à l'aide d'autres clients, voir [Accès interactif à vos espaces de nom](/docs/Registry?topic=Registry-registry_access#registry_access_interactive). {: tip} 5. Extrayez l'image en exécutant la commande suivante. ```txt {: pre} docker pull REGISTRY_REGION.icr.io/namespace_b/hello-world ``` 6. Envoyez l'image à `namespace_b` en exécutant la commande suivante. ```txt {: pre} docker push REGISTRY_REGION.icr.io/namespace_b/hello-world ``` Cette commande échoue car l'utilisateur B ne dispose pas du rôle Editeur sur `namespace_b`. 7. Etiquetez l'image avec `namespace_c` en exécutant la commande suivante. ```txt {: pre} docker tag hello-world REGISTRY_REGION.icr.io/namespace_c/hello-world ``` 8. Envoyez l'image à `namespace_c` en exécutant la commande suivante. ```txt {: pre} docker push REGISTRY_REGION.icr.io/namespace_c/hello-world ``` La commande aboutit car l'utilisateur B dispose du rôle Editeur sur `namespace_c`. 9. Extrayez l'image de `namespace_c` en exécutant la commande suivante. ```txt {: pre} docker pull REGISTRY_REGION.icr.io/namespace_c/hello-world ``` La commande aboutit car l'utilisateur B dispose du rôle Lecteur sur `namespace_c`. -
Effectuez des opérations de nettoyage :
- Reconnectez-vous au compte de l'utilisateur A en exécutant la commande suivante.
ibmcloud login ``` 2. Répertoriez les règles pour l'utilisateur B en exécutant la commande suivante. ```txt {: pre} ibmcloud iam user-policies <user.b@example.com> ``` Recherchez les règles que vous avez créées et notez les ID de règle. 3. Supprimez les règles que vous avez créées en exécutant la commande suivante, où `POLICY_ID` est l'ID de règle. ```txt {: pre} ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID ```
Création d'un ID de service et octroi des droits d'accès à une ressource
Configurez un ID de service et accordez-lui l'accès à votre espace de nom IBM Cloud Container Registry.
-
Configurez un identifiant de service avec accès à IBM Cloud Container Registry et créez une clé APICode unique transmis à une API pour identifier l'application ou l'utilisateur appelant et pour envoyer des données de suivi. Cette clé sert à suivre et à contrôler la façon dont l'API est utilisée, pour empêcher, par exemple, son utilisation malveillante ou abusive. pour celui-ci.
- Connectez-vous au compte de l'utilisateur A en exécutant la commande suivante.
ibmcloud login ``` 2. Créez un ID de service nommé `cr-roles-tutorial` avec la description `"Created during the access control tutorial for Container Registry"` en exécutant la commande suivante. ```txt {: pre} ibmcloud iam service-id-create cr-roles-tutorial --description "Created during the access control tutorial for Container Registry" ``` 3. Créez une règle de service qui affecte le rôle Lecteur sur `namespace_a` pour l'ID de service en exécutant la commande suivante. ```txt {: pre} ibmcloud iam service-policy-create cr-roles-tutorial --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_a --roles Reader ``` 4. Créez une seconde règle de service qui affecte le rôle Editeur sur `namespace_b` en exécutant la commande suivante. ```txt {: pre} ibmcloud iam service-policy-create cr-roles-tutorial --service-name container-registry --region CLOUD_REGION --resource-type namespace --resource namespace_b --roles Writer ``` 5. Créez une clé d'API pour l'ID de service en exécutant la commande suivante. ```txt {: pre} ibmcloud iam service-api-key-create cr-roles-tutorial-apikey cr-roles-tutorial ``` -
Utilisez Docker pour vous connecter avec la clé d'interface de programmation de l'ID de service, où
API_KEYest votre clé d'interface de programmation et interagissez avec le registre.- Connectez-vous à IBM Cloud Container Registry en exécutant la commande suivante.
docker login -u iamapikey -p API_KEY REGISTRY_REGION.icr.io ``` IBM Cloud Container Registry prend en charge Docker et d'autres clients. Pour vous connecter à l'aide d'autres clients, voir [Accès à vos espaces de nom dans l'automatisation](/docs/Registry?topic=Registry-registry_access#registry_access_automating). {: tip} 2. Extrayez l'image en exécutant la commande suivante. ```txt {: pre} docker pull REGISTRY_REGION.icr.io/namespace_a/hello-world ``` 3. Envoyez votre image à `namespace_a` en exécutant la commande suivante. ```txt {: pre} docker push REGISTRY_REGION.icr.io/namespace_a/hello-world ``` Cette commande échoue car l'utilisateur ne dispose pas du rôle Editeur sur `namespace_a`. 4. Envoyez votre image à `namespace_b` en exécutant la commande suivante. ```txt {: pre} docker push REGISTRY_REGION.icr.io/namespace_b/hello-world ``` La commande aboutit car l'utilisateur dispose du rôle Editeur sur `namespace_b`. -
Effectuez des opérations de nettoyage :
- Connectez-vous à IBM Cloud Container Registry en tant qu'utilisateur A.
ibmcloud cr login ``` IBM Cloud Container Registry prend en charge Docker et d'autres clients. Pour vous connecter à l'aide d'autres clients, voir [Accès interactif à vos espaces de nom](/docs/Registry?topic=Registry-registry_access#registry_access_interactive). {: tip} 2. Répertoriez vos règles de service en exécutant la commande suivante. ```txt {: pre} ibmcloud iam service-policies cr-roles-tutorial ``` Notez les ID de règle. 3. Supprimez vos règles de service en exécutant la commande suivante pour chaque règle. ```txt {: pre} ibmcloud iam service-policy-delete cr-roles-tutorial POLICY_ID ``` 4. Supprimez votre ID de service en exécutant la commande suivante. ```txt {: pre} ibmcloud iam service-id-delete cr-roles-tutorial ```
Nettoyage de votre compte
Supprimez les ressources que vous avez créées dans les sections précédentes afin que votre compte revienne à l'état dans lequel il se trouvait au début de ce tutoriel.
-
Connectez-vous au compte de l'utilisateur A en exécutant la commande suivante.
ibmcloud login -
Supprimez
namespace_a,namespace_betnamespace_cen exécutant les commandes suivantes.ibmcloud cr namespace-rm namespace_aibmcloud cr namespace-rm namespace_bibmcloud cr namespace-rm namespace_c -
Retirez l'utilisateur B de votre compte en exécutant la commande suivante.
ibmcloud account user-remove <user.b@example.com>