IBM Cloud Docs
Gestión del acceso de IAM para servicios de infraestructura de VPC

Gestión del acceso de IAM para servicios de infraestructura de VPC

El acceso a las instancias de servicio de IBM Cloud® Virtual Private Cloud para los usuarios de su cuenta está controlado por Cloud Identity and Access Management (IAM). Cada usuario que acceda al servicio VPC Infrastructure Services en su cuenta debe tener asignada una política de acceso con un rol IAM. Revise los siguientes roles, acciones y más para ayudar a determinar la mejor manera de asignar el acceso a VPC Infrastructure Services.

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. Las acciones permitidas se personalizan y definen mediante VPC Infrastructure Services como operaciones que puede 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 de IAM permiten conceder acceso a distintos niveles. A continuación se muestran algunas opciones que se incluyen:

  • Acceso a todas las instancias del servicio de su cuenta
  • Acceso a una instancia de servicio individual en su cuenta
  • Acceso a un recurso específico dentro de una instancia, como vpcId o instanceId.

La siguiente tabla enumera los atributos de los recursos de la VPC. Para obtener más información, consulte Atributos de recursos de VPC.

Atributos de recursos de VPC
Recurso Atributo de recurso
Auto Scale for VPC instanceGroupId:<instance-group-id>
Servicio de copia de seguridad backupPolicyId: <backup-policy-id>
Block Storage for VPC volumeId: <volume-id>
Servidor nativo bareMetalServerId: <bare-metal-server-id>
Redes de clústeres para VPC clusterNetworkId: <cluster-network-id>
Dedicated Host for VPC dedicatedHostId:<dedicated-host-id>
File Storage shareId: <share-id>
Floating IP for VPC floatingIpId: <fip-id>
Flow Logs for VPC flowLogCollectorId: <flc-id>
Image Service for VPC imageId:<image-id>
Load Balancer for VPC loadBalancerId: <load-balancer-id>
Network ACL networkAclId: <nacl-id>
Grupo de colocación para la VPC placementGroupId: <placement-group-id>
Servicios de ruta privada para VPC privatePathServiceGatewayId: <private-path-service-gateway-id>
Intervalo de direcciones públicas para VPC publicAddressRangeId: <public-address-range-id>
Public Gateway for VPC publicGatewayId: <pgw-id>
Reservas para VPC reservationId: <reservation-id>
Security Group for VPC securityGroupId: <default-sec-grp-id>
Instantáneas snapshotId: <snapshot-id>
SSH Key for VPC keyId:<key-id>
Subred subnetId: <subnet-id>
Interfaz de red virtual virtualNetworkInterfaceId:<virtual-network-interface-id>
Virtual Private Endpoint for VPC endpointGatewayId:<endpoint-gateway-id>
Nube privada virtual vpcId: <vpc-id>
Virtual Server for VPC instanceId: <instance-id>
VPN for VPC vpnGatewayID: <vpn-gateway-id>

Revise las siguientes tablas que describen los tipos de tareas que permite cada rol cuando trabaja con el servicio VPC Infrastructure Services. Los roles de gestión de plataforma permiten a los usuarios realizar tareas en los recursos de servicio en el nivel de plataforma. Por ejemplo, asignar acceso de usuario al servicio, crear o eliminar instancias y vincular instancias a aplicaciones. Los roles de acceso al servicio permiten al usuario acceder a VPC Infrastructure Services y a la capacidad de llamar a la API de VPC Infrastructure Services.

Funciones de la plataforma de servicios de infraestructura IAM VPC
Rol de plataforma Descripción de acciones
Visor Puede ver las instancias de servicio, pero no modificarlas.
Operador Puede realizar acciones de plataforma necesarias para configurar y operar instancias de servicio, como ver un panel de control de servicio.
Editor Puede realizar todas las acciones de la plataforma excepto gestionar la cuenta y asignar políticas de acceso.
Administrador Puede realizar todas las acciones de la plataforma basadas en el recurso al que está asignado este rol, incluida la asignación de políticas de acceso a otros usuarios.
Funciones de acceso a servicios de infraestructura IAM VPC
Rol de servicio Descripción de acciones
Lector Puede realizar acciones de sólo lectura dentro de un servicio, como ver recursos específicos del servicio.
Writer Tiene permisos más allá del rol de lector, incluyendo la creación y edición de recursos específicos del servicio.
Gestor Tiene permisos más allá del rol de escritor que le permiten completar acciones privilegiadas, según lo definido por el servicio. Además, puede crear y editar recursos específicos del servicio.
VPNClient Sólo necesita seleccionar este rol si necesita asignar acceso a clientes VPN que tengan configurado el ID de usuario y la autenticación de código de acceso. Si necesita configurar el ID de usuario y la autenticación de código de acceso, consulte Configuración de ID de usuario y códigos de acceso.
Operador de red avanzado de servidor nativo Tiene acceso para modificar la suplantación de IP y la infraestructura NAT en interfaces nativas.
Administración de la consola de servidor nativo Puede acceder a la consola del servidor nativo.
Operador de suplantación de IP Puede habilitar o inhabilitar la comprobación de suplantación de IP en instancias de servidor virtual. Otorgue este rol sólo si es necesario.
Administrador de la consola Puede acceder a la consola de instancia de servidor virtual. Este rol sólo proporciona acceso a la consola y debe combinarse con otro rol que tenga acceso de operador al servidor virtual, como Operador, Editor o Administrador.

