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 d'utilisateur IAM et actions
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 ibmcloud ks cluster pull-secret apply pour configurer les secrets d'extraction d'un cluster existant, vous devez avoir le rôle Administrateur. Pour plus d'informations, voir Préparation de votre compte à la création de clusters.

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ôles et actions d'accès aux services IAM
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.

Actions et opérations de service pour configurer 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.

ibmcloud cr private-only Empêcher ou autoriser des pulls ou des insertions sur des connexions réseau publiques pour votre compte.

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é.

ibmcloud cr exemption-types Répertorier les types de problèmes de sécurité que vous pouvez exempter.

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é.

ibmcloud cr exemption-rm Supprimer une règle d'exemption Vulnerability Advisor pour un problème de sécurité.

Responsable
container-registry.namespace.create ibmcloud cr namespace-add Créez un espace de nom.

ibmcloud cr namespace-assign Affecter un espace de nom à un groupe de ressources.

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.

Actions et opérations de service pour l'utilisation de 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.

ibmcloud cr image-prune-untagged Supprimez toutes les images non balisées dans votre compte Container Registry.

ibmcloud cr image-rm Supprimez une ou plusieurs images de conteneur.

ibmcloud cr image-untag Supprimer une balise ou des balises de chaque image de conteneur spécifiée dans Container Registry.

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.

ibmcloud cr retention-run Nettoyer vos espaces de nom en conservant uniquement les images de conteneur qui répondent à vos critères.

Écrivain, gestionnaire

Pour exécuter ibmcloud cr retention-run et ibmcloud cr retention-policy-set vous devez avoir Manager, ou à la fois Reader et Writer.

container-registry.image.inspect ibmcloud cr image-inspect Affichez les détails d'une image de conteneur spécifique.

ibmcloud cr manifest-inspect Afficher le contenu du manifeste pour une image.

Lecteur, Responsable
container-registry.image.list ibmcloud cr image-digests Répertoriez toutes les images de conteneur, y compris les images non marquées.

ibmcloud cr image-list Répertoriez vos images de conteneur marquées.

ibmcloud cr image-prune-untagged Supprimez toutes les images non balisées dans votre compte Container Registry.

ibmcloud cr trash-list Afficher les images de conteneur qui se trouvent dans la corbeille.

Lecteur, Responsable
container-registry.image.pull docker pull Extraire une image de conteneur.

docker trust inspect Inspecter la signature d'une image de conteneur.

ibmcloud cr image-tag Créez une image de conteneur faisant référence à une image source.

ibmcloud cr vulnerability-assessment Afficher un rapport d'évaluation des vulnérabilités pour votre image de conteneur.

Lecteur, rédacteur, gestionnaire
container-registry.image.push docker push Envoyer par commande push une image de conteneur.

docker trust sign Signer une image de conteneur.

ibmcloud cr image-restore Restaurez une image de conteneur supprimée à partir de la corbeille.

ibmcloud cr image-tag Créez une image de conteneur faisant référence à une image source.

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.

ibmcloud cr retention-run Nettoyer vos espaces de nom en conservant uniquement les images de conteneur qui répondent à vos critères.

Lecteur, gestionnaire

Pour exécuter ibmcloud cr retention-run et ibmcloud cr retention-policy-set, vous devez disposer du gestionnaire, ou du lecteur et de l'éditeur.

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.

Valeurs de l'ID de rôle pour l'utilisation de 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.