Gestione dell'accesso IAM per Container Registry

Controlla l'accesso degli utenti a Container Registry utilizzando le politiche di accesso e i ruoli IAM per definire quali azioni gli utenti possono eseguire.

A ogni utente che accede al servizio IBM Cloud Container Registry dal proprio account deve essere assegnata una politica di accessoUn metodo per concedere l'accesso alle risorse dell'account a utenti, ID servizio e gruppi di accesso. Una politica di accesso include un oggetto, una destinazione e un ruolo. IAM con un ruolo IAM. Un utente può anche essere un membro di un gruppo di accesso con politiche di accesso IAM assegnate che concedono un ruolo IAM. Esamina i seguenti ruoli, azioni e altro ancora per determinare il modo migliore per assegnare l'accesso a Container Registry.

Per ulteriori informazioni su IAM, consultare la guida introduttiva su IBM Cloud Identity and Access Management.

Prova il tutorial Concessione dell'accesso alle risorse di Container Registry.

Politiche di accesso

La politica di accesso IAM che assegni agli utenti nel tuo account determina le azioni che un utente può eseguire nel contesto del servizio o dell'istanza specifica che selezioni. Le azioni consentite sono personalizzate e definite da Container Registry come operazioni di cui è consentita l'esecuzione sul servizio. Ogni azione è associata a un ruolo del servizio o della piattaforma IAM che puoi assegnare a un utente.

Le politiche consentono di concedere l'accesso a diversi livelli. Alcune opzioni prevedono i seguenti livelli di accesso:

  • Accesso al servizio nel tuo account
  • Accesso a una risorsa specifica all'interno del servizio
  • Accesso a tutti i servizi abilitati a IAM nel tuo account
  • Accesso alle risorse all'interno di un gruppo di risorse

Se si desidera limitare l'accesso degli utenti a uno o più spazi dei nomiUna raccolta di repository che memorizzano le immagini in un registro. Uno spazio dei nomi è associato a un account IBM Cloud , che può includere più spazi dei nomi. per un ID utilizzato per l'automazione, utilizzare un ID di servizio IAM. Per ulteriori informazioni sugli ID servizio, consulta Creazione e gestione degli ID servizio.

Puoi configurare le autorizzazioni in modo da poter configurare l'accesso alle risorse in un namespace al livello gruppo di risorseL'ambiente e i vincoli che vengono rispettati delle istanze della risorsa contenute. Un utente può essere associato a un gruppo di risorse per abilitare la collaborazione.. Per ulteriori informazioni, vedi Autorizzazioni utente per gestire gli spazi dei nomi.

Per ulteriori informazioni sull'attivazione delle politiche per Container Registry, consulta Definizione delle politiche di accesso IAM.

Assegna i ruoli

Dopo aver definito l'ambito della politica di accesso IAM, si assegna un ruolo.

Se un ruolo specifico e le sue azioni non si adattano al caso d'uso che si desidera affrontare, è possibile creare un ruolo personalizzato e scegliere le azioni da includere.

Esamina le tabelle seguenti che descrivono le azioni che ogni ruolo consente all'interno del servizio Container Registry.

  • I ruoli di gestione della piattaforma consentono agli utenti di eseguire operazioni sulle risorse del servizio a livello di piattaforma, ad esempio assegnare l'accesso al servizio agli utenti, creare o eliminare istanze e associare le istanze alle applicazioni.

  • I ruoli di accesso del servizio abilitano gli utenti ad accedere a Container Registry e alla capacità di richiamare l'API Container Registry.

Per ulteriori informazioni sulle azioni esatte associate a ciascun ruolo, vedi Ruoli e azioni IAM per Container Registry.

Per ulteriori informazioni sull'assegnazione dei ruoli utente nella console IBM Cloud, vedere Gestione dell'accesso alle risorse.

Limitazioni basate sul contesto