Para obtener más información sobre las acciones exactas que se correlacionan con cada rol, consulte Infrastructure Services en la página de acciones y roles de IAM.

Los enlaces siguientes le llevan directamente al servicio de infraestructura específico en la página de roles y acciones de IAM.

Funciones y acciones de IAM en red

Calcular funciones y acciones de IAM

Funciones y acciones de IAM de almacenamiento

Algunas tareas de VPC requieren autorizaciones para varias acciones de IAM. Por ejemplo, crear una instancia de servidor virtual no sólo requiere is.instance.instance.create, sino también is.vpc.vpc.operate, is.subnet.subnet.operate, is.security-group.security-group.operate y is.volume.volume.create. Es posible que sean necesarias acciones condicionales adicionales. Por ejemplo, si suministra una instancia en un host dedicado, necesita is.dedicated-host.dedicated-host-group.operate y is.dedicated-host.dedicated-host.operate. La referencia de API de nube privada virtual incluye una sección de autorización para cada llamada de API, por ejemplo, Crear una instancia.

Asignación de acceso a los servicios de infraestructura de VPC en la consola

Existen dos formas habituales de asignar accesos 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. Si desea obtener más información sobre los pasos para asignar 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.

Asignación de acceso a los servicios de infraestructura de VPC en la CLI

Para obtener instrucciones paso a paso para asignar, eliminar y revisar el acceso, consulte Asignación acceso a recursos utilizando la CLI.

El ejemplo siguiente muestra un mandato para asignar el rol Viewer para VPC Infrastructure Services:

Utilice is para el nombre de servicio. Además, utilice comillas entre los nombres de funciones que contengan más de una palabra, como se muestra en este ejemplo.

ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name is --roles "Viewer"

Asignación de acceso a los servicios de infraestructura de VPC utilizando la API

Para obtener instrucciones paso a paso para asignar, eliminar y revisar el acceso, consulte Asignación de acceso a recursos mediante la API o Creación de una política API. Los nombres de recurso de nube de rol (CRN) de la tabla siguiente se utilizan para asignar acceso con la API.

Valores de ID de rol de servicios de infraestructura de VPC para uso de API
Nombre de rol CRN de rol
Visor crn:v1:bluemix:public:iam::::role:Viewer
Operador crn:v1:bluemix:public:iam::::role:Operator
Editor crn:v1:bluemix:public:iam::::role:Editor
Administrador crn:v1:bluemix:public:iam::::role:Administrator
Lector crn:v1:bluemix:public:iam::::serviceRole:Reader
Writer crn:v1:bluemix:public:iam::::serviceRole:Writer
Gestor crn:v1:bluemix:public:iam::::serviceRole:Manager
VPNClient crn:v1:bluemix:public:iam::::serviceRole:VPNClient
Operador de red avanzado de servidor nativo crn:v1:bluemix:public:iam::::serviceRole:BareMetalAdvancedNetworkOperator
Administración de la consola de servidor nativo crn:v1:bluemix:public:iam::::serviceRole:BareMetalConsoleAdmin
Operador de suplantación de IP crn:v1:bluemix:public:iam::::serviceRole:IPSpoofingOperator
Administrador de la consola crn:v1:bluemix:public:iam::::serviceRole:VirtualServerConsoleAdmin

El ejemplo siguiente es para asignar el rol Viewer para VPC Infrastructure Services:

Utilice is para 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": "Object Writer role for Cloud Object Storage",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }'
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "is"
        }
      ]
    }
  ]
}
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:iam::::role:Viewer")
      .build();

ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
      .name("accountId")
      .value("ACCOUNT_ID")
      .operator("stringEquals")
      .build();

ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
      .name("serviceName")
      .value("is")
      .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:iam::::role:Viewer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'ACCOUNT_ID',
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceName',
  value: 'is',
  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:iam::::role:Viewer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
  name='serviceName', value='is')
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:iam::::role:Viewer"),
}
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("is"),
  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 servicios de infraestructura de VPC utilizando Terraform

El ejemplo siguiente es para asignar el rol Viewer para VPC Infrastructure Services:

Utilice is para el nombre de servicio.

resource "ibm_iam_user_policy" "policy" {
  ibm_id = "test@example.com"
  roles  = ["Viewer"]

  resources {
    service = "is"
  }
}

Para obtener más información, consulte ibm_iam_user_policy.

