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:
- Complete las instrucciones de Cómo empezar con IBM Cloud Container Registry.
- Asegúrese de tener la versión más reciente de la
container-registryComplemento de interfaz de línea comando (CLI) para la CLI IBM Cloud, consulte Actualización de lacontainer-registryComplemento CLI. - Asegúrate de tener acceso a dos cuentas de IBM Cloud que puedas utilizar para este tutorial, una para el usuario A y otra para el usuario B; cada una debe utilizar una dirección de correo electrónico única. Trabajará en su propia cuenta, Usuario A, e invitará a otro usuario, Usuario B, a utilizar su cuenta. Puede elegir crear una segunda cuenta de IBM Cloud o puede trabajar con un colega que tenga una cuenta de IBM Cloud.
- Asegúrate de que dispones de los permisos de acceso adecuados para añadir y eliminar espacios de nombresUna serie de repositorios que almacenan imágenes en un registro. Un espacio de nombres se asocia a una cuenta de IBM Cloud, que puede incluir varios espacios de nombres.; consulta Roles de acceso para configurar IBM Cloud Container Registry.
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.
-
Añada el Usuario B a la cuenta del Usuario A.
- 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. -
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.
- Inicie sesión como usuario B y tenga en cuenta la cuenta de usuario A ejecutando el mandato siguiente, donde
YOUR_ACCOUNT_IDes 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. - Inicie sesión como usuario B y tenga en cuenta la cuenta de usuario A ejecutando el mandato siguiente, donde
-
Otorgue al usuario B el rol de gestor para que el usuario B pueda configurar IBM Cloud Container Registry.
- 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 ``` -
Compruebe que el Usuario B ahora puede cambiar las cuotas en la cuenta del Usuario A.
- 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 ``` -
Limpie la operación.
- 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.
-
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_bynamespace_ccomo ejemplos.- 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 ``` -
Demuestra que el usuario B no puede ver nada.
- 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. -
Cree políticas para otorgar al Usuario B la capacidad de interactuar con los espacios de nombres con el mandato siguiente.
- 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} -
Envíe imágenes a
namespace_ay anamespace_b.- Envíe la imagen
hello-worldcon 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 ``` - Envíe la imagen
-
Compruebe que el Usuario B puede interactuar con
namespace_by connamespace_c, pero no connamespace_a.- 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`. -
Limpie:
- 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.
-
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.
- 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 ``` -
Utilice Docker para iniciar sesión con la clave de API de ID de servicio, donde
API_KEYes la clave de API e interactúa con el registro.- 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`. -
Limpie:
- 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.
-
Inicie una sesión en la cuenta del Usuario A con el mandato siguiente.
ibmcloud login -
Suprima
namespace_a,namespace_bynamespace_cejecutando los mandatos siguientes.ibmcloud cr namespace-rm namespace_aibmcloud cr namespace-rm namespace_bibmcloud cr namespace-rm namespace_c -
Elimine el Usuario B de su cuenta con el mandato siguiente.
ibmcloud account user-remove <user.b@example.com>