Container Registry supporta anche le restrizioni basate sul contesto. Puoi utilizzare le restrizioni basate sul contesto per definire e applicare le restrizioni dell'accesso per le risorse IBM Cloud basate sull'ubicazione di rete delle richieste di accesso. Queste restrizioni funzionano con le tradizionali politiche IAM, che sono basate sull'identità, per fornire un altro livello di protezione.

Per ulteriori informazioni, vedi Protezione delle risorse Container Registry con restrizioni basate sul contesto.

Ruoli di gestione della piattaforma

La seguente tabella illustra le azioni che sono associate ai ruoli di gestione della piattaforma. I ruoli di gestione della piattaforma consentono agli utenti di eseguire attività sulle risorse del servizio a livello di piattaforma, ad esempio l'assegnazione dell'accesso utente al servizio e la creazione o eliminazione degli ID servizio.

Ruoli e azioni degli utenti IAM
Ruoli di gestione della piattaforma Descrizione delle azioni Azioni di esempio
Visualizzatore Non supportato Non applicabile
Editor Non supportato Non applicabile
Operatore Non supportato Non applicabile
Amministratore Configurare l'accesso per gli altri utenti.

Applicare i pull secret ai cluster.

Per ulteriori informazioni sull'assegnazione dei ruoli utente nella console IBM Cloud, vedere Gestione dell'accesso alle risorse.

Per creare cluster in IBM Cloud Kubernetes Service dotati di secret pull per accedere alle immagini presenti in Container Registry, è necessario disporre del ruolo di amministratore. Per utilizzare il comando ibmcloud ks cluster pull-secret apply per configurare i segreti di pull per un cluster esistente, è necessario disporre del ruolo di amministratore. Per ulteriori informazioni, vedi Preparazione del tuo account per creare i cluster.

Ruoli di accesso al servizio

La seguente tabella descrive le azioni associate ai ruoli di accesso al servizio. I ruoli di accesso del servizio forniscono agli utenti l'accesso a Container Registry e la capacità di richiamare l'API Container Registry.

Ruoli e azioni di accesso al servizio IAM
Ruolo di accesso al servizio Descrizione delle azioni Azioni di esempio
Lettore Il ruolo Lettore può visualizzare le informazioni. Visualizza, ispeziona ed esegui il pull di immagini.

Visualizza e analizza gli spazi dei nomi.

Visualizza le quote.

Visualizza i report di vulnerabilità.

Visualizza le firme dell'immagine.

Visualizza le politiche di conservazione.

Visualizza il contenuto del cestino.

Visualizza il contenuto del manifest per un'immagine.

Elenca le politiche di esenzione per la sicurezza nel controllo vulnerabilità e i tipi di esenzioni per la sicurezza.

Scrittore Il ruolo Scrittore può modificare le informazioni. Inserisci, elimina e ripristina le immagini.

Visualizza le quote.

Firma le immagini.

Imposta ed esegui le politiche di conservazione.

Elimina tutte le immagini senza tag dal tuo account Container Registry.

Gestore Il ruolo Gestore può eseguire tutte le azioni. Visualizza, controlla, estrai, inserisci, elimina e ripristina le immagini.

Visualizza, aggiungi, analizza e rimuovi gli spazi dei nomi.

Assegna spazi dei nomi ai gruppi di risorse.

Visualizza e imposta le quote.

Visualizza i report di vulnerabilità.

Visualizza e crea le firme dell'immagine.

Esamina e modifica i piani dei prezzi.

Abilita l'applicazione delle politiche di accesso IAM.

Elenca, aggiungi e rimuovi le politiche di esenzione per i problemi di sicurezza del controllo vulnerabilità.

Elenca i tipi di esenzioni in materia di sicurezza.

Imposta ed esegui le politiche di conservazione.

Visualizza il contenuto del cestino.

Ripristina le immagini.

Visualizza il contenuto del manifest per un'immagine.

Impedisci o consenti i pull o i push di immagini sulle connessioni di rete pubbliche per il tuo account.

