IBM Cloud Docs
Gestion de l'accès IAM pour les services d'infrastructure VPC

Gestion de l'accès IAM pour les services d'infrastructure VPC

L'accès aux instances de service IBM Cloud® Virtual Private Cloud pour les utilisateurs de votre compte est contrôlé par IAM (Cloud Identity and Access Management). Chaque utilisateur qui accède au service VPC Infrastructure Services dans votre compte doit se voir attribuer une politique d'accès avec un rôle IAM. Examinez les rôles, actions et autres éléments suivants afin de déterminer la meilleure façon d'attribuer un accès à VPC Infrastructure Services.

La règle d'accès que vous affectez aux utilisateurs dans votre compte détermine les actions que l'utilisateur peut effectuer dans le contexte du service ou de l'instance spécifique que vous sélectionnez. Les actions autorisées sont personnalisées et définies par VPC Infrastructure Services en tant qu'opérations que vous êtes autorisé à effectuer sur le service. Chaque action est associée à une plateforme IAM ou à un rôle de service que vous pouvez attribuer à un utilisateur.

Si un rôle spécifique et ses actions ne correspondent pas au cas d'utilisation que vous recherchez, vous pouvez créer un rôle personnalisé et sélectionner les actions à inclure.

Les politiques d'accès IAM permettent d'accorder l'accès à différents niveaux. Les options suivantes sont incluses:

  • Accès à toutes les instances du service dans votre compte
  • Accès à une instance de service individuelle dans votre compte
  • Accès à une ressource spécifique au sein d'une instance, telle que vpcId ou instanceId.

Le tableau suivant répertorie les attributs des ressources VPC. Pour plus d'informations, voir Attributs de ressource VPC.

Attributs de ressource VPC
Ressource Attribut de ressource
Mise à l'échelle automatique pour VPC instanceGroupId:<instance-group-id>
Service de sauvegarde backupPolicyId: <backup-policy-id>
Block Storage for VPC volumeId: <volume-id>
Serveur bare metal bareMetalServerId: <bare-metal-server-id>
Réseaux de clusters pour VPC clusterNetworkId: <cluster-network-id>
Dedicated Host for VPC dedicatedHostId:<dedicated-host-id>
File Storage shareId: <share-id>
Adresse IP flottante pour VPC floatingIpId: <fip-id>
Flow Logs for VPC flowLogCollectorId: <flc-id>
Service d'image pour VPC imageId:<image-id>
Équilibreur de charge pour VPC loadBalancerId: <load-balancer-id>
Network ACL networkAclId: <nacl-id>
Groupe de placement pour VPC placementGroupId: <placement-group-id>
Services de chemin privé pour VPC privatePathServiceGatewayId: <private-path-service-gateway-id>
Plage d'adresses publiques pour VPC publicAddressRangeId: <public-address-range-id>
Passerelle publique pour VPC publicGatewayId: <pgw-id>
Réservations pour VPC reservationId: <reservation-id>
Groupe de sécurité pour VPC securityGroupId: <default-sec-grp-id>
Instantanés snapshotId: <snapshot-id>
Clé SSH pour VPC keyId:<key-id>
Sous-réseau subnetId: <subnet-id>
Interface de réseau virtuel virtualNetworkInterfaceId:<virtual-network-interface-id>
Noeud final privé virtuel pour VPC endpointGatewayId:<endpoint-gateway-id>
Virtual Private Cloud vpcId: <vpc-id>
Virtual Server for VPC instanceId: <instance-id>
VPN for VPC vpnGatewayID: <vpn-gateway-id>

Consultez les tableaux suivants qui décrivent les types de tâches autorisées par chaque rôle lorsque vous travaillez avec le service VPC Infrastructure Services. Les rôles de gestion de plateforme permettent aux utilisateurs d'effectuer des tâches sur des ressources de service au niveau de la plateforme. Par exemple, attribuer un accès utilisateur au service, créer ou supprimer des instances et lier des instances à des applications. Les rôles d'accès au service permettent aux utilisateurs d'accéder à VPC Infrastructure Services et d'appeler l'API VPC Infrastructure Services.

