Gestion des clés d'API d'ID de service
Des ID de service sont créés pour permettre l'accès à vos services IBM Cloud® par des applications hébergées à l'intérieur et à l'extérieur de IBM Cloud. Les clés d'API sont utilisées par une application pour s'authentifier en tant qu'ID de service particulier et se voient accorder les droits d'accès qui sont associés à cet ID de service spécifique.
Après avoir créé un ID de service, vous pouvez commencer à créer des clés d'API et à affecter des règles de service. Chaque règle spécifie le niveau d'accès autorisé lorsque la clé d'API est utilisée pour l'authentification auprès de vos services. Pour plus d'informations sur la création d'un ID de service et l'affectation de règles, voir Création et utilisation des ID de service. Pour plus d'informations sur les commandes d'API permettant de gérer les clés d'API d'ID de service, voir Gestion de l'accès IAM, des clés d'API, des ID de service et des groupes d'accès.
Chaque clé d'API associée à un ID de service hérite de la règle qui est affectée à cet ID de service. Par exemple, pour qu'une application puisse afficher les ressources d'un service, vous devez utiliser une clé d'API associée à un ID de service auquel une règle dotée du rôle Afficheur est affectée. Pour qu'une autre application ait des droits d'accès complets dans un service, vous devez utiliser une clé d'API associée à un deuxième ID de service auquel une règle dotée du rôle Administrateur est affectée.
Pour des exemples d'utilisation d'un identifiant de service, consultez la section Utilisation des identifiants HMAC dans la documentation Object Storage ou cette vidéo IBM Cloud Data Engine sur l'utilisation de l'API REST IBM Cloud Data Engine.
Accès requis pour la gestion des clés d'API d'ID de service
Tous les utilisateurs peuvent créer des ID de service dans un compte. Ils sont administrateurs de ces ID et peuvent créer la clé d'API et les règles d'accès associées. Toutefois, les propriétaires de compte et les utilisateurs auxquels le rôle Administrateur a été affecté sur le service d'identité IAM peuvent gérer les clés d'API pour tous les ID de service d'un compte. Les utilisateurs peuvent également disposer de droits d'accès à un seul ID de service, si cet ID est spécifié lorsque l'administrateur affecte les droits d'accès.
Si vous êtes un utilisateur disposant des droits d'accès requis, vous pouvez afficher, mettre à jour et supprimer des clés d'API pour n'importe quel ID de service du compte. Accédez à la page Clés d'API, puis sélectionnez l'option Toutes les clés d'API d'ID de service dans le menu Afficher pour rechercher une clé d'API dont vous souhaitez afficher les détails ou que vous souhaitez mettre à jour ou supprimer.
Création d'une clé d'API pour un ID de service
Créez une clé d'API à associer à un ID de service dans la console :
- Dans la console IBM Cloud, cliquez sur Gérer > Accès (IAM), puis sélectionnez ID de service.
- Si vous ne possédez pas d'ID de service, créez-en un.
- Cliquez sur l'icône Actions
> Gérer l'ID service.
- Cliquez sur Clés d'API.
- Cliquez sur Créer.
- Ajoutez un nom et une description permettant d'identifier facilement la clé d'API.
- Cliquez sur Créer.
- Sauvegardez votre clé d'API en la copiant ou en la téléchargeant vers un emplacement sécurisé.
Pour des raisons de sécurité, la clé d'API ne peut être copiée ou téléchargée qu'au moment de sa création. Si la clé d'API est perdue, vous devez en créer une autre.
Mise à jour d'une clé API pour un identifiant de service à l'aide de la console
Vous pouvez mettre à jour une clé d'API en éditant le nom ou la description utilisés pour l'identifier dans l'interface utilisateur.
- Dans la console IBM Cloud, cliquez sur Gérer > Accès (IAM), puis sélectionnez ID de service.
- Cliquez sur l'icône Actions
> Gérer l'ID service.
- Cliquez sur Clés d'API.
- Cliquez sur l'icône Actions
> Éditer le nom et la description.
Si vous n'avez pas créé l'ID de service et que vous êtes le propriétaire de compte ou un administrateur du service d'identité IAM, vous pouvez mettre à jour des clés d'API pour n'importe quel ID de service du compte. Accédez à la page Clés d'API et sélectionnez l'option Toutes les clés d'API d'ID de service dans le menu Afficher pour rechercher la clé d'API que vous souhaitez gérer.
Création d'une clé d'API pour un ID de service à l'aide de l'interface de ligne de commande
Pour créer une clé d'API pour un ID de service à l'aide de l'interface de ligne de commande, vous pouvez utiliser la commande ibmcloud iam service-api-key-create.
ibmcloud iam service-api-key-create NAME (SERVICE_ID_NAME|SERVICE_ID_UUID) [-d, --description DESCRIPTION] [--file FILE] [-f, --force] [--lock]
Mise à jour d'une clé d'API pour un ID de service à l'aide de l'interface de ligne de commande
Pour mettre à jour une clé d'API pour un ID de service à l'aide de l'interface de ligne de commande, vous pouvez utiliser la commande ibmcloud iam service-api-key-update.
ibmcloud iam service-api-key-update NAME SERVICE_ID [-n, --name NEW_sNAME] [-d, --description DESCRIPTION] [-v, --version VERSION] [-f, --force]
Verrouillage d'une clé d'API d'un ID de service
Vous pouvez empêcher la suppression des clés d'API représentant l'identité de l'ID de service en les verrouillant. Une clé d'API verrouillée est indiquée par l'icône Verrouillé dans l'interface utilisateur.
- Dans la console IBM Cloud, cliquez sur Gérer > Accès (IAM) puis sélectionnez ID de service.
- Identifiez la ligne de l'ID de service pour lequel vous souhaitez sélectionner une clé d'API puis sélectionnez le nom de l'ID de service.
- Cliquez sur Clés d'API.
- Survolez la ligne de la clé d'API que vous souhaitez verrouiller, puis cliquez sur l'icône Actions
pour ouvrir une liste d'options.
- Cliquez sur Verrouiller la clé d'API.
Vous pouvez verrouiller votre clé d'API à tout moment pour mettre à jour, supprimer ou ajouter une règle d'accès ou pour retirer la clé d'API.
Verrouillage ou déverrouillage d'une clé d'API d'ID de service à l'aide de l'interface de ligne de commande
Vous pouvez empêcher la suppression des clés d'API représentant l'identité de l'ID de service en les verrouillant. Une clé d'API verrouillée est indiquée par l'icône Verrouillé dans l'interface utilisateur. Pour verrouiller une clé d'API d'ID de service, utilisez la commande suivante :
ibmcloud iam service-api-key-lock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]
- Prérequis
- Point final, Connexion, Cible
Options de commande :
- APIKEY_NAME (obligatoire)
- Nom de la clé d'API, exclut APIKEY_UUID
- APIKEY_UUID (obligatoire)
- Identificateur unique universel de la clé d'API, exclut APIKEY_NAME
- SERVICE_ID_NAME (obligatoire)
- Nom de l'ID de service, exclut SERVICE_ID_UUID
- SERVICE_ID_UUID (obligatoire)
- Identificateur unique universel de l'ID de service, exclut SERVICE_ID_NAME
- -f, --force
- Verrouiller sans confirmation
Exemples :
Verrouiller la clé d'API de service sample-key de l'ID de service sample-service :
ibmcloud iam service-api-key-lock sample-key sample-service
Pour déverrouiller une clé d'API d'ID de service, utilisez la commande suivante :
ibmcloud iam service-api-key-unlock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]
Suppression d'une clé d'API pour un ID de service
Vous pouvez supprimer une clé d'API associée à un ID de service. Cela dit, si vous supprimez une clé d'API qui est utilisée par une application, celle-ci ne pourra plus s'authentifier auprès de vos services.
- Dans la console IBM Cloud, cliquez sur Gérer > Accès (IAM), puis sélectionnez ID de service.
- Si vous ne possédez pas d'ID de service, créez-en un.
- Cliquez sur l'icône Actions
> Gérer l'ID service.
- Cliquez sur Clés d'API.
- Cliquez sur l'icône Actions
> Supprimer.
Si vous n'avez pas créé l'ID de service et que vous êtes le propriétaire de compte ou un administrateur du service d'identité IAM, vous pouvez supprimer des clés d'API pour n'importe quel ID de service du compte. Accédez à la page Clés d'API et sélectionnez l'option Toutes les clés d'API d'ID de service dans le menu Afficher pour rechercher la clé d'API que vous souhaitez gérer.
Suppression d'une clé d'API pour un ID de service à l'aide de l'interface de ligne de commande
Vous pouvez supprimer une clé d'API associée à un ID de service. Cela dit, si vous supprimez une clé d'API qui est utilisée par une application, celle-ci ne pourra plus s'authentifier auprès de vos services. Pour supprimer une clé d'API pour un ID de service à l'aide de l'interface de ligne de commande, vous pouvez utiliser la commande ibmcloud iam service-api-key-delete.
ibmcloud iam service-api-key-delete NAME SERVICE_ID [-f, --force]
Création d'une clé d'API pour un ID de service à l'aide de l'API
Pour créer une clé API d'identification de service, appelez l'API IAM Identity Service comme indiqué dans l'exemple suivant.
curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -d '{
"name": "Service-apikey",
"description": "my service key",
"iam_id": "IBMid-123WEREW",
"account_id": "ACCOUNT_ID"
"store_value": false
}'
CreateApiKeyOptions createApiKeyOptions = new CreateApiKeyOptions.Builder()
.name(apiKeyName)
.iamId(iamId)
.description("Example ApiKey")
.build();
Response<ApiKey> response = service.createApiKey(createApiKeyOptions).execute();
ApiKey apiKey = response.getResult();
apikeyId = apiKey.getId();
System.out.println(apiKey.toString());
const params = {
name: apikeyName,
iamId: iamId,
description: 'Example ApiKey',
};
iamIdentityService.createApiKey(params)
.then(res => {
apikeyId = res.result.id
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
api_key = iam_identity_service.create_api_key(
name=apikey_name,
iam_id=iam_id
).get_result()
apikey_id = api_key['id']
print(json.dumps(api_key, indent=2))
createAPIKeyOptions := iamIdentityService.NewCreateAPIKeyOptions(apikeyName, iamID)
createAPIKeyOptions.SetDescription("Example ApiKey")
apiKey, response, err := iamIdentityService.CreateAPIKey(createAPIKeyOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(apiKey, "", " ")
fmt.Println(string(b))
apikeyID = *apiKey.ID
Mise à jour d'une clé d'API pour un ID de service à l'aide de l'API
Pour modifier une clé API pour un identifiant de service à l'aide de l'API, appelez l'API IAM Identity Service comme indiqué dans l'exemple suivant :
curl -X PUT 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID' -H 'Authorization: Bearer TOKEN' -H 'If-Match: <value of etag header from GET request>' -H 'Content-Type: application/json' -d '{
"name": "Service-apikey",
"description": "my service key"
}'
UpdateApiKeyOptions updateApiKeyOptions = new UpdateApiKeyOptions.Builder()
.id(apikeyId)
.ifMatch(apikeyEtag)
.description("This is an updated description")
.build();
Response<ApiKey> response = service.updateApiKey(updateApiKeyOptions).execute();
ApiKey apiKey = response.getResult();
System.out.println(apiKey.toString());
const params = {
id: apikeyId,
ifMatch: apikeyEtag,
description: 'This is an updated description',
};
iamIdentityService.updateApiKey(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
api_key = iam_identity_service.update_api_key(
id=apikey_id,
if_match=apikey_etag,
description='This is an updated description'
).get_result()
print(json.dumps(api_key, indent=2))
updateAPIKeyOptions := iamIdentityService.NewUpdateAPIKeyOptions(apikeyID, apikeyEtag)
updateAPIKeyOptions.SetDescription("This is an updated description")
apiKey, response, err := iamIdentityService.UpdateAPIKey(updateAPIKeyOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(apiKey, "", " ")
fmt.Println(string(b))
Verrouillage et déverrouillage d'une clé d'API pour un ID de service à l'aide de l'API
Vous pouvez empêcher la suppression des clés d'API représentant l'identité de l'ID de service en les verrouillant.
Verrouillage d'une clé d'API
Pour verrouiller une clé API pour un identifiant de service à l'aide de l'API, appelez l'API IAM Identity Service comme indiqué dans l'exemple suivant :
curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
LockApiKeyOptions lockApiKeyOptions = new LockApiKeyOptions.Builder()
.id(apikeyId)
.build();
service.lockApiKey(lockApiKeyOptions).execute();
const params = {
id: apikeyId,
};
iamIdentityService.lockApiKey(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
response = iam_identity_service.lock_api_key(id=apikey_id)
print(response)
lockAPIKeyOptions := iamIdentityService.NewLockAPIKeyOptions(apikeyID)
response, err := iamIdentityService.LockAPIKey(lockAPIKeyOptions)
if err != nil {
panic(err)
}
Déverrouillage d'une clé d'API
Pour déverrouiller une clé API pour un identifiant de service en utilisant l'API, appelez l'API IAM Identity Service comme indiqué dans l'exemple suivant :
curl -X DELETE 'https://iam.cloud.ibm.com/v1/serviceids/SERVICE_ID_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
UnlockServiceIdOptions unlockServiceIdOptions = new UnlockServiceIdOptions.Builder()
.id(svcId)
.build();
service.unlockServiceId(unlockServiceIdOptions).execute();
const params = {
id: svcId,
};
iamIdentityService.unlockServiceId(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
done(err);
});
response = iam_identity_service.unlock_service_id(id=svc_id)
print(response)
unlockServiceIDOptions := iamIdentityService.NewUnlockServiceIDOptions(svcID)
response, err := iamIdentityService.UnlockServiceID(unlockServiceIDOptions)
if err != nil {
panic(err)
}
Suppression d'une clé d'API pour un ID de service à l'aide de l'API
Pour supprimer une clé API par pour un identifiant de service à l'aide de l'API, appelez l'API IAM Identity Service comme indiqué dans l'exemple suivant :
curl -X DELETE 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
DeleteApiKeyOptions deleteApiKeyOptions = new DeleteApiKeyOptions.Builder()
.id(apikeyId)
.build();
service.deleteApiKey(deleteApiKeyOptions).execute();
const params = {
id: apikeyId,
};
iamIdentityService.deleteApiKey(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
delete_api_key(self,
id: str,
**kwargs
) -> DetailedResponse
response = iam_identity_service.delete_api_key(id=apikey_id)
print(response)
deleteAPIKeyOptions := iamIdentityService.NewDeleteAPIKeyOptions(apikeyID)
response, err := iamIdentityService.DeleteAPIKey(deleteAPIKeyOptions)
if err != nil {
panic(err)
}
Avant de commencer
Avant de pouvoir gérer les clés API d'ID de service à l'aide de Terraform, assurez-vous d'avoir effectué les opérations suivantes :
- Installez le CLI Terraform et configurez le plug-in IBM Cloud Provider pour Terraform. Pour plus d'informations, voir le tutoriel Getting started with Terraform sur IBM Cloud®. Ce plug-in résume les API IBM Cloud utilisées pour effectuer cette tâche.
- Créez un fichier de configuration Terraform nommé
main.tf. Dans ce fichier, vous définissez les ressources en utilisant le langage de configuration HashiCorp. Pour plus d'informations, voir la documentation de Terraform.
Créer une clé API pour un identifiant de service à l'aide de Terraform
Suivez les étapes suivantes pour créer une clé API pour un identifiant de service à l'aide de Terraform.
-
Créez un argument dans votre fichier
main.tf. L'exemple suivant crée une clé API pour un identifiant de service en utilisant la ressourceibm_iam_service_api_key, oùnameest un nom unique pour identifier la clé API du service. Vous devez disposer d'un identifiant IAM du service pour effectuer cette tâche.resource "ibm_iam_service_id" "serviceID" { name = "servicetest" } resource "ibm_iam_service_api_key" "testacc_apiKey" { name = "testapikey" iam_service_id = ibm_iam_service_id.serviceID.iam_id }Pour plus d'informations, voir les détails de la référence des arguments sur la page Terraform Identity and Access Management(IAM ).
-
Une fois que vous avez fini de construire votre fichier de configuration, initialisez le CLI Terraform. Pour plus d'informations, voir Initialisation des répertoires de travail.
terraform init -
Fournir les ressources à partir du fichier
main.tf. Pour plus d'informations, voir Provisionnement de l'infrastructure avec Terraform.-
Exécutez
terraform planpour générer un plan d'exécution Terraform afin de prévisualiser les actions proposées.terraform plan -
Exécutez le site
terraform applypour créer les ressources définies dans le plan.terraform apply
-
Mise à jour d'une clé API pour un identifiant de service à l'aide de Terraform
Suivez les étapes suivantes pour mettre à jour une clé API pour un identifiant de service à l'aide de Terraform :
-
Créez un argument dans votre fichier
main.tf. Vous pouvez mettre à jour la clé API pour un identifiant de service en ajoutant de nouvelles valeurs aux optionsnameetiam_service_iddans l'exemple suivant.resource "ibm_iam_service_id" "serviceID" { name = "servicetest" } resource "ibm_iam_service_api_key" "testacc_apiKey" { name = "testapikey" iam_service_id = ibm_iam_service_id.serviceID.iam_id }Pour plus d'informations, voir les détails de la référence des arguments sur la page Terraform Identity and Access Management(IAM ).
-
Une fois que vous avez fini de construire votre fichier de configuration, initialisez le CLI Terraform. Pour plus d'informations, voir Initialisation des répertoires de travail.
terraform init -
Fournir les ressources à partir du fichier
main.tf. Pour plus d'informations, voir Provisionnement de l'infrastructure avec Terraform.-
Exécutez
terraform planpour générer un plan d'exécution Terraform afin de prévisualiser les actions proposées.terraform plan -
Exécutez le site
terraform applypour créer les ressources définies dans le plan.terraform apply
-
Suppression d'une clé API pour un identifiant de service à l'aide de Terraform
Vous devez avoir créé la clé API pour un identifiant de service à l'aide du fichier Terraform. Suivez les étapes suivantes pour supprimer une clé API pour un identifiant de service à l'aide de Terraform.
-
L'exemple suivant montre comment supprimer la clé API d'un identifiant de service.
resource "ibm_iam_service_id" "serviceID" { name = "servicetest" } resource "ibm_iam_service_api_key" "testacc_apiKey" { name = "testapikey" iam_service_id = ibm_iam_service_id.serviceID.iam_id }Pour plus d'informations, voir les détails de la référence des arguments sur la page Terraform Identity and Access Management(IAM ).
-
Une fois que vous avez fini de construire votre fichier de configuration, initialisez le CLI Terraform. Pour plus d'informations, voir Initialisation des répertoires de travail.
terraform init -
Fournir les ressources à partir du fichier
main.tf. Pour plus d'informations, voir Provisionnement de l'infrastructure avec Terraform.-
Exécutez
terraform planpour générer un plan d'exécution Terraform afin de prévisualiser les actions proposées.terraform plan -
Exécutez le site
terraform applypour créer les ressources définies dans le plan.terraform apply
-
Examen des clés API d'ID de service ayant fait l'objet d'une fuite à l'aide de la console
Si une fuite de clé API d'ID de service est détectée, vous pouvez utiliser la console pour l'examiner. Procédez comme suit :
- Connectez-vous à la console Web IBM Cloud.
- Sélectionnez le compte qui contient la clé API de l'ID de service de fuite.
- Allez dans Manage > Access > Service IDs.
- Sélectionnez le nom de l'ID de service.
- Sélectionnez Clés d'API.
- Sélectionnez le nom de la clé API divulguée pour la consulter.
Examen des clés API d'ID de service ayant fait l'objet d'une fuite à l'aide de l'interface de gestion (CLI)
Si une fuite de clé API d'ID de service est détectée, vous pouvez utiliser la CLI pour la vérifier. Procédez comme suit :
-
Connectez-vous à l'interface de ligne de commande IBM Cloud.
-
Exécutez la commande suivante :
ibmcloud iam service-api-key <API_key_ID> <service_id_name>