Controlla se l'utilizzo di connessioni pubbliche non è consentito per i push o i pull di immagini nel tuo account.

Elimina tutte le immagini senza tag dal tuo account Container Registry.

Per i seguenti comandi Container Registry, devi disporre di almeno uno dei ruoli specificati come mostrato nelle seguenti tabelle. Per creare una politica che consente l'accesso a Container Registry, devi creare una politica a cui si applicano i seguenti criteri.

  • Il nome del servizio è container-registry.
  • L'istanza del servizio è vuota.
  • La regione è la regione a cui si desidera concedere l'accesso o è vuota per concedere l'accesso a tutte le regioni.

Ruoli di accesso per la configurazione di Container Registry

Per concedere a un utente l'autorizzazione a configurare Container Registry nel proprio account, è necessario creare una politica che assegni uno o più dei ruoli riportati nella tabella seguente. Quando si crea la propria policy, non è consentito specificare resource type o resource. Le politiche per la configurazione di Container Registry non devono essere impostate a livello di gruppo di risorse.

Ad esempio, eseguire il seguente comando ibmcloud iam user-policy-create. Dove USER_EMAIL è l'indirizzo email dell'utente, REGION è la regione e ROLES è il ruolo o i ruoli che si desidera che l'utente abbia.

ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --region REGION --roles ROLES

La seguente tabella illustra le azioni che sono associate alle operazioni sul servizio e ai ruoli di accesso al servizio per la configurazione di Container Registry.

Azioni e operazioni di servizio per la configurazione di Container Registry
Azione Operazione sul servizio Ruolo
container-registry.auth.get ibmcloud cr private-only Controlla se l'utilizzo di connessioni pubbliche non è consentito per i push o i pull di immagini nel tuo account. Gestore
container-registry.auth.set ibmcloud cr iam-policies-enable Abilita l'applicazione delle politiche di accesso IAM.

ibmcloud cr private-only Impedisci o consenti i pull o i push di immagini sulle connessioni di rete pubbliche per il tuo account.

Gestore
container-registry.exemption.list ibmcloud cr exemption-list Elenca le politiche di esenzione relative a Vulnerability Advisor in materia di sicurezza.

ibmcloud cr exemption-types Elenca i tipi dei problemi di sicurezza che puoi esentare.

Lettore, Gestore
container-registry.exemption.manager ibmcloud cr exemption-add Creare una politica di esenzione " Vulnerability Advisor " per un problema di sicurezza.

ibmcloud cr exemption-rm Elimina una politica di esenzione nel controllo vulnerabilità per un problema di sicurezza.

Gestore
container-registry.namespace.create ibmcloud cr namespace-add Crea uno spazio dei nomi.

ibmcloud cr namespace-assign Assegna uno spazio dei nomi a un gruppo di risorse.

Gestore
container-registry.namespace.delete ibmcloud cr namespace-rm Rimuovi uno spazio dei nomi. Gestore
container-registry.plan.get ibmcloud cr plan Visualizza il tuo piano dei prezzi. Gestore
container-registry.plan.set ibmcloud cr plan-upgrade Esegui l'upgrade al piano standard. Gestore
container-registry.quota.get ibmcloud cr quota Visualizza le tue quote correnti per traffico e archiviazione e le informazioni di utilizzo rispetto a tali quote. Lettore, Scrittore e Gestore
container-registry.quota.set ibmcloud cr quota-set Modifica la quota specificata. Gestore
container-registry.settings.get ibmcloud cr platform-metrics Ottieni le impostazioni del servizio di registro per l'account di destinazione, ad esempio se le metriche della piattaforma sono abilitate. Lettore, Scrittore e Gestore
container-registry.settings.set ibmcloud cr platform-metrics Aggiornare le impostazioni del servizio di registro per l'account di destinazione, come ad esempio l'abilitazione delle metriche della piattaforma. Gestore

Ruoli di accesso per l'utilizzo di Container Registry