Rôles de la plate-forme IAM VPC Infrastructure Services
Rôle de plateforme Description des actions
Afficheur Vous pouvez visualiser les instances de service, mais vous ne pouvez pas les modifier.
Opérateur Vous pouvez effectuer des actions de plateforme nécessaires à la configuration et au fonctionnement des instances de service, telles que l'affichage d'un tableau de bord de service.
Editeur Vous pouvez effectuer toutes les actions de la plate-forme, à l'exception de la gestion du compte et de l'attribution des politiques d'accès.
Administrateur Vous pouvez effectuer toutes les actions de la plate-forme en fonction de la ressource à laquelle ce rôle est attribué, y compris l'attribution de politiques d'accès à d'autres utilisateurs.
Rôles d'accès aux services de l'infrastructure IAM VPC
Rôle de service Description des actions
Lecteur Vous pouvez effectuer des actions en lecture seule au sein d'un service, telles que la visualisation des ressources spécifiques au service.
Auteur Vous disposez d'autorisations allant au-delà du rôle de lecteur, y compris la création et la modification de ressources spécifiques à un service.
Responsable Vous disposez d'autorisations au-delà du rôle de rédacteur qui vous permettent d'effectuer des actions privilégiées, telles que définies par le service. De plus, vous pouvez créer et éditer des ressources spécifiques au service.
VPNClient Vous devez sélectionner uniquement ce rôle si vous devez affecter l'accès aux clients VPN pour lesquels l'authentification par ID utilisateur et code d'accès est configurée. Si vous devez configurer l'authentification de l'ID utilisateur et du code d'accès, voir Configuration des ID utilisateur et des codes d'accès.
Opérateur de réseau avancé Bare Metal Vous avez accès à la modification de l'usurpation d'adresse IP et de la conversion d'adresses réseau d'infrastructure sur les interfaces bare metal.
Administration de la console Bare Metal Vous pouvez accéder à la console de serveur bare metal.
Opérateur d'usurpation d'adresse IP Vous pouvez activer ou désactiver la vérification de l'usurpation d'adresse IP sur les instances de serveur virtuel. N'accordez ce rôle que si nécessaire.
Administrateur de la console Vous pouvez accéder à la console de l'instance de serveur virtuel. Ce rôle n'offre qu'un accès à la console et doit être associé à un autre rôle qui offre un accès opérateur au serveur virtuel, tel qu'Opérateur, Éditeur ou Administrateur.

Pour plus d'informations sur les actions exactes qui sont mappées à chaque rôle, voir Infrastructure Services sur la page des rôles et actions IAM.

Les liens suivants vous permettent d'accéder directement au service d'infrastructure spécifique sur la page des rôles et des actions IAM.

Rôles et actions de l'IAM du réseau

Calculer les rôles et actions IAM

Rôles et actions de l'IAM en matière de stockage

Certaines tâches VPC requièrent des autorisations pour plusieurs actions IAM. Par exemple, la création d'une instance de serveur virtuel requiert non seulement is.instance.instance.create, mais également is.vpc.vpc.operate, is.subnet.subnet.operate, is.security-group.security-group.operate et is.volume.volume.create. Des actions conditionnelles supplémentaires peuvent être requises. Par exemple, si vous mettez à disposition une instance sur un hôte dédié, vous avez besoin de is.dedicated-host.dedicated-host-group.operate et is.dedicated-host.dedicated-host.operate. La référence d'API de cloud privé virtuel inclut une section d'autorisation pour chaque appel d'API, par exemple, Créer une instance.

Affectation de l'accès aux services d'infrastructure VPC dans la console

Il existe deux façons d'attribuer un accès dans la console :

  • Règles d'accès par utilisateur. Vous pouvez gérer les règles d'accès par utilisateur à partir de la page Gérer > Accès (IAM) > Utilisateurs de la console. Pour plus d'informations sur les étapes d'affectation de l'accès IAM, voir Managing access to resources.
  • Groupes d'accès. Les groupes d'accès sont utilisés pour rationaliser la gestion des accès en affectant une fois l'accès à un groupe. Ensuite, vous pouvez ajouter ou supprimer des utilisateurs du groupe au besoin pour contrôler leur accès. Vous gérez les groupes d'accès et leur accès à partir de la page Gérer > Accès (IAM) > Groupes d'accès de la console. Pour plus d'informations, voir Affectation d'un accès à un groupe dans la console.

