Gestion de l'accès IAM pour IBM Cloud Direct Link
IBM Cloud® Identity and Access Management (IAM) contrôle l'accès aux passerelles Direct Link pour les utilisateurs de votre compte. Chaque utilisateur qui accède au service Direct Link dans votre compte doit se voir attribuer une règle d'accès avec un rôle IAM. Passez en revue les rôles, actions et autres éléments ci-dessous afin de déterminer la meilleure façon d'attribuer des droits d'accès à Direct Link.
IBM Cloud® Direct Link permet la connectivité entre les ressources du client sur site et les ressources IBM Cloud hébergées dans les infrastructures classiques et virtuelles de nuage privé (VPC).
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. Le lien direct personnalise et définit les actions autorisées en tant qu'opérations pouvant être effectuées 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 règles d'accès IAM permettent d'accorder l'accès à différents niveaux. Voici quelques options :
- Accès via l'instance du service Direct Link dans votre compte
- Accès à une instance de service individuelle dans votre compte
- Accès à une ressource spécifique dans une instance
Consultez le tableau ci-dessous, qui présente les types de tâches autorisées pour chaque rôle lorsque vous utilisez le service « Direct Link ». Les rôles de gestion de la plateforme permettent aux utilisateurs d'effectuer des tâches sur les ressources du service au niveau de la plateforme, par exemple d'attribuer des droits d'accès au service à des utilisateurs, ou encore de créer ou de supprimer des instances.
Direct Link n'a pas de rôles d'accès aux services, qui permettent aux utilisateurs d'accéder à Direct Link et d'appeler l'API Direct Link. Pour plus d'informations sur les actions exactes associées à chaque rôle, voir Direct Link Connect et Direct Link Dedicated.
| Rôle de plateforme | Description des actions | Exemples d'actions |
|---|---|---|
| Administrateur | Autoriser un utilisateur à affecter des règles d'accès IAM Direct Link à d'autres utilisateurs. | Créer une passerelle Supprimer la passerelle Editer la passerelle Ajouter une connexion virtuelle à une passerelle* Supprimer une connexion virtuelle d'une passerelle* Editer une connexion virtuelle (API uniquement) Mettre à jour les règles d'accès utilisateur pour le service |
| Editeur | Effectuer toutes les actions, notamment gérer les passerelles et les connexions virtuelles. | Créer une passerelle Supprimer la passerelle Editer la passerelle Ajouter une connexion virtuelle à une passerelle* Supprimer une connexion virtuelle d'une passerelle* Editer une connexion virtuelle (API uniquement) |
| Afficheur/Opérateur | Effectuer des actions qui ne modifient pas l'état des ressources. | Lister les passerelles Récupérer les passerelles Lister les connexions virtuelles d'une passerelle Afficher les connexions virtuelles d'une passerelle Récupérer des informations relatives à une passerelle (avis d'achèvement de l'autorisation) Afficher les demandes de connexion entrantes* |
& ast; Pour ajouter ou supprimer des connexions virtuelles à des VPC, ou pour accepter ou rejeter une demande de connexion, l'utilisateur doit également disposer des droits d'accès Editeur ou Administrateur pour le rôle d'accès à la plateforme VPC. Voir VPC : Initiation à IAM pour plus d'informations.
Remarques :
- Toutes les ressources Direct Link existent dans un groupe de ressources. La création d'une ressource « Direct Link » nécessite un accès de type « Éditeur » au groupe de ressources sélectionné.
- Pour plus d'informations sur l'affectation de rôles utilisateur dans la console, voir Gestion de l'accès aux ressources.
Attribution des droits d'accès à Direct Link dans la console
Méthodes courantes pour attribuer l'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 Gestion de l'accès aux ressources.
- 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.
Remarques relatives aux autorisations des connexions virtuelles sur plusieurs comptes
Le tableau suivant répertorie les changements d'autorisation des connexions virtuelles sur plusieurs comptes.
Une connexion virtuelle sur plusieurs comptes signifie que la passerelle existe dans un compte IBM Cloud et qu'une connexion virtuelle dans cette passerelle se connecte à un VPC d'un autre compte IBM Cloud. Cette configuration nécessite des précautions particulières en matière d'autorisation, car les objets (la connexion directe et le VPC) ainsi que leurs groupes de ressources n'existent pas dans les deux comptes.
| Compte associé | Capacité | Autorisation requise |
|---|---|---|
| Compte de passerelle | Toutes les fonctions non mentionnées dans ce tableau. | Aucun changement d'autorisation. |
| Compte de passerelle | Création et suppression d'une connexion virtuelle sur plusieurs comptes. | directlink.dedicated.edit ou directlink.connect.editAucune autorisation VPC n'est requise lors de la création ou de la suppression. |
| Compte réseau | Affichage des passerelles et des connexions virtuelles en lecture seule. | directlink.dedicated.view ou directlink.connect.view au niveau service |
| Compte réseau | Acceptation et rejet des connexions en attente. | Niveau de service directlink.dedicated.view ou directlink.connect.viewMise à jour sur le PC connecté. |
| Compte réseau | Connexion virtuelle associée à DELETE. |
Niveau de service directlink.dedicated.view ou directlink.connect.viewMise à jour sur le PC connecté. |
Attribution des droits d'accès à Direct Link via l'interface de ligne de commande (CLI)
Pour obtenir des instructions détaillées sur l'attribution, la suppression et la vérification des droits d'accès, consultez la section « Attribution de ressources d'accès à l'aide de l'interface de ligne de commande(CLI) ». L'exemple suivant illustre une commande permettant d'affecter le rôle Editor à un utilisateur:
Utilisez directlink comme nom de service. De plus, utilisez des guillemets autour des noms de rôles qui font plus d'un mot, comme dans l'exemple ici.
ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name directlink --roles Editor
Attribution d'un accès à Direct Link à l'aide de l'API
Pour obtenir des instructions détaillées sur l'attribution, la suppression et la vérification des droits d'accès, consultez la page Attribution des droits d'accès aux ressources à l'aide de l'API ou le site Créer une documentation sur l'API des politiques. Les noms de ressource cloud (CRN) du rôle dans le tableau suivant sont utilisés pour affecter l'accès avec l'API.
| Nom du rôle | Rôle CRN |
|---|---|
| Afficheur | crn:v1:bluemix:public:directlink::::serviceRole:Viewer |
| Opérateur | crn:v1:bluemix:public:directlink::::serviceRole:Operator |
| Editeur | crn:v1:bluemix:public:directlink::::serviceRole:Editor |
| Administrateur | crn:v1:bluemix:public:directlink::::serviceRole:Administrator |
| Lecteur | crn:v1:bluemix:public:directlink::::serviceRole:Reader |
| Auteur | crn:v1:bluemix:public:directlink::::serviceRole:Writer |
| Responsable | crn:v1:bluemix:public:directlink::::serviceRole:Manager |
Utilisez « directlink » comme nom de service et consultez le tableau des identifiants de rôle pour vous assurer que vous utilisez la valeur correcte pour le CRN.
La règle suivante affecte un rôle d'utilisateur Auteur à toutes les ressources serviceName=directlink du compte.
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)
});
Curl exemple 2
La règle suivante affecte un rôle d'utilisateur Auteur à toutes les serviceName=directlink ressources de type dedicated du compte.
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": "*"
}]
}]
Attribution d'un accès à directlink à l'aide de Terraform
L'exemple suivant montre comment attribuer le rôle « Editor » à directlink:
Utilisez directlink comme nom de service.
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Editor"]
resources {
service = "directlink"
}
}
Pour plus d'informations, voir ibm_iam_user_policy.