Attribution des accès pour la gestion de l'entreprise
Pour affecter à un utilisateur l'accès lui permettant de gérer une entreprise IBM Cloud®, vous devez l'inviter à rejoindre le compte d'entreprise et lui affecter l'accès au service de gestion des comptes Entreprise.
Pour pouvoir gérer l'entreprise, une règle d'accès est requise dans le compte d'entreprise. Lorsque vous affectez une règle de service de gestion des comptes Entreprise à un utilisateur dans un compte enfant d'une entreprise, l'utilisateur ne peut pas gérer l'entreprise à laquelle le compte appartient. En fonction du rôle affecté pour le service de gestion des comptes Entreprise, l'utilisateur peut effectuer des actions spécifiques :
- Créer des comptes dans l'entreprise
- Créer et nommer des groupes de comptes
- Déplacer des comptes dans des groupes de comptes
- Annuler les comptes après la suppression de toutes les ressources associées
- Importer des comptes existants dans l'entreprise
- Mettre à jour le domaine ou le nom de l'entreprise
- Consulter les rapports d'utilisation, qui servent à calculer la facturation, pour l'entreprise, un groupe de comptes spécifique, des comptes au sein de groupes de comptes ou un compte spécifique, avec des détails disponibles au niveau du plan
- Créer des modèles IAM gérés par l'entreprise
- Attribuer des modèles IAM gérés par l'entreprise aux comptes enfants
- Attribuer des modèles IAM aux comptes enfants
- Définir des notifications de dépenses sur les comptes enfants pour informer les membres de l'entreprise
- Surveillez la sécurité et la conformité avec IBM Cloud Security and Compliance Center Workload Protection
- Partager des catalogues privés
Une règle qui accorde à un utilisateur l'accès au service d'entreprise peut être affectée pour l'ensemble de l'entreprise ou uniquement pour un groupe de comptes ou un seul compte spécifique.
Généralement, le compte d'entreprise lui-même ne contient pas beaucoup de ressources. A la place, les ressources sont créées dans les comptes enfant de l'entreprise. Les utilisateurs peuvent être invités à rejoindre ces comptes et l'accès permettant de gérer et d'utiliser ces ressources peut leur être accordé. L'accès et l'appartenance à un compte d'entreprise ne s'appliquent pas aux groupes de comptes et aux comptes enfant de la hiérarchie de l'entreprise. La gestion des utilisateurs ainsi que la gestion des accès sont spécifiques à chaque compte, comme cela est décrit dans les diagrammes suivants.
Le premier diagramme illustre comment affecter une règle à un utilisateur dans le compte d'entreprise afin de gérer l'ensemble de l'entreprise. Le second diagramme présente une règle s'appliquant à un groupe de comptes qui fournit un accès permettant de gérer uniquement ce groupe de comptes et les comptes enfant de ce groupe.
La cible et le rôle de la règle sont importants pour la détermination de la portée de l'accès. Un utilisateur, un ID de service ou un groupe d'accès d'une entreprise peut effectuer des tâches de gestion d'entreprise :
- Au niveau global de l'entreprise.
- Sur un groupe de comptes qui peut contenir d'autres groupes de comptes et des comptes.
- Sur un seul compte.
Par exemple, un utilisateur peut effectuer des tâches dans un groupe de comptes si vous lui affectez une règle d'accès sur le service de gestion des comptes Entreprise avec une cible s'appliquant à un groupe de comptes spécifique. L'utilisateur ne peut pas effectuer d'actions affectant l'entreprise dans son ensemble (mettre à jour le nom de l'entreprise ou le document, par exemple) lorsque la cible s'applique à un compte ou un groupe de comptes spécifique.
Vous pouvez affecter aux utilisateurs d'un compte enfant au sein de l'entreprise des règles d'accès qui s'appliquent à la gestion de ce compte uniquement ou des ressources qu'il contient. Par exemple, si vous affectez à un utilisateur d'un compte enfant un rôle sur le service de gestion des comptes Entreprise, cet utilisateur peut exécuter des actions au niveau du compte de l'entreprise. Vous devez l'ajouter à ce compte et affecter la règle dans ce contexte.
Règles requises pour des travaux spécifiques
En fonction de la tâche à effectuer, plusieurs règles d'accès peuvent être requises pour un utilisateur qui n'est pas propriétaire de l'entreprise. Les exemples suivants présentent le jeu de règles d'accès que vous devez affecter à un utilisateur de l'entreprise afin qu'il puisse effectuer des tâches spécifiques.
Si vous êtes propriétaire d'un compte qui ne fait partie d'aucune entreprise mais que vous souhaitez qu'un autre utilisateur de votre compte puisse convertir ce dernier en entreprise, vous pouvez affecter à cet utilisateur le rôle Administrateur sur le service de gestion des comptes Facturation.
Affichage de l'utilisation et gestion de la facturation dans l'entreprise
Pour qu'un utilisateur puisse afficher les rapports d'utilisation de tous les comptes de l'entreprise, effectuer des paiements et consulter les factures, vous devez lui attribuer toutes les règles d'accès suivantes :
- Rôle d'afficheur des rapports d'utilisation pour le service de gestion des comptes Entreprise dans le compte d'entreprise
- Rôle Administrateur pour le service de gestion des comptes Facturation dans le compte d'entreprise
Importation d'un compte existant dans l'entreprise
Pour qu'un utilisateur puisse importer un compte IBM Cloud existant dans l'entreprise, vous devez lui attribuer l'ensemble des politiques d'accès suivantes :
- Rôle Administrateur sur le service de gestion des comptes Facturation dans le compte à importer
- Rôle Administrateur ou Editeur sur le service de gestion des comptes Entreprise pour le groupe de comptes ou le compte d'entreprise
- Rôle Administrateur sur le service de gestion des comptes Facturation pour le compte d'entreprise
Déplacement d'un compte
Pour qu'un utilisateur puisse déplacer un compte dans une entreprise, vous devez affecter les règles d'accès suivantes :
- Rôle Administrateur pour le service de gestion des comptes Facturation dans le compte d'entreprise
Puis une des deux options suivantes :
- Rôle Administrateur ou Editeur sur le service de gestion des comptes Entreprise pour l'ensemble de l'entreprise
- Rôle Administrateur ou Editeur sur le groupe de comptes actuel et le groupe de comptes cible
Pour plus d'informations sur les actions que les utilisateurs peuvent effectuer pour chaque rôle, voir Actions et rôles pour les services de gestion des comptes.
Gestion de la sécurité et de la conformité
Pour qu'un utilisateur puisse gérer la sécurité et la conformité via IBM Cloud Security and Compliance Center Workload Protection, vous devez attribuer les politiques d'accès suivantes :
- Rôle d'administrateur ou d'éditeur pour IBM Cloud Security and Compliance Center Workload Protection
- Rôle personnalisé pour l'entreprise
Pour créer le rôle personnalisé avec les autorisations appropriées, voir Contrôle de l'accès par IAM.
Création et attribution de modèles de gestion des identités et des accès (IAM) gérés par l'entreprise
Pour créer des modèles IAM gérés par l'entreprise, vous devez attribuer le rôle d'administrateur de modèles pour tous les services de gestion des comptes IAM.
Pour attribuer des modèles IAM gérés par l'entreprise à des comptes enfants, vous devez attribuer le rôle « Administrateur d'attribution de modèles » ( Tous les services de gestion des comptes IAM ) ainsi qu'une politique comprenant au moins le rôle « Lecteur » (Viewer) sur l'Service aux entreprises.
Par défaut, aucun utilisateur ne dispose de ces autorisations, y compris le propriétaire du compte.
Pour plus d'informations sur les actions que les utilisateurs peuvent effectuer pour chaque rôle, voir Actions et rôles pour les services de gestion des comptes.
Affectation de l'accès dans la console
Pour affecter une règle d'accès à un utilisateur existant dans le compte d'entreprise, procédez comme suit :
Vous pouvez définir la cible de la règle afin qu'elle s'applique à l'ensemble de l'entreprise, à un groupe de comptes spécifique, qui peut inclure l'accès à tous les comptes s'y trouvant, ou même à un compte spécifique d'un groupe de comptes.
- Dans la console IBM Cloud, cliquez sur Gérer > Accès (IAM), puis sélectionnez Utilisateurs.
- A partir de la ligne de l'utilisateur auquel vous souhaitez affecter l'accès, cliquez sur l'icône Actions
, puis sur Attribuer un accès.
- Dans les services, sélectionnez Entreprise.
- Cliquez sur Suivant.
- Etendez l'accès à un groupe de ressources avec des comptes enfant spécifiques ou à tous les comptes de l'entreprise. Ensuite, cliquez sur Suivant.
- Sélectionnez une combinaison de rôles ou de droits, puis cliquez sur Réviser.
- Cliquez sur Ajouter pour ajouter votre configuration de règles à votre récapitulatif de règles.
- (Facultatif) Répétez la procédure pour ajouter d'autres accès.
- Cliquez sur Affecter.
Pour plus d'informations sur les rôles et les actions permettant d'attribuer des droits d'accès dans un compte d'entreprise, consultez la section « Attribution des droits d'accès aux services de gestion des comptes ».
Affectation de l'accès à l'aide de l'interface de ligne de commande
Pour créer une règle d'accès pour un utilisateur, exécutez la commande ibmcloud iam user-policy-create. Dans la commande exemple, un fichier JSON permet de spécifier les détails de la règle. Consultez l'exemple
dans la section Affectation de l'accès à l'aide de l'API pour connaître les éléments pouvant être inclus
dans le fichier JSON.
Créer une règle utilisateur :
ibmcloud iam user-policy-create name@example.com -f policy.json
Pour plus d'informations, voir ibmcloud iam user-policy-create.
Affectation de l'accès à l'aide de l'API
L'exemple de demande suivant affecte une règle pour un utilisateur ayant le rôle Editeur sur le service Entreprise d'un compte d'entreprise s'appliquant à un groupe de comptes. Ce type de règle est hiérarchique et s'applique à tous les objets descendants dans la hiérarchie, ce qui correspond à tous les groupes de comptes ou tous les comptes du groupe de comptes cible spécifié.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Editor role for SERVICE_NAME's RESOURCE_NAME",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Editor"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "$SERVICE_NAME"
},
{
"name": "resource",
"value": "$RESOURCE_NAME",
"operator": "stringEquals"
}
]
}
]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value(EXAMPLE_USER_ID)
.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(exampleAccountId)
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceType")
.value("service")
.operator("stringEquals")
.build();
ResourceTag policyResourceTag = new ResourceTag.Builder()
.name("project")
.value("prototype")
.operator("stringEquals")
.build();
PolicyResource policyResources = new PolicyResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.addTags(policyResourceTag)
.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: exampleUserId,
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Viewer',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceType',
value: 'service',
operator: 'stringEquals',
};
const policyResourceTag = {
name: 'project',
operator: 'stringEquals',
value: 'prototype',
};
const policyResources = [
{
attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
tags: [policyResourceTag],
},
];
const params = {
type: 'access',
subjects: policySubjects,
roles: policyRoles,
resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
.then(res => {
examplePolicyId = res.result.id;
console.log('createPolicy() result:\n' + JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
policy_subjects = PolicySubject(
attributes=[SubjectAttribute(name='iam_id', value=example_user_id)])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Viewer')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceType', value='service')
policy_resource_tag = ResourceTag(
name='project', value='prototype')
policy_resources = PolicyResource(
attributes=[account_id_resource_attribute,
service_name_resource_attribute],
tags=[policy_resource_tag])
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: &exampleUserID,
}
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(exampleAccountID),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceType"),
Value: core.StringPtr("service"),
Operator: core.StringPtr("stringEquals"),
}
policyResourceTag := &iampolicymanagementv1.ResourceTag{
Name: core.StringPtr("project"),
Value: core.StringPtr("prototype"),
Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
Attributes: []iampolicymanagementv1.ResourceAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute},
Tags: []iampolicymanagementv1.ResourceTag{*policyResourceTag},
}
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))
Pour plus d'informations, consultez la section « Créer une politique ».