Otorgar a los usuarios acceso a los recursos de etiqueta y a los ID de servicio
Como propietario de la cuenta, es posible que desee delegar parte de la responsabilidad de etiquetar los recursos y los ID de servicio. Para que los usuarios puedan adjuntar etiquetas a un ID de recurso o servicio, debe concederles el acceso adecuado. Utilice Políticas de acceso de Identity and Access Management (IAM) de IBM Cloud® para asignar a los usuarios acceso a recursos en un grupo de recursos.
Las etiquetas son visibles en toda la cuenta y pueden replicarse en regiones geográficas. Puesto que las etiquetas no son información regulada, evite crear etiquetas que utilicen información personal, como su nombre, dirección, número de teléfono, dirección de correo electrónico u otra información de identificación o de propiedad.
Permisos de etiquetado
Cualquier usuario de una cuenta puede ver etiquetas. Cuando se etiqueta un recurso, todos los usuarios que tienen acceso a read pueden ver la etiqueta. Para adjuntar o quitar una etiqueta en un ID de recurso o servicio, se necesitan
ciertos roles o permisos de acceso dependiendo del tipo de recurso y del tipo de etiqueta. Consulte la siguiente tabla para ver el rol necesario para cada tipo de recurso.
| Tipo de recurso | Rol |
|---|---|
| Habilitado para IAM | Para conectar o desconectar etiquetas de usuario, editor o administrador en el recurso Para conectar o desconectar etiquetas de gestión de acceso, administrador en el recurso Para ver las políticas asignadas en el recurso que tiene una etiqueta de gestión de acceso conectada, rol de visor |
| Nativo en la infraestructura clásica | Ver detalles de hardware y acceso a un conjunto específico de servicios o a todos los servidores nativos |
| Hosts dedicados en la infraestructura clásica | Ver detalles de host dedicado virtual y acceso a un conjunto específico de servicios o a todos los hosts dedicados |
| Servidor virtual en la infraestructura clásica | Ver detalles de servidor virtual y acceso a un conjunto específico de servicios o a todos los servidores virtuales |
| Cloud Object Storage S3 en la infraestructura clásica | Permiso para gestionar el almacenamiento |
| File Storage en la infraestructura clásica | Permiso para gestionar el almacenamiento |
| Evault Backup en la infraestructura clásica | Permiso para gestionar el almacenamiento |
| Content Delivery Network en la infraestructura clásica | Permiso para gestionar la cuenta de CDN |
| Direct Link en la infraestructura clásica | Miembro de cuenta |
| Hardware Firewall | Gestionar cortafuegos |
| FortiGate Security Appliance | Gestionar cortafuegos |
| IBM Cloud Load Balancer | Gestionar equilibradores de carga |
| Gateway Appliance | Gestionar pasarelas de red |
| ID de servicio | Para adjuntar o desconectar etiquetas de usuario, editor o administrador en el servicio de identidad de IAM Para adjuntar o desconectar etiquetas de gestión de acceso, administrador en el servicio de identidad de IAM |
Cómo otorgar a los usuarios acceso para etiquetar recursos habilitados para IAM
Siga los pasos siguientes para asignar el rol de editor a un usuario para que pueda etiquetar recursos habilitados para IAM:
- En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Grupos de acceso.
- Pulse Crear.
- Indique un nombre de grupo y una descripción y pulse Crear.
- Añada usuarios al grupo de acceso pulsando Añadir usuarios, seleccione uno o más usuarios en la tabla y pulse Añadir a grupo.
- Haga clic en Acceso > Asignar acceso.
- Seleccione Todos los servicios habilitados para Identity y Access o un servicio específico.
- Seleccione una ubicación específica.
- Seleccione Editor en la lista de roles de acceso a la plataforma y pulse Revisar.
- Pulse Añadir para añadir la configuración de política a su resumen de políticas.
- Pulse Asignar.
Cómo otorgar a los usuarios acceso para etiquetar recursos habilitados para IAM mediante la API
Para asignar el rol de editor a un usuario para etiquetar recursos habilitados para IAM, llame a la API de gestión de políticas de IAM como se muestra en la siguiente solicitud de ejemplo. Sustituya las variables por el servicio de destino y el nombre del recurso.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Editor role for SERVICE_NAME's RESOURCE_NAME",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Editor"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "$SERVICE_NAME"
},
{
"name": "resource",
"value": "$RESOURCE_NAME",
"operator": "stringEquals"
}
]
}
]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value(EXAMPLE_USER_ID)
.build();
PolicySubject policySubjects = new PolicySubject.Builder()
.addAttributes(subjectAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:iam::::role:Editor")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value(exampleAccountId)
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceType")
.value("service")
.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: exampleUserId,
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Editor',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceType',
value: 'service',
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=example_user_id)])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Editor')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceType', value='service')
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: &exampleUserID,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Editor"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr(exampleAccountID),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceType"),
Value: core.StringPtr("service"),
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))
Cómo otorgar a los usuarios acceso para etiquetar recursos de infraestructura clásica
Los recursos que se pueden etiquetar para la infraestructura clásica son Invitado virtual, Host dedicado virtual, Controlador de distribución de aplicación de red, Miembro de pasarela, Subred, VLAN y Cortafuegos de VLAN (dedicado). Siga los pasos siguientes para asignar el rol de acceso al servicio de Gestor para que un usuario pueda etiquetar servicios de la infraestructura clásica:
- Pulse Gestionar > Acceso (IAM) y seleccione Usuarios.
- Pulse el nombre de usuario de la tabla.
- Pulse Infraestructura clásica.
- En el separador Permisos, expanda la categoría Dispositivos.
- Seleccione Ver detalles de hardware y Ver detalles de servidor virtual. Si tiene que asignar acceso a Cloud Object Storage S3, File Storage o Evault Backup, asigne el permiso Gestión de almacenamiento. Si necesita asignar acceso a Content Delivery Network, asigne el permiso Gestionar cuenta de CDN.
- Pulse Guardar.
- Pulse el separador Dispositivos.
- Seleccione Todos los servidores bare metal o Todos los servidores virtuales, en función del recurso que desee que el usuario pueda etiquetar.
Otorgar a los usuarios acceso a los ID de servicio de etiqueta
Realice los pasos siguientes para asignar el rol de administrador en el IAM Identity Service para un usuario:
- Pulse Gestionar > Acceso (IAM) y seleccione Usuarios.
- Pulse el nombre de usuario de la tabla.
- Seleccione el servicio Identidad de IAM y haga clic en Siguiente.
- Seleccione Todos los recursos y pulse Siguiente.
- Seleccione el rol de Administrador.
- Pulse Revisar > Añadir.
- Pulse Asignar.
Conceder a los usuarios acceso a los identificadores de servicio de etiquetas mediante la API
Para asignar el rol de administrador en el IAM Identity Service para un usuario, llame a la API de gestión de políticas de IAM tal como se muestra en la siguiente solicitud de ejemplo. Sustituya los valores por el ID de IAM y el ID de cuenta del usuario de destino.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Administrator role for the IAM Identity Service so that user can tag service IDs",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "iam-identity"
}
]
}
]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value(EXAMPLE_USER_ID)
.build();
PolicySubject policySubjects = new PolicySubject.Builder()
.addAttributes(subjectAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:iam::::role:Administrator")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value(exampleAccountId)
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceType")
.value("iam-identity")
.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: exampleUserId,
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceType',
value: 'iam-identity',
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=example_user_id)])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Administrator')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceType', value='iam-identity')
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: &exampleUserID,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr(exampleAccountID),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceType"),
Value: core.StringPtr("iam-identity"),
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))