Per concedere a un utente l'autorizzazione ad accedere ai contenuti di " Container Registry " nel proprio account, è necessario creare una politica che assegni uno o più dei ruoli riportati nella tabella seguente. Quando si crea una policy, è possibile limitare l'accesso a uno spazio dei nomi specifico specificando il tipo di risorsa " namespace " e il nome dello spazio dei nomi come risorsa. Se non si specifica resource-type e resource, la politica concede l'accesso a tutte le risorse presenti nell'account. In alternativa, se il proprio namespace si trova all'interno di un gruppo di risorse, è possibile concedere l'autorizzazione utilizzando una politica di accesso IAM su quel gruppo di risorse.

Ad esempio, utilizza il seguente comando per creare una politica utente. Dove USER_EMAIL è l'indirizzo email dell'utente, REGION è la regione, ROLES è il ruolo o i ruoli che vuoi che l'utente abbia e NAMESPACE_NAME è il nome dello spazio dei nomi.

ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --region REGION --roles ROLES [--resource-type namespace --resource NAMESPACE_NAME]

La seguente tabella illustra le azioni che sono associate alle operazioni sul servizio e ai ruoli di accesso al servizio per l'utilizzo di Container Registry.

Azioni e operazioni di servizio per l'utilizzo di Container Registry
Azione Operazione sul servizio Ruolo
container-registry.image.delete docker trust revoke Elimina la firma di un'immagine del container.

ibmcloud cr image-prune-untagged Elimina tutte le immagini senza tag dal tuo account Container Registry.

ibmcloud cr image-rm Elimina una o più immagini dei container.

ibmcloud cr image-untag Rimuovi uno o più tag da ciascuna immagine container specificata in Container Registry.

ibmcloud cr retention-policy-set Imposta una politica per ripulire i tuoi spazi dei nomi, conservando solo le immagini dei container che soddisfano i tuoi criteri.

ibmcloud cr retention-run Ripulisci i tuoi spazi dei nomi conservando solo le immagini contenitore che soddisfano i tuoi criteri.

Writer, Manager

Per gestire ibmcloud cr retention-run e ibmcloud cr retention-policy-set è necessario disporre di Manager oppure sia di Reader che di Writer.

container-registry.image.inspect ibmcloud cr image-inspect Visualizza i dettagli relativi a una specifica immagine di container.

ibmcloud cr manifest-inspect Visualizza il contenuto del manifest per un'immagine.

Lettore, Gestore
container-registry.image.list ibmcloud cr image-digests Elenca tutte le tue immagini dei container, comprese quelle senza tag.

ibmcloud cr image-list Elenca le immagini dei container a cui hai assegnato dei tag.

ibmcloud cr image-prune-untagged Elimina tutte le immagini senza tag dal tuo account Container Registry.

ibmcloud cr trash-list Visualizza le immagini contenitore che si trovano nel cestino.

Lettore, Gestore
container-registry.image.pull docker pull Scarica un'immagine del container.

docker trust inspect Verificare la firma di un'immagine del container.

ibmcloud cr image-tag Crea un'immagine del container che faccia riferimento a un'immagine di origine.

ibmcloud cr vulnerability-assessment Visualizza un report di valutazione delle vulnerabilità per la tua immagine contenitore.

Lettore, Scrittore e Gestore
container-registry.image.push docker push Pubblica un'immagine del container.

docker trust sign Firmare un'immagine del container.

ibmcloud cr image-restore Ripristina un'immagine di container eliminata dal cestino.

ibmcloud cr image-tag Crea un'immagine del container che faccia riferimento a un'immagine sorgente.

Scrittore, Gestore
container-registry.namespace.list ibmcloud cr namespace-list Elenca i tuoi spazi dei nomi. Lettore, Gestore
container-registry.retention.analyze ibmcloud cr retention-policy-set Imposta una politica per ripulire i tuoi spazi dei nomi, conservando solo le immagini dei container che soddisfano i tuoi criteri.