Affectation de l'accès aux services d'infrastructure VPC dans l'interface de ligne de commande

Pour obtenir des instructions détaillées sur l'affectation, la suppression et l'examen des accès, consultez Affectation de l'accès aux ressources à l'aide de l'interface de ligne de commande.

L'exemple suivant illustre une commande permettant d'affecter le rôle Viewer pour VPC Infrastructure Services:

Utilisez is comme nom de service. De même, utilisez des guillemets autour des noms de rôles qui comportent plus d'un mot, comme le montre l'exemple ci-dessous.

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

Affectation de l'accès aux services d'infrastructure VPC à l'aide de l'API

Pour obtenir des instructions étape par étape sur l'attribution, la suppression et la révision de l'accès, voir Attribution de l'accès aux ressources à l'aide de l'API ou Création d'une API de politique. Les noms de ressource cloud (CRN) du rôle dans le tableau suivant sont utilisés pour affecter l'accès avec l'API.

Valeurs d'ID de rôle des services d'infrastructure VPC pour l'utilisation de l'API
Nom du rôle Rôle CRN
Afficheur crn:v1:bluemix:public:iam::::role:Viewer
Opérateur crn:v1:bluemix:public:iam::::role:Operator
Editeur crn:v1:bluemix:public:iam::::role:Editor
Administrateur crn:v1:bluemix:public:iam::::role:Administrator
Lecteur crn:v1:bluemix:public:iam::::serviceRole:Reader
Auteur crn:v1:bluemix:public:iam::::serviceRole:Writer
Responsable crn:v1:bluemix:public:iam::::serviceRole:Manager
VPNClient crn:v1:bluemix:public:iam::::serviceRole:VPNClient
Opérateur de réseau avancé Bare Metal crn:v1:bluemix:public:iam::::serviceRole:BareMetalAdvancedNetworkOperator
Administration de la console Bare Metal crn:v1:bluemix:public:iam::::serviceRole:BareMetalConsoleAdmin
Opérateur d'usurpation d'adresse IP crn:v1:bluemix:public:iam::::serviceRole:IPSpoofingOperator
Administrateur de la console crn:v1:bluemix:public:iam::::serviceRole:VirtualServerConsoleAdmin

L'exemple suivant permet d'affecter le rôle Viewer pour VPC Infrastructure Services:

Utilisez is pour le nom du service et consultez le tableau des valeurs de l'ID de rôle pour vous assurer que vous utilisez la bonne valeur pour le 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))

Affectation de l'accès aux services d'infrastructure VPC à l'aide de Terraform

L'exemple suivant permet d'affecter le rôle Viewer pour VPC Infrastructure Services:

Utilisez is comme nom de service.

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

  resources {
    service = "is"
  }
}

Pour plus d'informations, voir ibm_iam_user_policy.

Conseils

  • L'accès à une ressource de conteneur n'accorde pas automatiquement l'accès à ses sous-ressources. Par exemple, l'octroi de l'accès à un VPC n'accorde pas l'accès aux sous-réseaux dans ce VPC.
  • De même, l'accès à une sous-ressource n'accorde pas l'accès à sa ressource de conteneur. Par exemple, l'octroi de l'accès à un sous-réseau n'accorde pas l'accès au VPC de ce sous-réseau.
  • En général, pour modifier la relation entre plusieurs ressources, l'utilisateur doit avoir accès à chaque ressource. Par exemple, pour connecter une interface réseau à un groupe de sécurité, l'utilisateur doit avoir accès à l'interface réseau et au groupe de sécurité.

Pour plus d'informations sur l'attribution des rôles d'utilisateur dans la console, voir Gestion des autorisations d'utilisateur pour les ressources VPC.

Vous pouvez également affecter des rôles utilisateur à l'aide de l' interface de ligne de commande d'IBM Cloud®. Vous pouvez sélectionner des ressources à l'aide de leurs attributs. Pour plus d'informations, voir Attributs de ressource VPC.

