Gestión del acceso de IAM para IBM Cloud Direct Link
IBM Cloud® Identity and Access Management (IAM) controla el acceso a las pasarelas Direct Link de los usuarios de su cuenta. A cada usuario que acceda al servicio Direct Link en la cuenta se le debe asignar una política de acceso con un rol de IAM. Revisa los siguientes roles, acciones y otros aspectos para determinar cuál es la mejor forma de asignar el acceso a Direct Link.
IBM Cloud® Direct Link habilita la conectividad entre recursos locales del cliente y recursos de IBM Cloud alojados en infraestructuras de Cloud Private Cloud (VPC) clásicas.
La política de acceso que se asigne a los usuarios en la cuenta determinará qué acciones pueden realizar en el contexto del servicio o instancia específica seleccionados. El enlace directo personaliza y define las acciones permitidas como operaciones que se pueden realizar en el servicio. Cada acción se correlaciona con una plataforma de IAM o un rol de servicio que puede asignar a un usuario.
Si un rol específico y sus acciones no se ajustan al caso práctico que desea abordar, puede crear un rol personalizado y seleccionar las acciones que desea incluir.
Las políticas de acceso IAM permiten otorgar acceso a distintos niveles. Algunas opciones incluyen:
- Acceso a través de la instancia del servicio Direct Link en su cuenta
- Acceso a una instancia de servicio individual en su cuenta
- Acceso a un recurso específico dentro de una instancia
Consulta la siguiente tabla, en la que se resumen los tipos de tareas que permite realizar cada rol al trabajar con el servicio « Direct Link ». Las funciones de gestión de la plataforma permiten a los usuarios realizar tareas en los recursos del servicio a nivel de la plataforma; por ejemplo, asignar acceso de usuario al servicio y crear o eliminar instancias.
Direct Link no tiene funciones de acceso a servicios, que permiten a los usuarios acceder a Direct Link y llamar a la API Direct Link. Para obtener información sobre las acciones exactas asignadas a cada función, consulte Direct Link Connect y Direct Link Dedicated.
| Rol de plataforma | Descripción de acciones | Acciones de ejemplo |
|---|---|---|
| Administrador | Permite a un usuario asignar políticas de acceso de IAM de Direct Link a otros usuarios. | Crear pasarela Suprimir pasarela Editar pasarela Añadir una conexión virtual a una pasarela* Eliminar una conexión virtual de una pasarela* Editar una conexión virtual (solo API) Actualizar políticas de acceso de usuario para el servicio |
| Editor | Realizan todas las acciones, incluida la gestión de pasarelas y de conexiones virtuales. | Crear pasarela Suprimir pasarela Editar pasarela Añadir una conexión virtual a una pasarela* Eliminar una conexión virtual de una pasarela* Editar una conexión virtual (solo API) |
| Visor/Operador | Realiza acciones que no cambiar el estado de los recursos. | Listar puertas de enlace Obtener puertas de enlace Listar las conexiones virtuales de una puerta de enlace Ver las conexiones virtuales de una puerta de enlace Recuperar información relacionada con la puerta de enlace (notificación de finalización de la autorización) Ver las solicitudes de conexión entrantes* |
* Para añadir o eliminar conexiones virtuales a VPC, o para aceptar o rechazar una solicitud de conexión, el usuario también debe tener permisos de rol de acceso a la plataforma del editor o del administrador para el VPC. Consulte VPC: Iniciación a IAM para obtener más información.
Notas:
- Todos los recursos de Direct Link existen en un grupo de recursos. Para crear un recurso de tipo « Direct Link », es necesario disponer de permisos de editor sobre el grupo de recursos seleccionado.
- Para obtener información sobre la asignación de roles de usuario en la consola, consulte Gestión del acceso a los recursos.
Asignación de acceso a Direct Link en la consola
Formas comunes de asignar acceso en la consola:
- Políticas de acceso por usuario. Puede gestionar políticas de acceso por usuario desde la página Gestionar > Acceso (IAM) > Usuarios de la consola. Para obtener información sobre los pasos de asignación de acceso IAM, consulte Gestión del acceso a los recursos.
- 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. Puede gestionar los grupos de acceso y su acceso desde la página Gestionar > Acceso (IAM) > Grupos de acceso de la consola. Para obtener más información, consulte Asignación de acceso a un grupo en la consola.
Consideraciones de autorización para conexiones virtuales entre cuentas
En la tabla siguiente se muestran los cambios de autorización para las conexiones virtuales entre cuentas.
Una conexión virtual entre cuentas significa que la pasarela se encuentra en una cuenta de IBM Cloud y una conexión virtual en dicha pasarela conecta con una VPC en otra cuenta de IBM Cloud. Esta configuración requiere tener en cuenta aspectos específicos relacionados con las autorizaciones, ya que los objetos (el enlace directo y la VPC) y sus grupos de recursos no existen en ambas cuentas.
| Cuenta relacionada | Prestación | Autorización necesaria |
|---|---|---|
| Cuenta de pasarela | Cualquier capacidad no mencionada en esta tabla. | Ningún cambio de autorización. |
| Cuenta de pasarela | Crear y suprimir una conexión virtual entre cuentas. | directlink.dedicated.edit o directlink.connect.editNo se requiere autorización de VPC ni al crear ni al eliminar. |
| Cuenta de red | Ver pasarelas de sólo lectura y conexiones virtuales. | Nivel de servicio directlink.dedicated.view o directlink.connect.view |
| Cuenta de red | Aceptar y rechazar conexiones pendientes. | Autorización de actualización de nivel de servicio directlink.dedicated.view o directlink.connect.viewen la VPC conectada. |
| Cuenta de red | Suprimir (DELETE) conexión virtual conectada. |
Autorización de actualización de nivel de servicio directlink.dedicated.view o directlink.connect.viewen la VPC conectada. |
Asignación de acceso a Direct Link en la CLI
Para obtener instrucciones paso a paso sobre cómo asignar, eliminar y revisar el acceso, consulta « Asignación de recursos de acceso mediante la CLI ». El ejemplo siguiente muestra un mandato para asignar el rol Editor a un usuario:
Utilice directlink para el nombre de servicio. Asimismo, escriba entre comillas los nombres de rol formados por más de una palabra, como en este ejemplo.
ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name directlink --roles Editor
Asignación de acceso a Direct Link mediante la API
Para obtener instrucciones paso a paso sobre cómo asignar, retirar y revisar el acceso, consulta «Asignación de acceso a recursos mediante la API» o el documento de la API «Crear una política ». 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 |
|---|---|
| Visor | crn:v1:bluemix:public:directlink::::serviceRole:Viewer |
| Operador | crn:v1:bluemix:public:directlink::::serviceRole:Operator |
| Editor | crn:v1:bluemix:public:directlink::::serviceRole:Editor |
| Administrador | crn:v1:bluemix:public:directlink::::serviceRole:Administrator |
| Lector | crn:v1:bluemix:public:directlink::::serviceRole:Reader |
| Writer | crn:v1:bluemix:public:directlink::::serviceRole:Writer |
| Gestor | crn:v1:bluemix:public:directlink::::serviceRole:Manager |
Utiliza « directlink » como nombre del servicio y consulta la tabla de valores de ID de rol para asegurarte de que estás utilizando el valor correcto para el CRN.
La política siguiente asigna un rol de Escritor de usuario a todos los recursos de serviceName=directlink en la cuenta.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Writer role for Direct Link",
"subjects": [
{
"attributes": [{
"name": "iam_id",
"value": "IBMid-123453user"
}]
}],
"roles": [{
"roles_id": "crn:v1:bluemix:public:directlink::::serviceRole:Writer"
}],
"resources": [{
"attributes": [
{
"name": "accountId",
"value": "1234567890987654321"
},
{
"name": "serviceName",
"value": "directlink"
}]
}]
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:directlink::::serviceRole:Writer")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value("ACCOUNT_ID")
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceName")
.value("directlink")
.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);
policy_subjects = PolicySubject(
attributes=[SubjectAttribute(name='iam_id', value='IBMid-123453user')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:directlink::::serviceRole:Writer')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
name='serviceName', value='directlink')
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:directlink::::serviceRole:Writer"),
}
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("directlink"),
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))
const policySubjects = [
{
attributes: [
{
name: 'iam_id',
value: 'IBMid-123453user',
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:directlink::::serviceRole:Writer',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: 'ACCOUNT_ID',
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceName',
value: 'directlink',
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)
});
Ejemplo 2 de Curl
La política siguiente asigna un rol de Escritor de usuario a todos los serviceName=directlink recursos de tipo dedicated de la cuenta.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Writer role for Direct Link Dedicated",
"subjects": [
{
"attributes": [{
"name": "iam_id",
"value": "IBMid-123453user"
}]
}],
"roles": [{
"roles_id": "crn:v1:bluemix:public:directlink::::serviceRole:Writer"
}],
"resources": [{
"attributes": [
{
"name": "accountId",
"value": "1234567890987654321"
},
{
"name": "serviceName",
"value": "directlink"
},
{
"name": "dedicatedId",
"value": "*"
}]
}]
Asignación de acceso a directlink mediante Terraform
El siguiente ejemplo muestra cómo asignar el rol « Editor » a directlink:
Utilice directlink para el nombre de servicio.
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Editor"]
resources {
service = "directlink"
}
}
Para obtener más información, consulte ibm_iam_user_policy.