Gestion de l'accès IAM pour Container Registry
Contrôlez l'accès des utilisateurs à Container Registry en utilisant les politiques d'accès et les rôles IAM pour définir les actions que les utilisateurs sont autorisés à effectuer.
Chaque utilisateur accédant au service IBM Cloud Container Registry de votre compte doit se voir attribuer une politique d'accèsMéthode permettant d'octroyer l'accès aux ressources d'un compte à des utilisateurs, des ID de service et des groupes d'accès. Une règle d'accès comprend un sujet, une cible et un rôle. IAM associée à un rôle IAM. Un utilisateur peut également faire partie d'un groupe d'accès auquel sont attribuées des politiques d'accès IAM qui lui confèrent un rôle IAM. Passez en revue les rôles, les actions, les rôles suivants, etc., afin de déterminer la meilleure façon d'affecter l'accès à Container Registry.
Pour plus d'informations sur IAM, consultez Premiers pas avec l'IBM Cloud Identity and Access Management.
Essayez le tutoriel « Accorder l'accès aux ressources d' Container Registry ».
Stratégies d'accès
La règle d'accès IAM que vous affectez aux utilisateurs de votre compte détermine les actions qu'un utilisateur peut effectuer dans le contexte du service ou de l'instance spécifique que vous sélectionnez. Les actions autorisées sont personnalisées et définies par Container Registry en tant qu'opérations pouvant être réalisées sur le service. Chaque action est mappée à un rôle de plateforme ou de service IAM que vous pouvez affecter à un utilisateur.
Les règles permettent d'activer les accès à différents niveaux. Certaines options incluent les niveaux d'accès suivants:
- Accès au service dans votre compte
- Accès à une ressource spécifique dans le service
- Accès à tous les services activés par IAM dans votre compte
- Accéder à des ressources au sein d'un groupe de ressources
Si vous souhaitez restreindre l'accès des utilisateurs à un ou plusieurs 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. pour un identifiant que vous utilisez à des fins d'automatisation, utilisez un identifiant de service IAM. Pour plus d'informations sur les ID de service, voir Création et utilisation des ID de service.
Vous pouvez définir des droits d'accès pour pouvoir configurer l'accès aux ressources dans un espace de nom au niveau du groupe de ressourcesEnvironnement, et contraintes, auxquels les instances de ressource contenues adhèrent. Un utilisateur peut être associé à un groupe de ressources pour activer la collaboration.. Pour plus d'informations, voir Droits utilisateur pour utiliser des espaces de nom.
Pour plus d'informations sur l'activation des règles pour Container Registry, voir Définition des règles d'accès IAM.
Affectation de rôles
Après avoir défini la portée de la règle d'accès IAM, vous affectez un rôle.
Si un rôle spécifique et les actions qui y sont associées ne correspondent pas au cas d'utilisation que vous souhaitez traiter, vous pouvez créer un rôle personnalisé et sélectionner les actions à inclure.
Consultez les tableaux suivants qui décrivent les actions que chaque rôle autorise dans le service Container Registry.
-
Les rôles de gestion de la plateforme permettent aux utilisateurs d'effectuer des tâches sur les ressources de service au niveau de la plateforme, par exemple attribuer un accès utilisateur au service, créer ou supprimer des instances, et associer des instances à des applications.
-
Les rôles d'accès au service permettent aux utilisateurs d'accéder à Container Registry et d'appeler l'API Container Registry.
Pour plus d'informations sur les actions exactes mappées avec chaque rôle, voir Rôles et actions IAM pour Container Registry.
Pour plus d’informations sur l’attribution de rôles utilisateur dans la console d’ IBM Cloud, consultez la section Gestion de l’accès aux ressources.
Restrictions basées sur le contexte
Container Registry prend également en charge les restrictions contextuelles. Vous pouvez utiliser des restrictions contextuelles pour définir et appliquer des restrictions d'accès pour les ressources IBM Cloud en fonction de l'emplacement réseau des demandes d'accès. Ces restrictions s'associent aux politiques IAM traditionnelles, qui reposent sur l'identité, afin d'offrir une couche de protection supplémentaire.
Pour plus d'informations, voir Protection des ressources Container Registry avec des restrictions contextuelles.
Rôles de gestion de plateforme
Le tableau suivant détaille les actions mappées sur les rôles de gestion de plateforme. Les rôles de gestion de plateforme permettent aux utilisateurs d'effectuer des tâches sur les ressources de service au niveau plateforme, par exemple, affecter des accès utilisateur pour le service et créer ou supprimer des ID de service.
| Rôles de gestion de plateforme | Description des actions | Exemples d'actions |
|---|---|---|
| Afficheur | Non pris en charge | Non applicable |
| Editeur | Non pris en charge | Non applicable |
| Opérateur | Non pris en charge | Non applicable |
| Administrateur | Configurer l'accès pour d'autres utilisateurs.
Application de secrets d'extraction aux clusters. |
Pour plus d’informations sur l’attribution de rôles utilisateur dans la console d’ IBM Cloud, consultez la section Gestion de l’accès aux ressources.
Pour créer des clusters dans IBM Cloud Kubernetes Service qui ont des secrets d'extraction pour accéder aux images dans Container Registry, vous devez avoir le rôle Administrateur. Pour utiliser la commande |
Rôles d'accès au service
Le tableau ci-dessous détaille les actions qui sont mappées aux rôles d'accès de service. Les rôles d'accès au service donnent aux utilisateurs l'accès à Container Registry ainsi qu'à la capacité d'appeler l'API Container Registry.
| Rôle d'accès au service | Description des actions | Exemples d'actions |
|---|---|---|
| Lecteur | Peut afficher des informations. | Afficher, inspecter et extraire les images.
Afficher et analyser les espaces de nom. Afficher les quotas. Afficher les rapports de vulnérabilité. Afficher les signatures d'image. Afficher les règles de conservation. Afficher le contenu de la corbeille. Affiche le contenu du manifeste pour une image. Répertorier les règles d'exemption Vulnerability Advisor et les types d'exemption de sécurité. |
| Auteur | Peut éditer des informations. | Envoyer, supprimer et restaurer des images.
Afficher les quotas. Signer des images. Définir et exécuter des règles de conservation. Supprimez toutes les images non balisées dans votre compte Container Registry. |
| Responsable | Peut effectuer toutes les actions. | Afficher, inspecter, extraire, envoyer, supprimer et restaurer des images.
Afficher, ajouter, analyser et supprimer des espaces de nom. Affecter des espaces de nom à des groupes de ressources. Afficher et définir les quotas. Afficher les rapports de vulnérabilité. Afficher et créer des signatures d'image. Réviser et modifier les plans de tarification. Activer l'application des règles d'accès IAM. Répertorier, ajouter et supprimer des règles d'exemption de problèmes de sécurité Vulnerability Advisor. Énumérez les types d'exemptions de sécurité. Définir et exécuter des règles de conservation. Afficher le contenu de la corbeille. Restaurer des images. Affiche le contenu du manifeste pour une image. Interdit ou autorise les extraction ou les envois d'image via les connexions de réseau public sur votre compte. Vérifie si l'utilisation des connexions publiques est bloquée lors des extractions ou des envois d'image sur votre compte. Supprimez toutes les images non balisées dans votre compte Container Registry. |
Pour les commandes Container Registry, vous devez disposer au minimum de l'un des rôles spécifiés, comme indiqué dans les tableaux ci-après. Pour créer une règle qui autorise l'accès à Container Registry, vous devez créer cette règle avec les critères suivants applicables.
- Le nom du service est
container-registry. - L'instance de service est vide.
- La région est celle à laquelle vous voulez accorder l'accès ou est vide pour accorder l'accès à toutes les régions.
Rôles d'accès pour la configuration d'Container Registry
Pour accorder à un utilisateur le droit de configurer votre Container Registry dans votre compte, vous devez créer une règle qui accorde un ou plusieurs rôles dans le tableau suivant. Lorsque vous créez votre règle, vous ne devez pas spécifier
un élément resource type ni un élément resource. Les règles de configuration d'Container Registry ne doivent pas être définies au niveau d'un groupe de ressources.
Par exemple, exécutez la commande ibmcloud iam user-policy-create suivante. Où USER_EMAIL est l'adresse électronique de l'utilisateur, REGION est la région, et ROLES est le rôle ou les rôles
que l'utilisateur doit avoir.
ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --region REGION --roles ROLES
Le tableau ci-dessous détaille les actions qui sont mappées aux opérations sur le service et aux rôles d'accès au service pour la configuration d'Container Registry.
| Action | Opération sur le service | Rôle |
|---|---|---|
container-registry.auth.get |
ibmcloud cr private-only Vérifier si l'utilisation des connexions publiques est bloquée lors des extractions ou des envois d'image sur votre
compte. |
Responsable |
container-registry.auth.set |
ibmcloud cr iam-policies-enable Activer l'application des règles d'accès IAM.
|
Responsable |
container-registry.exemption.list |
ibmcloud cr exemption-list Répertoriez les règles d'exemption de l'assistant de vulnérabilité pour les problèmes de sécurité.
|
Lecteur, Responsable |
container-registry.exemption.manager |
ibmcloud cr exemption-add Création d'une règle d'exemption de l'assistant de vulnérabilité pour un problème de sécurité.
|
Responsable |
container-registry.namespace.create |
ibmcloud cr namespace-add Créez un espace de nom.
|
Responsable |
container-registry.namespace.delete |
ibmcloud cr namespace-rm Retirer un espace de nom. |
Responsable |
container-registry.plan.get |
ibmcloud cr plan Afficher le plan de tarification. |
Responsable |
container-registry.plan.set |
ibmcloud cr plan-upgrade Effectuer une mise à niveau vers le plan standard. |
Responsable |
container-registry.quota.get |
ibmcloud cr quota Afficher vos quotas actuels de trafic et de stockage, ainsi que les informations d'utilisation de ces quotas. |
Lecteur, rédacteur, gestionnaire |
container-registry.quota.set |
ibmcloud cr quota-set Modifier le quota spécifié. |
Responsable |
container-registry.settings.get |
ibmcloud cr platform-metrics Obtenir les paramètres du service de registre pour le compte ciblé, par exemple si les métriques de la plateforme
sont activées. |
Lecteur, rédacteur, gestionnaire |
container-registry.settings.set |
ibmcloud cr platform-metrics Mettre à jour les paramètres du service de registre pour le compte ciblé, par exemple en activant les métriques
de la plateforme. |
Responsable |
Rôles d'accès pour l'utilisation d'Container Registry
Pour accorder à un utilisateur les droits nécessaires pour accéder au contenu Container Registry dans votre compte, vous devez créer une règle qui accorde un ou plusieurs des rôles répertoriés dans le tableau ci-après. Lorsque vous créez votre
règle, vous pouvez limiter l'accès à un espace de nom spécifique en spécifiant le type de ressource namespace et le nom de l'espace de nom comme ressource. Si vous ne spécifiez pas un élément resource-type ni un
élément resource, la règle accorde l'accès à toutes les ressources du compte. Par ailleurs, si votre espace de nom se trouve dans un groupe de ressources, vous pouvez accorder une autorisation à l'aide d'une règle d'accès IAM
sur ce groupe de ressources.
Par exemple, utilisez la commande suivante pour créer une règle utilisateur. Où USER_EMAIL est l'adresse électronique de l'utilisateur, REGION est la région, ROLES est le rôle ou les rôles que vous souhaitez
que l'utilisateur ait, et NAMESPACE_NAME est le nom de l'espace de nom.
ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --region REGION --roles ROLES [--resource-type namespace --resource NAMESPACE_NAME]
Le tableau ci-dessous détaille les actions qui sont mappées aux opérations sur le service et aux rôles d'accès au service pour l'utilisation d'Container Registry.
| Action | Opération sur le service | Rôle |
|---|---|---|
container-registry.image.delete |
docker trust revoke Supprimer la signature d'une image de conteneur.
|
Écrivain, gestionnaire
Pour exécuter |
container-registry.image.inspect |
ibmcloud cr image-inspect Affichez les détails d'une image de conteneur spécifique.
|
Lecteur, Responsable |
container-registry.image.list |
ibmcloud cr image-digests Répertoriez toutes les images de conteneur, y compris les images non marquées.
|
Lecteur, Responsable |
container-registry.image.pull |
docker pull Extraire une image de conteneur.
|
Lecteur, rédacteur, gestionnaire |
container-registry.image.push |
docker push Envoyer par commande push une image de conteneur.
|
Auteur, Responsable |
container-registry.namespace.list |
ibmcloud cr namespace-list Répertorier vos espaces de nom. |
Lecteur, Responsable |
container-registry.retention.analyze |
ibmcloud cr retention-policy-set Définissez une règle pour nettoyer vos espaces de nom en conservant uniquement les images de conteneur
qui répondent à vos critères.
|
Lecteur, gestionnaire
Pour exécuter |
container-registry.retention.get |
Affichez la règle de conservation des images d'un espace de nom à l'aide de l'API, voir API IBM Cloud Container Registry. | Lecteur, Responsable |
container-registry.retention.set |
ibmcloud cr retention-policy-set Définir une règle de nettoyage de vos espaces de nom en conservant uniquement les images de conteneur
qui répondent à vos critères. |
Auteur, Responsable |
container-registry.retention.list |
ibmcloud cr retention-policy-list Répertorier les règles de conservation des images pour votre compte. |
Lecteur, Responsable |
Attribution d'un accès à Container Registry dans la console IBM Cloud
Vous pouvez utiliser l'une des options suivantes pour attribuer des droits d'accès dans la console d' IBM Cloud:
- Règles d'accès par utilisateur. Vous pouvez gérer les politiques d'accès par utilisateur depuis la page Gérer > Accès (IAM) > Utilisateurs de la console IBM Cloud. Pour plus d'informations sur les étapes de l'attribution d'un accès IAM, voir Attribution d'un accès aux ressources dans la console.
- Groupes d'accès. Les groupes d'accès sont utilisés pour rationaliser la gestion des accès en affectant une seule fois l'accès à un groupe, puis vous pouvez ajouter ou supprimer des utilisateurs dans le groupe selon les besoins pour contrôler leur accès. Vous gérez les groupes d'accès et leurs droits d'accès depuis la page Gérer > Accès (IAM) > Groupes d'accès de la console d' IBM Cloud. Pour plus d'informations, voir Affectation de l'accès à un groupe dans la console.
Attribution d'un accès à Container Registry dans l'interface de ligne de commande (CLI)
Pour obtenir des instructions détaillées sur l'affectation, la suppression et l'examen des accès, voir Affectation de l'accès aux ressources à l'aide de l'interface de ligne de commande.
L'exemple suivant montre une commande permettant d'attribuer le rôle Manager pour Container Registry à un utilisateur, où USER_EMAIL est l'adresse électronique de l'utilisateur.
Utilisez container-registry comme nom de service.
ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --roles Manager
Affectation de l'accès à Container Registry à l'aide de l'API
Pour obtenir des instructions détaillées sur l'affectation, la suppression et l'examen de l'accès, voir Affectation de l'accès aux ressources à l'aide de l'API ou Créer une règle dans la documentation de l'API. Les noms de ressource cloud (CRN) du rôle dans le tableau suivant sont utilisés pour affecter l'accès avec l'API.
| Nom du rôle | Rôle CRN |
|---|---|
| Administrateur | crn:v1:bluemix:public:container-registry::::serviceRole:Administrator |
| Lecteur | crn:v1:bluemix:public:container-registry::::serviceRole:Reader |
| Auteur | crn:v1:bluemix:public:container-registry::::serviceRole:Writer |
| Responsable | crn:v1:bluemix:public:container-registry::::serviceRole:Manager |
L'exemple suivant concerne l'affectation du rôle Manager pour Container Registry:
Utilisez pour container-registry le nom du service et consultez le tableau des valeurs d'ID de rôle pour vous assurer que vous utilisez la valeur correcte pour le CRN.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Manager role for Container Registry",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:container-registry::::serviceRole:Manager"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "container-registry"
}
]
}
]
}
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value("IBMid-123453user")
.build();
PolicySubject policySubjects = new PolicySubject.Builder()
.addAttributes(subjectAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:container-registry::::serviceRole:Manager")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value("ACCOUNT_ID")
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceName")
.value("container-registry")
.operator("stringEquals")
.build();
PolicyResource policyResources = new PolicyResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.build();
CreatePolicyOptions options = new CreatePolicyOptions.Builder()
.type("access")
.subjects(Arrays.asList(policySubjects))
.roles(Arrays.asList(policyRoles))
.resources(Arrays.asList(policyResources))
.build();
Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();
System.out.println(policy);
const policySubjects = [
{
attributes: [
{
name: 'iam_id',
value: 'IBMid-123453user',
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:container-registry::::serviceRole:Manager',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: 'ACCOUNT_ID',
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceName',
value: 'container-registry',
operator: 'stringEquals',
};
const policyResources = [
{
attributes: [accountIdResourceAttribute, serviceNameResourceAttribute]
},
];
const params = {
type: 'access',
subjects: policySubjects,
roles: policyRoles,
resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
.then(res => {
examplePolicyId = res.result.id;
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
policy_subjects = PolicySubject(
attributes=[SubjectAttribute(name='iam_id', value='IBMid-123453user')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:container-registry::::serviceRole:Manager')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
name='serviceName', value='container-registry')
policy_resources = PolicyResource(
attributes=[account_id_resource_attribute,
service_name_resource_attribute])
policy = iam_policy_management_service.create_policy(
type='access',
subjects=[policy_subjects],
roles=[policy_roles],
resources=[policy_resources]
).get_result()
print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
Name: core.StringPtr("iam_id"),
Value: core.StringPtr("IBMid-123453user"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:container-registry::::serviceRole:Manager"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr("ACCOUNT_ID"),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceName"),
Value: core.StringPtr("container-registry"),
Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
Attributes: []iampolicymanagementv1.ResourceAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute}
}
options := iamPolicyManagementService.NewCreatePolicyOptions(
"access",
[]iampolicymanagementv1.PolicySubject{*policySubjects},
[]iampolicymanagementv1.PolicyRole{*policyRoles},
[]iampolicymanagementv1.PolicyResource{*policyResources},
)
policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policy, "", " ")
fmt.Println(string(b))
Affectation de l'accès à Container Registry à l'aide de Terraform
L'exemple suivant concerne l'affectation du rôle Manager pour Container Registry:
Utilisez container-registry comme nom de service.
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Manager"]
resources {
service = "container-registry"
}
}
Pour plus d'informations, voir ibm_iam_user_policy dans la documentation de Terraform.