Accorder l'accès à IBM Cloud Logs

L'accès aux ressources de configuration IBM Cloud pour les utilisateurs et les applications de votre compte est contrôlé par IBM Cloud® Identity and Access Management (IAM). Chaque utilisateur ou application qui accède au service IBM Cloud Logs 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 à IBM Cloud Logs.

Vous pouvez affecter l'accès à IBM Cloud Logs en utilisant l'une des méthodes suivantes:

  • Règles d'accès par utilisateur

  • 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.

    Un groupe d'accès peut être créé pour organiser un ensemble d'utilisateurs, d'ID de service et de profils sécurisés en une seule entité qui vous permet d'affecter facilement l'accès. Vous pouvez affecter une seule règle au groupe au lieu d'affecter individuellement le même accès plusieurs fois pour chaque utilisateur ou ID de service. Pour plus d'informations, voir Configuration des groupes d'accès.

    Pour organiser un ensemble d'utilisateurs et d'identifiants de service en une seule entité qui facilite la gestion des autorisations IAM, utilisez les groupes d'accès. Vous pouvez affecter une seule règle au groupe au lieu d'affecter individuellement le même accès plusieurs fois pour chaque utilisateur ou ID de service.

  • Profils sécurisés

    Vous pouvez utiliser des profils sécurisés pour accorder aux différentes identités IBM Cloud® un accès aux ressources de votre compte. Accordez automatiquement aux utilisateurs fédérés l'accès à votre compte avec des conditions basées sur les attributs SAML de votre annuaire d'entreprise. Vous pouvez également utiliser des profils de confiance pour mettre en place une autorisation fine pour les applications qui s'exécutent dans les ressources informatiques. De cette façon, vous n'êtes pas obligé de créer des ID de service ou des clés d'API pour les ressources de calcul. Vous pouvez également établir une relation de confiance avec les services IBM Cloud ou les ID de service d'un autre compte pour accorder un accès intercompte. Pour plus d'informations, voir Création de profils sécurisés.

Si vous disposez de l'autorisation IAM de créer des politiques et des autorisations, vous ne pouvez accorder que le niveau d'accès dont vous disposez en tant qu'utilisateur du service cible. Par exemple, si vous disposez d'un accès spectateur pour le service cible, vous ne pouvez attribuer que le rôle de spectateur pour l'autorisation. Si vous tentez d'attribuer une autorisation plus élevée, telle que celle d'administrateur, il peut sembler que l'autorisation soit accordée, mais seule l'autorisation la plus élevée dont vous disposez pour le service cible, c'est-à-dire celle de spectateur, sera attribuée.

Attribution d'un accès à IBM Cloud Logs dans la console

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

  • Groupes d'accès. Vous pouvez gérer 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.

  • 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.

Attribution d'un accès à IBM Cloud Logs dans le CLI

Pour obtenir des instructions détaillées sur l'affectation, la suppression et l'examen des accès, voir Affectation de l'accès aux ressources à l'aide de l'interface de ligne de commande. L'exemple suivant présente une commande permettant d'attribuer le rôle Viewer à IBM Cloud Logs:

Utilisez logs comme nom de service. De même, utilisez des guillemets pour les noms de rôles qui comportent plus d'un mot.

ibmcloud iam user-policy-create name@example.com --service-name logs --roles "Viewer"

Attribution d'un accès à IBM Cloud Logs à l'aide de l'API

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'API ou Création de documents de politique d'API. 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 de l'ID de rôle pour l'utilisation de l'API
Nom du rôle Rôle CRN
Afficheur crn:v1:bluemix:public:logs::::serviceRole:Viewer
Opérateur crn:v1:bluemix:public:logs::::serviceRole:Operator
Editeur crn:v1:bluemix:public:logs::::serviceRole:Editor
Administrateur crn:v1:bluemix:public:logs::::serviceRole:Administrator

L'exemple suivant concerne l'attribution du rôle Viewer à IBM Cloud Logs:

Utilisez logs comme nom de service et reportez-vous à la table des valeurs d'ID de rôle pour vous assurer que vous utilisez la valeur correcte 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": "Viewer role for IBM Cloud Logs",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:logs::::serviceRole:Viewer"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "logs"
        }
      ]
    }
  ]
}'
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:logs::::serviceRole:Viewer")
      .build();

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

ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
      .name("serviceName")
      .value("logs")
      .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:logs::::serviceRole:Viewer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'ACCOUNT_ID',
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceName',
  value: 'logs',
  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:logs::::serviceRole:Viewer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
  name='serviceName', value='logs')
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:logs::::serviceRole: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("logs"),
  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))

Attribuer un accès à IBM Cloud Logs en utilisant Terraform

L'exemple suivant concerne l'attribution du rôle Viewer à IBM Cloud Logs:

Utilisez logs comme nom de service.

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

  resources {
    service = "logs"
  }
}

Pour plus d'informations, voir la ressource terraform ibm_iam_user_policy.