Conceder acceso a los recursos de Container Registry

Utilice esta guía de aprendizaje para averiguar cómo otorgar acceso a los recursos configurando IBM Cloud® Identity and Access Management (IAM) para IBM Cloud® Container Registry.

Todas las cuentas requieren políticas de acceso de IAM. Para configurar y gestionar políticas de acceso de IAM, consulte Definición de políticas de acceso de IAM.

Para obtener más información sobre cómo utilizar IAM para gestionar el acceso a los recursos, consulte Gestión del acceso a los recursos.

Antes de empezar

Antes de empezar, debe completar las siguientes tareas:

Autorizar a un usuario a configurar el registro

Añada un segundo usuario a su cuenta y otórguele la capacidad de configurar IBM Cloud Container Registry.

  1. Añada el Usuario B a la cuenta del Usuario A.

    1. Inicie una sesión en la cuenta del Usuario A con el mandato siguiente.
        ibmcloud login
        ```
    2. Invite al usuario B a acceder a la cuenta del usuario A ejecutando el siguiente mandato, donde `<user.b@example.com>` es la dirección de correo electrónico del usuario B.
    
    ```txt {: pre}
        ibmcloud account user-invite <user.b@example.com>
        ```
    3. Obtenga el ID de cuenta del Usuario A con el siguiente mandato.
    
    ```txt {: pre}
        ibmcloud target
        ```
        Anote el ID de cuenta que está entre paréntesis ( ) en la fila Cuenta.
    
    
  2. Demuestra que el usuario B puede acceder a la cuenta del usuario A, pero que todavía no puede realizar ninguna acción con IBM Cloud Container Registry.

    1. Inicie sesión como usuario B y tenga en cuenta la cuenta de usuario A ejecutando el mandato siguiente, donde YOUR_ACCOUNT_ID es el ID de cuenta de usuario A.
        ibmcloud login -c YOUR_ACCOUNT_ID
        ```
    2. Intente editar la cuota de registro en 4 GB de tráfico con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr quota-set --traffic 4000
        ```
        El mandato falla porque el Usuario B no tiene el acceso correcto.
    
    
  3. Otorgue al usuario B el rol de gestor para que el usuario B pueda configurar IBM Cloud Container Registry.

    1. Vuelva a iniciar la sesión como usted mismo, Usuario A, con el siguiente mandato.
        ibmcloud login
        ```
    2. Cree una política que otorgue el rol de Gestor al Usuario B con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud iam user-policy-create USER.B@EXAMPLE.COM --service-name container-registry --roles Manager
        ```
    
  4. Compruebe que el Usuario B ahora puede cambiar las cuotas en la cuenta del Usuario A.

    1. Inicie una sesión como Usuario B y elija como destino la cuenta del Usuario A con el mandato siguiente.
        ibmcloud login -c YOUR_ACCOUNT_ID
        ```
    2. Intente editar la cuota de registro en 4 GB de tráfico con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr quota-set --traffic 4000
        ```
        Funciona porque el Usuario B tiene el tipo de acceso correcto.
    
    3. Ahora cambie la cuota de nuevo con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr quota-set --traffic 5120
        ```
    
  5. Limpie la operación.

    1. Vuelva a iniciar la sesión como usted mismo, Usuario A, con el siguiente mandato.
        ibmcloud login
        ```
    2. Obtenga una lista de las políticas para el Usuario B, busque la política que ha creado con el siguiente mandato y anote el ID.
    
    ```txt {: pre}
        ibmcloud iam user-policies <user.b@example.com>
        ```
    3. Suprima la política ejecutando el mandato siguiente, donde `POLICY_ID` es su ID de política.
    
    ```txt {: pre}
        ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID
        ```
    

Autorizar a un usuario a acceder a espacios de nombres específicos

Cree algunos espacios de nombres con imágenes de ejemplo y otorgará acceso a los mismos. Creará políticas para otorgar distintos roles a cada espacio de nombres y mostrará el efecto.

  1. Cree tres nuevos espacios de nombres en la cuenta del Usuario A. Estos espacios de nombres deben ser exclusivos en la región, de modo que utilice sus propios nombres de espacios de nombres; en esta guía de aprendizaje se utiliza namespace_a, namespace_b y namespace_c como ejemplos.

    1. Inicie una sesión como Usuario A con el mandato siguiente.
        ibmcloud login
        ```
    2. Cree `namespace_a` ejecutando el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr namespace-add namespace_a
        ```
        El espacio de nombres debe ser exclusivo en todas las cuentas de IBM Cloud de la misma región. Los espacios de nombres deben tener entre 4 y 30 caracteres y solo deben contener letras en minúsculas, números, guiones (-) y guiones bajos (_). Los espacios de nombres deben empezar y finalizar con una letra o un número.
        {: requirement}
    
        Si tiene un problema al intentar añadir un espacio de nombres, consulte [¿Por qué no puedo añadir un espacio de nombres?](/docs/Registry?topic=Registry-troubleshoot-add-namespace) para obtener ayuda.
        {: tip}
    
    3. Cree `namespace_b` ejecutando el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr namespace-add namespace_b
        ```
    4. Cree `namespace_c` ejecutando el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr namespace-add namespace_c
        ```
    
  2. Demuestra que el usuario B no puede ver nada.

    1. Inicie una sesión como Usuario B y elija como destino la cuenta del Usuario A con el mandato siguiente.
        ibmcloud login -c YOUR_ACCOUNT_ID
        ```
    2. Intente obtener una lista de espacios de nombres como Usuario B con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr namespaces
        ```
        Devuelve una lista vacía porque el Usuario B no tiene acceso a ninguno de los espacios de nombres.
    
    
  3. Cree políticas para otorgar al Usuario B la capacidad de interactuar con los espacios de nombres con el mandato siguiente.

    1. Inicie una sesión en la cuenta del Usuario A con el mandato siguiente.
        ibmcloud login
        ```
    2. Compruebe que se listan al menos tres espacios de nombres con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr namespaces
        ```
        Se muestran los tres espacios de nombres que ha creado en esta guía de aprendizaje (`namespace_a`, `namespace_b` y `namespace_c`). Si no ves estos espacios de nombres, repite las instrucciones para volver a crearlos.
    
    3. Cree una política que otorgue el rol Lector en `namespace_b` al usuario B ejecutando el mandato siguiente, donde `CLOUD_REGION` es el nombre de la región de IBM Cloud, por ejemplo `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
        ```
        Para ver los nombres de las regiones de IBM Cloud, ejecute el mandato [`ibmcloud regions`](/docs/cli?topic=cli-ibmcloud_cli#ibmcloud_regions).
        {: tip}
    
    4. Cree una segunda política que otorgue los roles Lector y Escritor sobre `namespace_c` al Usuario B con el mandato siguiente.
    
    ```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
        ```
        Este mandato añade dos roles al mismo recurso en la misma política.
        {: note}
    
    
  4. Envíe imágenes a namespace_a y a namespace_b.

    1. Envíe la imagen hello-world con el siguiente mandato.
        docker pull hello-world
        ```
    2. Etiquete la imagen en `namespace_a` ejecutando el mandato siguiente, donde `REGISTRY_REGION` es el nombre de la [región de IBM Cloud Container Registry](/docs/Registry?topic=Registry-registry_overview#registry_regions), por ejemplo `us-south`.
    
    ```txt {: pre}
        docker tag hello-world REGISTRY_REGION.icr.io/namespace_a/hello-world
        ```
    3. Etiquete la imagen para `namespace_b` con el siguiente mandato.
    
    ```txt {: pre}
        docker tag hello-world REGISTRY_REGION.icr.io/namespace_b/hello-world
        ```
    4. Inicie sesión en IBM Cloud Container Registry ejecutando el mandato [`ibmcloud cr login`](/docs/Registry?topic=Registry-containerregcli#bx_cr_login).
    
    ```txt {: pre}
        ibmcloud cr login
        ```
        IBM Cloud Container Registry Es compatible con Docker y otros clientes. Para iniciar sesión utilizando otros clientes, consulte [Acceso interactivo a los espacios de nombres](/docs/Registry?topic=Registry-registry_access#registry_access_interactive).
        {: tip}
    
        Si tiene un problema al intentar iniciar sesión, consulte [¿Por qué no puedo iniciar sesión en Container Registry?](/docs/Registry?topic=Registry-troubleshoot-login) para obtener ayuda.
        {: tip}
    
    5. Envíe la imagen a `namespace_a` con el siguiente mandato.
    
    ```txt {: pre}
        docker push REGISTRY_REGION.icr.io/namespace_a/hello-world
        ```
    6. Envíe la imagen a `namespace_b` con el siguiente mandato.
    
    ```txt {: pre}
        docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
        ```
    
  5. Compruebe que el Usuario B puede interactuar con namespace_b y con namespace_c, pero no con namespace_a.

    1. Inicie una sesión como Usuario B con el mandato siguiente.
        ibmcloud login -c YOUR_ACCOUNT_ID
        ```
    2. Muestre que el Usuario B puede ver `namespace_b` y `namespace_c`, pero no `namespace_a` porque el Usuario B no tiene acceso a `namespace_a`, con el siguiente mandato.
    
    ```txt {: pre}
        ibmcloud cr namespaces
        ```
    3. Obtenga una lista de sus imágenes con el siguiente mandato.
    
    ```txt {: pre}
        ibmcloud cr images
        ```
        La imagen de `namespace_b` se muestra en la lista, pero la imagen de `namespace_a` no lo hace, porque el Usuario B no tiene acceso a `namespace_a`.
    
    4. Inicie sesión en IBM Cloud Container Registry ejecutando el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud cr login
        ```
        IBM Cloud Container Registry Es compatible con Docker y otros clientes. Para iniciar sesión utilizando otros clientes, consulte [Acceso interactivo a los espacios de nombres](/docs/Registry?topic=Registry-registry_access#registry_access_interactive).
        {: tip}
    
    5. Extraiga la imagen con el siguiente mandato.
    
    ```txt {: pre}
        docker pull REGISTRY_REGION.icr.io/namespace_b/hello-world
        ```
    6. Envíe la imagen a `namespace_b` con el siguiente mandato.
    
    ```txt {: pre}
        docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
        ```
        Este mandato falla porque el Usuario B no tiene el rol de Escritor en `namespace_b`.
    
    7. Etiquete la imagen con `namespace_c` con el siguiente mandato.
    
    ```txt {: pre}
        docker tag hello-world REGISTRY_REGION.icr.io/namespace_c/hello-world
        ```
    8. Envíe la imagen a `namespace_c` con el siguiente mandato.
    
    ```txt {: pre}
        docker push REGISTRY_REGION.icr.io/namespace_c/hello-world
        ```
        El mandato funciona porque el Usuario B tiene el rol Escritor en `namespace_c`.
    
    9. Extraiga de `namespace_c` con el siguiente mandato.
    
    ```txt {: pre}
        docker pull REGISTRY_REGION.icr.io/namespace_c/hello-world
        ```
        El mandato funciona porque el Usuario B tiene el rol Lector en `namespace_c`.
    
    
  6. Limpie:

    1. Vuelva a iniciar una sesión en la cuenta del Usuario A con el mandato siguiente.
        ibmcloud login
        ```
    2. Obtenga una lista de las políticas para el Usuario B con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud iam user-policies <user.b@example.com>
        ```
        Localice las políticas que ha creado y anote los ID de política.
    
    3. Suprima las políticas que ha creado ejecutando el mandato siguiente, donde `POLICY_ID` es el ID de política.
    
    ```txt {: pre}
        ibmcloud iam user-policy-delete <user.b@example.com> POLICY_ID
        ```
    

Crear un ID de servicio y otorgar acceso a un recurso

Configure un ID de servicio y otórguelo acceso a su espacio de nombres de IBM Cloud Container Registry.

  1. Configura un ID de servicio con acceso a IBM Cloud Container Registry y crea una clave APICódigo único que se pasa a una API para identificar la aplicación o el usuario que llama y para enviar datos de seguimiento. Se utiliza una clave de API para realizar un seguimiento y controlar cómo se utiliza la API, por ejemplo, para evitar el uso malicioso o el abuso de la API. para él.

    1. Inicie una sesión en la cuenta del Usuario A con el mandato siguiente.
        ibmcloud login
        ```
    2. Cree un ID de servicio llamado `cr-roles-tutorial` con la descripción `"Created during the access control tutorial for Container Registry"` con el siguiente mandato.
    
    ```txt {: pre}
        ibmcloud iam service-id-create cr-roles-tutorial --description "Created during the access control tutorial for Container Registry"
        ```
    3. Cree una política de servicio para el ID de servicio que otorgue el rol de Lector sobre `namespace_a` con el siguiente mandato.
    
    ```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. Cree una segunda política de servicio que otorgue el rol de Escritor sobre `namespace_b` con el mandato siguiente.
    
    ```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. Cree una clave de API para el ID de servicio con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud iam service-api-key-create cr-roles-tutorial-apikey cr-roles-tutorial
        ```
    
  2. Utilice Docker para iniciar sesión con la clave de API de ID de servicio, donde API_KEY es la clave de API e interactúa con el registro.

    1. Inicie sesión en IBM Cloud Container Registry ejecutando el mandato siguiente.
        docker login -u iamapikey -p API_KEY REGISTRY_REGION.icr.io
        ```
        IBM Cloud Container Registry Es compatible con Docker y otros clientes. Para iniciar sesión utilizando otros clientes, consulte [Acceso a los espacios de nombres en automatización](/docs/Registry?topic=Registry-registry_access#registry_access_automating).
        {: tip}
    
    2. Extraiga la imagen con el siguiente mandato.
    
    ```txt {: pre}
        docker pull REGISTRY_REGION.icr.io/namespace_a/hello-world
        ```
    3. Envíe la imagen a `namespace_a` con el siguiente mandato.
    
    ```txt {: pre}
        docker push REGISTRY_REGION.icr.io/namespace_a/hello-world
        ```
        Este mandato no funciona porque el usuario no tiene el rol de Escritor en `namespace_a`.
    
    4. Envíe la imagen a `namespace_b` con el siguiente mandato.
    
    ```txt {: pre}
        docker push REGISTRY_REGION.icr.io/namespace_b/hello-world
        ```
        Este mandato funciona porque el usuario tiene el rol Escritor en `namespace_b`.
    
    
  3. Limpie:

    1. Vuelva a iniciar sesión en IBM Cloud Container Registry como usuario A.
        ibmcloud cr login
        ```
        IBM Cloud Container Registry Es compatible con Docker y otros clientes. Para iniciar sesión utilizando otros clientes, consulte [Acceso interactivo a los espacios de nombres](/docs/Registry?topic=Registry-registry_access#registry_access_interactive).
        {: tip}
    
    2. Obtenga una lista de sus políticas de servicio con el siguiente mandato.
    
    ```txt {: pre}
        ibmcloud iam service-policies cr-roles-tutorial
        ```
        Anote los ID de política.
    
    3. Suprima las políticas de servicio ejecutando el mandato siguiente para cada política.
    
    ```txt {: pre}
        ibmcloud iam service-policy-delete cr-roles-tutorial POLICY_ID
        ```
    4. Suprima el ID de servicio con el mandato siguiente.
    
    ```txt {: pre}
        ibmcloud iam service-id-delete cr-roles-tutorial
        ```
    

Limpieza de su cuenta

Elimina los recursos que has creado en las secciones anteriores para que tu cuenta vuelva a estar como estaba al inicio de este tutorial.

  1. Inicie una sesión en la cuenta del Usuario A con el mandato siguiente.

    ibmcloud login
    
  2. Suprima namespace_a, namespace_b y namespace_c ejecutando los mandatos siguientes.

    ibmcloud cr namespace-rm namespace_a
    
    ibmcloud cr namespace-rm namespace_b
    
    ibmcloud cr namespace-rm namespace_c
    
  3. Elimine el Usuario B de su cuenta con el mandato siguiente.

    ibmcloud account user-remove <user.b@example.com>