ibmcloud cr retention-run Ripulisci i tuoi spazi dei nomi conservando solo le immagini contenitore che soddisfano i tuoi criteri.

Reader, Manager

Per eseguire ibmcloud cr retention-run e ibmcloud cr retention-policy-set è necessario disporre di Manager oppure sia di Reader che di Writer.

container-registry.retention.get Visualizza la politica di conservazione delle immagini per uno spazio dei nomi utilizzando l'API; vedi IBM Cloud Container Registry API. Lettore, Gestore
container-registry.retention.set ibmcloud cr retention-policy-set Imposta una politica per ripulire i tuoi spazi dei nomi conservando solo le immagini contenitore che soddisfano i tuoi criteri. Scrittore, Gestore
container-registry.retention.list ibmcloud cr retention-policy-list Elenca le politiche di conservazione delle immagini per il tuo account. Lettore, Gestore

Assegnazione dell'accesso a Container Registry nella console IBM Cloud

È possibile utilizzare una delle seguenti opzioni per assegnare l'accesso nella console IBM Cloud:

  • Politiche di accesso per utente. È possibile gestire i criteri di accesso per utente dalla pagina Gestione > Accesso (IAM) > Utenti della console IBM Cloud. Per ulteriori informazioni sulla procedura di assegnazione dell'accesso IAM, vedere Assegnazione dell'accesso alle risorse nella console.
  • Gruppi di accesso. I gruppi di accesso vengono utilizzati per semplificare la gestione degli accessi assegnando l'accesso a un gruppo una sola volta, quindi è possibile aggiungere o rimuovere gli utenti come richiesto dal gruppo per controllarne l'accesso. I gruppi di accesso e il loro accesso si gestiscono dalla pagina Gestione > Accesso (IAM) > Gruppi di accesso della console IBM Cloud. Per ulteriori informazioni, vedi Assegnazione dell'accesso a un gruppo nella console.

Assegnazione dell'accesso a Container Registry nell'interfaccia a riga di comando (CLI)

Per istruzioni dettagliate per l'assegnazione, la rimozione e la revisione dell'accesso, vedi Assegnazione dell'accesso alle risorse utilizzando la CLI. L'esempio seguente mostra un comando per assegnare il ruolo Manager per Container Registry a un utente, dove USER_EMAIL è l'indirizzo e-mail dell'utente.

Utilizzare container-registry per il nome servizio.

ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --roles Manager

Assegnazione dei diritti di accesso a Container Registry tramite l'API

Per istruzioni dettagliate per l'assegnazione, la rimozione e la revisione dell'accesso, vedi Assegnazione dell'accesso alle risorse utilizzando l'API o Crea una politica nella documentazione API. I CRN (role cloud resource names) nella tabella seguente vengono usati per assegnare l'accesso con l'API.

Valori dell'ID ruolo per l'uso dell'API
Nome ruolo CRN ruolo
Amministratore crn:v1:bluemix:public:container-registry::::serviceRole:Administrator
Lettore crn:v1:bluemix:public:container-registry::::serviceRole:Reader
Scrittore crn:v1:bluemix:public:container-registry::::serviceRole:Writer
Gestore crn:v1:bluemix:public:container-registry::::serviceRole:Manager

Il seguente esempio è per l'allocazione del ruolo Manager per Container Registry:

Utilizzare container-registry per il nome del servizio e fare riferimento alla tabella dei valori dell'ID ruolo per assicurarsi di utilizzare il valore corretto per il 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))

Assegnazione dell'accesso a Container Registry utilizzando Terraform

Il seguente esempio è per l'allocazione del ruolo Manager per Container Registry:

Utilizzare container-registry per il nome servizio.

resource "ibm_iam_user_policy" "policy" {
  ibm_id = "test@example.com"
  roles  = ["Manager"]
  resources {
    service = "container-registry"
  }
}

Per ulteriori informazioni, vedere ibm_iam_user_policy nella documentazione di Terraform.