Gestión del acceso de IAM para Container Registry
Controle el acceso de los usuarios a Container Registry utilizando políticas de acceso y roles de IAM para definir qué acciones pueden realizar los usuarios.
A cada usuario que acceda al servicio IBM Cloud Container Registry en su cuenta se le debe asignar una política de accesoMétodo para asignar acceso a los recursos de una cuenta a los usuarios, ID de servicio y grupos de acceso. Una política de acceso incluye un asunto, un destino y un rol. de IAM con un rol de IAM. Un usuario también puede ser miembro de un grupo de acceso al que se le hayan asignado políticas de acceso de IAM que le otorguen un rol de IAM. Revise los siguientes roles, acciones y más para ayudar a determinar la mejor manera de asignar acceso a Container Registry.
Para obtener más información sobre IAM, consulta Primeros pasos con IBM Cloud Identity and Access Management.
Prueba el tutorial « Conceder acceso a los recursos de Container Registry ».
Políticas de acceso
La política de acceso de IAM que asigna a los usuarios de la cuenta determina las acciones que un usuario puede realizar en el contexto del servicio o instancia específica que seleccione. Las acciones permitidas las personaliza y las define Container Registry como operaciones que se permiten llevar a cabo en el servicio. Cada acción se correlaciona con un rol de plataforma o servicio de IAM que puede asignar a un usuario.
Las políticas permiten que se otorgue acceso en distintos niveles. Las opciones incluyen los niveles de acceso siguientes:
- Acceso al servicio en su cuenta
- Acceso a un recurso específico dentro del servicio
- Acceso a todos los servicios habilitados para IAM en su cuenta
- Acceso a recursos dentro de un grupo de recursos
Si desea restringir el acceso de los usuarios a uno o varios 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. para una identificación que esté utilizando para la automatización, utilice una identificación de servicio de IAM. Para obtener más información sobre los ID de servicio, consulte Creación y trabajo con los ID de servicio.
Puede establecer permisos para poder configurar el acceso a los recursos dentro de un espacio de nombres a nivel de grupo de recursosEntorno y restricciones a los que se ajustan las instancias de recursos contenidas. Se puede asociar un usuario con un grupo de recursos para permitir la colaboración.. Para obtener más información, consulte Permisos de usuario para trabajar con espacios de nombres.
Para obtener más información sobre la habilitación de políticas para Container Registry, consulte Definición de políticas de acceso de IAM.
Asignar roles
Después de definir el ámbito de la política de acceso IAM, debe asignar un rol.
Si un rol específico y sus acciones no se ajustan al caso de uso que deseas abordar, puedes crear un rol personalizado y seleccionar las acciones que deseas incluir.
Revise las tablas siguientes que describen las acciones que cada rol permite dentro del servicio de Container Registry.
-
Las funciones de gestión de la plataforma permiten a los usuarios realizar tareas en los recursos del servicio a nivel de plataforma; por ejemplo, asignar acceso de usuario al servicio, crear o eliminar instancias y vincular instancias a aplicaciones.
-
Los roles de acceso de servicio permiten a los usuarios acceder a Container Registry y a la capacidad de llamar a la API Container Registry.
Para obtener más información sobre las acciones exactas que se correlacionan con cada rol, consulte Roles y acciones de IAM para Container Registry.
Para obtener más información sobre cómo asignar roles de usuario en la consola de IBM Cloud, consulta Gestión del acceso a los recursos.
Restricciones basadas en contexto
Container Registry también admite restricciones basadas en el contexto. Puede utilizar restricciones basadas en el contexto para definir y aplicar restricciones de acceso a los recursos de IBM Cloud en función de la ubicación de red de las solicitudes de acceso. Estas restricciones se combinan con las políticas tradicionales de IAM, que se basan en la identidad, para proporcionar otra capa de protección.
Para obtener más información, consulte Protección de los recursos de Container Registry con restricciones basadas en el contexto.
Roles de gestión de plataforma
En la tabla siguiente se muestran acciones que se correlacionan con los roles de gestión de la plataforma. Los roles de gestión de la plataforma permiten a los usuarios realizar tareas sobre los recursos de servicio a nivel de plataforma, por ejemplo asignar acceso de usuario para el servicio y crear o suprimir ID de servicio.
| Roles de gestión de plataforma | Descripción de acciones | Acciones de ejemplo |
|---|---|---|
| Visor | No soportado | No aplicable |
| Editor | No soportado | No aplicable |
| Operador | No soportado | No aplicable |
| Administrador | Configurar el acceso para otros usuarios.
Aplicar secretos de extracción a clústeres. |
Para obtener más información sobre cómo asignar roles de usuario en la consola de IBM Cloud, consulta Gestión del acceso a los recursos.
Para crear clústeres en IBM Cloud Kubernetes Service que tengan secretos de extracción para acceder a imágenes en Container Registry, debe tener el rol de administrador. Para utilizar el mandato |
Roles de acceso al servicio
En las tablas siguientes se detallan las acciones que se correlacionan con los roles de acceso a servicios. Los roles de acceso de servicio proporcionan a los usuarios acceso a Container Registry, así como la capacidad de llamar a la API de Container Registry.
| Rol de acceso de servicio | Descripción de acciones | Acciones de ejemplo |
|---|---|---|
| Lector | El rol Lector puede ver información. | Ver, inspeccionar y extraer imágenes.
Ver y analizar espacios de nombres. Ver cuotas. Ver informes de vulnerabilidad. Ver firmas de imágenes. Ver políticas de retención. Ver el contenido de la papelera. Ver el contenido del manifiesto correspondiente a una imagen. Listar políticas de exención de Vulnerability Advisor y tipos de exenciones de seguridad. |
| Writer | El rol Escritor puede editar información. | Envíe, suprima y restaure imágenes.
Ver cuotas. Firmar imágenes. Establecer y ejecutar políticas de retención. Suprima todas las imágenes no etiquetadas en la cuenta de Container Registry. |
| Gestor | El rol Gestor puede realizar todas las acciones. | Vea, inspeccione, extraiga, envíe, suprima y restaure imágenes.
Ver, añadir, analizar y eliminar espacios de nombres. Asignar espacios de nombres a grupos de recursos. Ver y establecer cuotas. Ver informes de vulnerabilidad. Ver y crear firmas de imágenes. Revisar y cambiar planes de precios. Habilitar la aplicación de políticas de acceso de IAM. Listar, añadir y eliminar políticas de exención de problemas de seguridad de Vulnerability Advisor. Enumera los tipos de exenciones de seguridad. Establecer y ejecutar políticas de retención. Ver el contenido de la papelera. Restaurar imágenes. Ver el contenido del manifiesto correspondiente a una imagen. Impedir o permitir envíos o extracciones de imágenes sobre conexiones de red pública para la cuenta. Comprobar si se impide el uso de conexiones públicas para envíos o extracciones de imágenes en su cuenta. Suprima todas las imágenes no etiquetadas en la cuenta de Container Registry. |
Para los siguientes mandatos de Container Registry, debe tener al menos uno de los roles especificados que se muestran en las tablas siguientes. Para crear una política que permita el acceso a Container Registry, debe crear una política en la que se apliquen los siguientes criterios.
- El nombre del servicio es
container-registry. - La instancia de servicio está vacía.
- La región es la región a la que desea otorgar acceso o está vacía para otorgar acceso a todas las regiones.
Roles de acceso para configurar Container Registry
Para otorgar a un usuario permiso para configurar Container Registry en su cuenta, debe crear una política que otorgue uno o más de los roles en la tabla siguiente. Cuando cree la política, no debe especificar un resource type ni un resource. Las políticas para configurar Container Registry no deben establecerse a un nivel de grupo de recursos.
Por ejemplo, ejecute el siguiente mandato ibmcloud iam user-policy-create. Donde USER_EMAIL es la dirección de correo electrónico del usuario, REGION es la región y ROLES es el rol o roles
que desea que tenga el usuario.
ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --region REGION --roles ROLES
En la tabla siguiente se muestran acciones que se correlacionan con operaciones en el servicio y con roles de acceso al servicio para configurar Container Registry.
| Acción | Operación en servicio | Rol |
|---|---|---|
container-registry.auth.get |
ibmcloud cr private-only Comprobar si se impide el uso de conexiones públicas para envíos o extracciones de imágenes en su cuenta. |
Gestor |
container-registry.auth.set |
ibmcloud cr iam-policies-enable Habilitar la aplicación de políticas de acceso de IAM.
|
Gestor |
container-registry.exemption.list |
ibmcloud cr exemption-list Lista las políticas de exención del Asesor de vulnerabilidades para problemas de seguridad.
|
Lector, Gestor |
container-registry.exemption.manager |
ibmcloud cr exemption-add Crear una política de exención del Asesor de vulnerabilidades para un problema de seguridad.
|
Gestor |
container-registry.namespace.create |
ibmcloud cr namespace-add Crear un espacio de nombres.
|
Gestor |
container-registry.namespace.delete |
ibmcloud cr namespace-rm Eliminar un espacio de nombres. |
Gestor |
container-registry.plan.get |
ibmcloud cr plan Visualizar su plan de precios. |
Gestor |
container-registry.plan.set |
ibmcloud cr plan-upgrade Actualizar al plan estándar. |
Gestor |
container-registry.quota.get |
ibmcloud cr quota Visualizar las cuotas actuales para tráfico y almacenamiento e información de uso relacionada con las mismas. |
Lector, Escritor, Gestor |
container-registry.quota.set |
ibmcloud cr quota-set Modificar la cuota especificada. |
Gestor |
container-registry.settings.get |
ibmcloud cr platform-metrics Obtener valores de servicio de registro para la cuenta de destino, por ejemplo, si las métricas de plataforma
están habilitadas. |
Lector, Escritor, Gestor |
container-registry.settings.set |
ibmcloud cr platform-metrics Actualizar valores de servicio de registro para la cuenta de destino, por ejemplo, habilitar métricas de plataforma. |
Gestor |
Roles de acceso para utilizar Container Registry
Para otorgar a un usuario permiso para acceder al contenido de Container Registry en su cuenta, debe crear una política que otorgue uno o varios de los roles de la tabla siguiente. Cuando cree la política, puede restringir el acceso a un espacio
de nombres específico especificando el tipo de recurso namespace y el nombre del espacio de nombres como recurso. Si no especifica un resource-type y un resource, la política otorga acceso a todos los
recursos de la cuenta. De forma alternativa, si el espacio de nombres está dentro de un grupo de recursos, se puede otorgar permiso utilizando una política de acceso IAM en dicho grupo de recursos.
Por ejemplo, utilice el mandato siguiente para crear una política de usuario. Donde USER_EMAIL es la dirección de correo electrónico del usuario, REGION es la región, ROLES es el rol o los roles que desea
que tenga el usuario y NAMESPACE_NAME es el nombre del espacio de nombres.
ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --region REGION --roles ROLES [--resource-type namespace --resource NAMESPACE_NAME]
En la tabla siguiente se muestran acciones que se correlacionan con operaciones en el servicio y con roles de acceso al servicio para utilizar Container Registry.
| Acción | Operación en servicio | Rol |
|---|---|---|
container-registry.image.delete |
docker trust revoke Suprimir la firma de una imagen de contenedor.
|
Transcriptor, Gestor
Para ejecutar |
container-registry.image.inspect |
ibmcloud cr image-inspect Visualizar detalles sobre una imagen de contenedor específica.
|
Lector, Gestor |
container-registry.image.list |
ibmcloud cr image-digests Listar todas las imágenes de contenedor, incluidas las imágenes sin etiquetar.
|
Lector, Gestor |
container-registry.image.pull |
docker pull Extraer una imagen de contenedor.
|
Lector, Escritor, Gestor |
container-registry.image.push |
docker push Enviar una imagen de contenedor.
|
Escritor, Gestor |
container-registry.namespace.list |
ibmcloud cr namespace-list Obtener una lista de los espacios de nombres. |
Lector, Gestor |
container-registry.retention.analyze |
ibmcloud cr retention-policy-set Establecer una política para limpiar los espacios de nombres conservando sólo las imágenes de contenedor
que cumplan los criterios.
|
Lector, Gestor
Para ejecutar |
container-registry.retention.get |
Vea la política de retención de imágenes para un espacio de nombres utilizando la API, consulte API de IBM Cloud Container Registry. | Lector, Gestor |
container-registry.retention.set |
ibmcloud cr retention-policy-set Definir una política para limpiar los espacios de nombres conservando solo las imágenes del contenedor
que cumplen con los criterios. |
Escritor, Gestor |
container-registry.retention.list |
ibmcloud cr retention-policy-list Generar una lista de las políticas de retención de imágenes para su cuenta. |
Lector, Gestor |
Asignación de acceso a Container Registry en la consola de IBM Cloud
Puede utilizar una de las siguientes opciones para asignar permisos de acceso en la consola de IBM Cloud:
- Políticas de acceso por usuario. Puede gestionar las políticas de acceso por usuario desde la página Gestionar > Acceso (IAM) > Usuarios de la consola de IBM Cloud. Para obtener más información sobre los pasos para asignar acceso IAM, consulte Asignación de acceso a recursos en la consola.
- Grupos de acceso. Los grupos de acceso se utilizan para agilizar la gestión de accesos mediante la asignación de acceso a un grupo una vez y, a continuación, puede añadir o eliminar usuarios según sea necesario del grupo para controlar su acceso. Los grupos de acceso y sus permisos se gestionan desde la página Gestionar > Acceso (IAM) > Grupos de acceso de la consola de IBM Cloud. Para obtener más información, consulte Asignar acceso a un grupo en la consola.
Asignar acceso a Container Registry en la interfaz de línea comando (CLI)
Para obtener instrucciones detalladas para asignar, eliminar y revisar el acceso, consulte Asignación de acceso a recursos utilizando la CLI. El
siguiente ejemplo muestra un comando para asignar el rol Manager para Container Registry a un usuario, donde USER_EMAIL es la dirección de correo electrónico del usuario.
Utilice container-registry para el nombre de servicio.
ibmcloud iam user-policy-create USER_EMAIL --service-name container-registry --roles Manager
Asignación de acceso a Container Registry mediante la API
Para obtener instrucciones detalladas para asignar, eliminar y revisar el acceso, consulte Asignación de acceso a recursos utilizando la API o Crear una política en los documentos de la API. Los nombres de recurso de nube de rol (CRN) de la tabla siguiente se utilizan para asignar acceso con la API.
| Nombre de rol | CRN de rol |
|---|---|
| Administrador | crn:v1:bluemix:public:container-registry::::serviceRole:Administrator |
| Lector | crn:v1:bluemix:public:container-registry::::serviceRole:Reader |
| Writer | crn:v1:bluemix:public:container-registry::::serviceRole:Writer |
| Gestor | crn:v1:bluemix:public:container-registry::::serviceRole:Manager |
El ejemplo siguiente es para asignar el rol Manager para Container Registry:
Utilice para container-registry el nombre del servicio y consulte la tabla de valores de ID de rol para asegurarse de que está utilizando el valor correcto para el 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))
Asignación de acceso a Container Registry utilizando Terraform
El ejemplo siguiente es para asignar el rol Manager para Container Registry:
Utilice container-registry para el nombre de servicio.
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Manager"]
resources {
service = "container-registry"
}
}
Para más información, consulte ibm_iam_user_policy en la documentación de Terraform.