Groupes de ressources

Un groupe de ressources est un ensemble de ressources, telles qu'un VPC entier ou un sous-réseau unique, qui sont associées pour établir l'autorisation et l'utilisation. Vous pouvez imaginer un groupe de ressources comme une collection d'infrastructures pouvant être utilisée par un projet, un service ou une équipe.

Les grandes entreprises peuvent diviser un VPC en différents groupes de ressources, tandis que les plus petites entreprises peuvent avoir besoin d'un seul groupe de ressources car tous les membres de l'équipe ont accès à l'intégralité du VPC. Si vous connaissez OpenStack, un groupe de ressources est similaire à un Projet dans OpenStack Keystone.

L'affectation d'une ressource à un groupe de ressources ne peut être effectuée que lorsque la ressource est créée. Les ressources ne peuvent pas modifier les groupes de ressources après leur création.

Si vous souhaitez utiliser plusieurs groupes de ressources, il est bon de planifier la manière dont vous souhaitez affecter les ressources et les utilisateurs de votre organisation à chaque groupe de ressources.

Pour plus d'informations sur le groupe de ressources, voir Groupes de ressources.

Etiquettes de gestion des accès

Les balises de gestion de l'accès sont des métadonnées ajoutées aux ressources pour aider à organiser les relations de contrôle d'accès. Les balises créent des regroupements de ressources flexibles que vous pouvez administrer.

Lorsque vous utilisez des étiquettes pour contrôler l'accès à vos ressources, les projets de votre équipe peuvent se développer sans qu'une mise à jour des règles IAM ne soit nécessaire. Vous pouvez associer des balises de gestion des accès à des ressources d'infrastructure VPC et vous pouvez définir le niveau d'accès à ces ressources en fonction des balises.

Les ressources d'infrastructure VPC possèdent un modèle d'autorisation complexe dans lequel un seul appel d'API peut vérifier les autorisations sur plusieurs ressources. Pour de telles API, des balises doivent être associées à toutes les ressources auxquelles une API a besoin d'accéder. Pour plus d'informations sur les autorisations d'API requises, voir VPC API Reference.

Si l'appel API renvoie UNKNOWN pour un nom de groupe de ressources, ajoutez l'accès Afficheur aux groupes de ressources lorsque vous créez la règle des balises de gestion des accès.

Pour plus d'informations sur l'utilisation des balises de gestion des accès, consultez les ressources suivantes :

Limitations

  1. Il existe des écarts entre l'implémentation en cours et la spécification d'API, qui sont documentés ici.

  2. Les modèles d'instance et les groupes d'hôtes dédiés ne prennent pas en charge les balises de gestion des accès. Par conséquent, vous ne pouvez pas gérer complètement l'accès Auto scale et Dedicated hosts à l'aide de ces balises.

  3. Les ressources de stratégie Internet Key Exchange (IKE) et IPsec utilisées dans les réseaux privés virtuels de site à site ne prennent pas en charge les balises de gestion des accès.

Limitations de l'interface utilisateur pour l'affectation de rôles définis par le service

L'affectation de rôles définis par le service à une règle d'accès avec une balise de gestion des accès à l'aide de l'interface utilisateur n'est pas prise en charge. Cette fonction est prise en charge uniquement via l'API et l'interface de ligne de commande.

Utilisation de l'API pour l'affectation de rôles définis par le service

L'affectation de rôles définis par le service à une règle d'accès avec une balise de gestion des accès à l'aide de l'interface utilisateur n'est pas prise en charge. Cette fonction est prise en charge uniquement via l'API et l'interface de ligne de commande. Utilisez l'exemple suivant pour l'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"
                }
            ]
        }
    ]
}'

Utilisation de l'interface de ligne de commande pour l'affectation de rôles définis par le service

L'affectation de rôles définis par le service à une règle d'accès avec une balise de gestion des accès à l'aide de l'interface utilisateur n'est pas prise en charge. Cette fonction est prise en charge uniquement via l'API et l'interface de ligne de commande. Utilisez l'exemple suivant pour l'interface de ligne de commande.

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