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). A cada usuario que acceda al servicio « VPC Infrastructure Services » de tu 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 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.

En la siguiente tabla se enumeran los atributos de los recursos de 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 Private Path 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>

Consulta las siguientes tablas, en las que se detallan los tipos de tareas que permite cada rol al trabajar 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 permisos de acceso a los usuarios 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 Puedes ver las instancias del servicio, pero no puedes modificarlas.
Operador Puedes realizar las acciones de la plataforma necesarias para configurar y gestionar las instancias de servicio, como consultar el panel de control de un servicio.
Editor Puedes realizar todas las acciones de la plataforma, excepto la gestión de la cuenta y la asignación de políticas de acceso.
Administrador Puedes realizar todas las acciones de la plataforma relacionadas con 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 Dentro de un servicio, puedes realizar acciones de solo lectura, como consultar recursos específicos del servicio.
Writer Tienes permisos que van más allá del rol de lector, entre los que se incluyen la creación y la edición de recursos específicos del servicio.
Gestor Dispones de permisos que van más allá del rol de «escritor» y que te permiten realizar acciones con privilegios, tal y como las define 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 solo 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.

Roles y acciones de IAM de red

Calcular los roles y las acciones de IAM

Roles 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

Hay dos formas habituales de asignar permisos 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, utiliza comillas para los nombres de roles que consten de más de una palabra, tal y como se muestra en el ejemplo que aparece aquí.

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 sobre cómo asignar, retirar y revisar los permisos de acceso, consulta Asignación de acceso a recursos mediante la API o Crear una API de políticas. 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:

Utiliza « is » 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.

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 cómo asignar roles de usuario en la consola, consulta « Gestió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®. Puedes seleccionar recursos utilizando los atributos de los mismos. 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 sola subred, que se asocian entre sí 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 quieres utilizar varios grupos de recursos, es recomendable que planifiques cómo quieres asignar los recursos y a los usuarios de tu 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 facilitar la organización de 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 obtener más información sobre el uso de las etiquetas de gestión de acceso, consulta 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