Sugerencias

  • El acceso a un recurso de contenedor no otorga automáticamente acceso a sus subrecursos. Por ejemplo, la concesión de acceso a una VPC no otorga acceso a las subredes en esa VPC.
  • Del mismo modo, el acceso a un subrecurso no otorga acceso a su recurso de contenedor. Por ejemplo, la concesión de acceso a una subred no otorga acceso a la VPC de dicha subred.
  • En general, para cambiar la relación entre varios recursos, el usuario debe tener acceso a cada recurso. Por ejemplo, para conectar una interfaz de red a un grupo de seguridad, el usuario debe tener acceso tanto a la interfaz de red como al grupo de seguridad.

Para obtener más información sobre la asignación de funciones de usuario en la consola, consulte Administración de permisos de usuario para recursos de VPC.

También puede asignar roles de usuario utilizando la interfaz de línea de mandatos (CLI) de IBM Cloud®. Puede seleccionar recursos utilizando atributos de recursos. Para obtener más información, consulte Atributos de recursos de VPC.

Grupos de recursos

Un grupo de recursos es un conjunto de recursos, como una VPC completa o una única subred, que se asocian para establecer la autorización y el uso. Podría considerar que un grupo de recursos es una colección de recursos de la infraestructura que puede utilizar un proyecto, un departamento o un equipo.

Las grandes empresas pueden dividir una VPC en varios grupos de recursos, mientras que las compañías más pequeñas podrían necesitar solo un grupo de recursos porque todos los miembros del equipo tienen acceso a toda la VPC. Si está familiarizado con OpenStack, un grupo de recursos es similar en concepto a un Proyecto en OpenStack Keystone.

La asignación de un recurso a un grupo de recursos solo se puede realizar cuando se crea el recurso. Los recursos no pueden cambiar de grupo de recursos después de que se creen.

Si desea utilizar varios grupos de recursos, es conveniente planificar cómo desea asignar los recursos y los usuarios de su organización a cada grupo de recursos.

Para obtener más información sobre el grupo de recursos, consulte Grupos de recursos.

Etiquetas de gestión de acceso

Las etiquetas de gestión de acceso son metadatos que se añaden a los recursos para ayudar a organizar las relaciones de control de acceso. Las etiquetas crean agrupaciones de recursos flexibles para que las administre.

Si utiliza etiquetas para controlar el acceso a los recursos, los proyectos de su equipo pueden crecer sin requerir actualizaciones en las políticas de IAM. Puede adjuntar las etiquetas de gestión de acceso a los recursos de infraestructura de VPC y puede definir el nivel de acceso a dichos recursos basándose en las etiquetas.

Los recursos de infraestructura de VPC tienen un modelo de autorización complejo donde una sola llamada de API puede comprobar autorizaciones en varios recursos. Para estas API, las etiquetas deben estar conectadas a todos los recursos a los que una API necesita acceso. Para obtener más información sobre las autorizaciones de API necesarias, consulte la Referencia de API de VPC.

Si la llamada de API devuelve UNKNOWN para un nombre de grupo de recursos, añada el acceso de visor a los grupos de recursos al crear la política de etiquetas de gestión de accesos.

Para más información sobre el uso de etiquetas de gestión de acceso, consulte los siguientes recursos:

Limitaciones

  1. Existen algunas lagunas entre la implementación actual y la especificación de API, que se documentan aquí.

  2. Las plantillas de instancia y los grupos de hosts dedicados no dan soporte a las etiquetas de gestión de acceso. Como resultado, no puede gestionar completamente el acceso Escalado automático y Hosts dedicados utilizando estas etiquetas.

  3. Los recursos de política de Internet Key Exchange (IKE) e IPsec que se utilizan en las VPN de sitio a sitio no dan soporte a las etiquetas de gestión de acceso.

Limitaciones de la interfaz de usuario para asignar roles definidos de servicio

La asignación de roles definidos por servicio a una política de acceso con una etiqueta de gestión de acceso utilizando la interfaz de usuario no está soportada. Esta característica solo está soportada a través de la API y la CLI.

Utilización de la API para asignar roles definidos por servicio

La asignación de roles definidos por servicio a una política de acceso con una etiqueta de gestión de acceso utilizando la interfaz de usuario no está soportada. Esta característica solo está soportada a través de la API y la CLI. Utilice el ejemplo siguiente para la API.

curl --location --request POST 'https://iam.cloud.ibm.com/v1/policies' \
--header 'Content-Type: application/json' \
--header 'Authorization: <your token>' \
--data-raw '{
    "description": "useful description here",
    "type": "access",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "iam_id",
                    "value": "<user iam-id>"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:is::::serviceRole:VPNClient"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                            "name": "serviceName",
                            "value": "is",
                            "operator": "stringEquals"
                        },
                        {
                            "name": "accountId",
                            "value": "<your account id>"
                        }
            ],
            "tags":[
                {
                    "name": "abc",
                    "value": "test"
                }
            ]
        }
    ]
}'

Utilización de CLI para asignar roles definidos por servicio

La asignación de roles definidos por servicio a una política de acceso con una etiqueta de gestión de acceso utilizando la interfaz de usuario no está soportada. Esta característica solo está soportada a través de la API y la CLI. Utilice el ejemplo siguiente para la CLI.

ic iam access-group-policy-create Developers_MyApp --roles Viewer --service-name kms --tags abc:test