IBM Cloud Docs
Gestión de claves de API de ID de servicio

Gestión de claves de API de ID de servicio

Los ID de servicio se crean para permitir el acceso a los servicios de IBM Cloud® mediante aplicaciones alojadas tanto dentro como fuera de IBM Cloud. Las claves de API las utiliza una aplicación para autenticarse como un ID de servicio concreto y se les otorga el acceso que está asociado con dicho ID de servicio específico.

Después de crear un ID de servicio, puede empezar a crear claves de API y a asignar políticas de servicio. Cada política especifica el nivel de acceso permitido cuando se utiliza la clave de API para autenticarse con los servicios. Para obtener más información sobre la creación de un ID de servicio y la asignación de políticas, consulte Creación y trabajo con los ID de servicio. Para obtener más información sobre los mandatos de CLI que se utilizan para gestionar claves de API de ID de servicio, consulte Gestión de acceso de IAM, claves de API, ID de servicio y grupos de acceso.

Cada clave de API que está asociada con un ID de servicio hereda la política que se ha asignado al ID de servicio. Por ejemplo, si desea que una aplicación pueda ver recursos dentro de un servicio, debe utilizar una clave de API que esté asociada con un ID de servicio que tenga una política asignada con el rol de visor. Si desea que otra aplicación pueda tener acceso completo dentro de un servicio, es necesario utilizar una clave de API que esté asociada con un segundo ID de servicio que tenga una política asignada con el rol de administrador.

Para ver algunos ejemplos de cómo se puede utilizar un ID de servicio, vaya a Using HMAC credentials(Uso de credenciales HMAC ) en la documentación de Object Storage, o a este vídeo de IBM Cloud Data Engine sobre Cómo utilizar la API REST de IBM Cloud Data Engine.

Acceso necesario para la gestión de claves de API de ID de servicio

Todos los usuarios pueden crear ID de servicio en una cuenta, y son el administrador de dichos ID y pueden crear la clave de API y las políticas de acceso asociadas. Sin embargo, los propietarios de cuenta y los usuarios asignados al rol de Administrador en el servicio de identidad de IAM pueden gestionar las claves de API para todos los ID de servicio de una cuenta. A los usuarios también se les puede dar acceso a un único ID de servicio, si el ID se especifica cuando el administrador asigna el acceso.

Si es un usuario con el acceso necesario, puede ver, actualizar y suprimir claves de API para cualquier ID de servicio en la cuenta. Vaya a la página Claves de API y seleccione la opción Todas las claves de API del ID de servicio en el menú Ver para encontrar una clave de API para la que desea ver detalles, actualizar o suprimir.

Creación de una clave de API para un ID de servicio

Cree una clave de API para asociarla a un ID de servicio en la consola:

  1. En la consola de IBM Cloud, vaya a Gestionar > Acceso (IAM) y seleccione ID de servicio.
  2. Si no tiene un ID de servicio creado, créelo.
  3. Pulse el icono Acciones Icono Acciones > Gestionar ID de servicio.
  4. Pulse Claves de API.
  5. Pulse Crear.
  6. Añada un nombre y una descripción para identificar de forma sencilla la clave de API.
  7. Pulse Crear.
  8. Guarde la clave de API copiándola o descargándola a una ubicación segura.

Por motivos de seguridad, la clave de API sólo está disponible para copiarse o descargarse en el momento de la creación. Si se pierde la clave de API, deberá crear una nueva clave de API.

Actualización de una clave API para un ID de servicio mediante la consola

Puede actualizar una clave de API editando el nombre o la descripción que se utiliza para identificar la clave en la IU.

  1. En la consola de IBM Cloud, vaya a Gestionar > Acceso (IAM) y seleccione ID de servicio.
  2. Pulse el icono Acciones Icono Acciones > Gestionar ID de servicio.
  3. Pulse Claves de API.
  4. Pulse el icono Acciones Icono Acciones > Editar nombre y descripción.

Si no ha creado el ID de servicio, pero es el propietario de la cuenta o un administrador del servicio de identidad IAM, puede actualizar las claves de API para cualquier ID de servicio de la cuenta. Vaya a la página Claves de API y seleccione la opción Todas las claves de API del ID de servicio en el menú Ver para encontrar la clave de API con la que desea trabajar.

Creación de una clave de API para un ID de servicio utilizando la CLI

Para crear una clave de API para un ID de servicio utilizando la CLI, puede utilizar el mandato 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]

Actualización de una clave de API para un ID de servicio utilizando la CLI

Para actualizar una clave de API para un ID de servicio utilizando la CLI, puede utilizar el mandato 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]

Bloqueo de una clave de API de ID de servicio

Para las claves de API que representan la identidad del ID de servicio, puede impedir que la clave de API se suprima al bloquearla. Una clave de API bloqueada se indica mediante el icono Bloqueado Icono Bloqueado en la interfaz de usuario.

  1. En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione ID de servicio.
  2. Identifique la fila del ID de servicio para la que desee seleccionar una clave de API y seleccione el nombre del ID de servicio.
  3. Pulse Claves de API.
  4. Pase el puntero del ratón sobre la fila de la clave de API que desea bloquear y pulse el icono Acciones Icono Acciones para abrir una lista de opciones.
  5. Pulse Bloquear clave de API.

Puede desbloquear su clave de API en cualquier momento para actualizar, suprimir o añadir una política de acceso, o para eliminar la clave de API.

Bloqueo o desbloqueo de una clave de API de ID de servicio con la CLI

Para las claves de API que representan la identidad del ID de servicio, puede impedir que la clave de API se suprima al bloquearla. Una clave de API bloqueada se indica mediante el icono Bloqueado Icono Bloqueado en la interfaz de usuario. Para bloquear una clave de API de ID de servicio, utilice el mandato siguiente:

ibmcloud iam service-api-key-lock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]
Requisitos previos
Punto final, Inicio de sesión, Destino

Opciones de mandato:

APIKEY_NAME (necesario)
Nombre de la clave de API, exclusivo con APIKEY_UUID
APIKEY_UUID (necesario)
UUID de la clave de API, exclusivo con APIKEY_NAME
SERVICE_ID_NAME (necesario)
Nombre del ID de servicio, exclusivo con SERVICE_ID_UUID
SERVICE_ID_UUID (necesario)
UUID del ID de servicio, exclusivo con SERVICE_ID_NAME
-f, --force
Bloquear sin confirmación

Ejemplos:

Bloquear clave de API de servicio sample-key del ID de servicio sample-service:

ibmcloud iam service-api-key-lock sample-key sample-service

Para desbloquear una clave de API de ID de servicio, utilice el mandato siguiente:

ibmcloud iam service-api-key-unlock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]

Supresión de una clave de API para un ID de servicio

Puede suprimir una clave de API que esté asociada con un ID de servicio. Sin embargo, al suprimir una clave de API utilizada por una aplicación se elimina la posibilidad de que dicha aplicación se autentique con los servicios.

  1. En la consola de IBM Cloud, vaya a Gestionar > Acceso (IAM) y seleccione ID de servicio.
  2. Si no tiene un ID de servicio creado, créelo.
  3. Pulse el icono Acciones Icono Acciones > Gestionar ID de servicio.
  4. Pulse Claves de API.
  5. Pulse el icono Acciones Icono Acciones > Suprimir.

Si no ha creado el ID de servicio, pero es el propietario de la cuenta o un administrador del servicio de identidad IAM, puede suprimir las claves de API para cualquier ID de servicio de la cuenta. Vaya a la página Claves de API y seleccione la opción Todas las claves de API del ID de servicio en el menú Ver para encontrar la clave de API con la que desea trabajar.

Supresión de una clave de API para un ID de servicio mediante la CLI

Puede suprimir una clave de API que esté asociada con un ID de servicio. Sin embargo, al suprimir una clave de API utilizada por una aplicación se elimina la posibilidad de que dicha aplicación se autentique con los servicios. Para suprimir una clave de API para un ID de servicio utilizando la CLI, puede utilizar el mandato ibmcloud iam service-api-key-delete.

ibmcloud iam service-api-key-delete NAME SERVICE_ID [-f, --force]

Creación de una clave de API para un ID de servicio mediante la API

Para crear una clave API de ID de servicio, llame a la API IAM Identity Service como se muestra en el siguiente ejemplo.

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

Actualización de una clave de API para un ID de servicio mediante la API

Para editar una clave API para un ID de servicio utilizando la API, llame a la API IAM Identity Service como se muestra en el siguiente ejemplo:

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))

Bloqueo y desbloqueo de una clave de API para un ID de servicio mediante la API

Para las claves de API que representan la identidad del ID de servicio, puede impedir que la clave de API se suprima al bloquearla.

Bloqueo de una clave de API

Para bloquear una clave API para un ID de servicio utilizando la API, llame a la API IAM Identity Service como se muestra en el siguiente ejemplo:

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)
}

Desbloqueo de una clave de API

Para desbloquear una clave API para un ID de servicio mediante la API, llame a la API IAM Identity Service como se muestra en el siguiente ejemplo:

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)
}

Supresión de una clave de API para un ID de servicio mediante la API

Para eliminar una clave API mediante un ID de servicio utilizando la API, llame a la API IAM Identity Service como se muestra en el siguiente ejemplo:

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)
}

Antes de empezar

Antes de poder gestionar claves de API de ID de servicio utilizando Terraform, asegúrese de que ha completado lo siguiente:

  • Instale la CLI de Terraform y configure el plugin de proveedor de IBM Cloud para Terraform. Para obtener más información, consulte la guía de aprendizaje de Iniciación a Terraform en IBM Cloud®. El plug-in abstrae las API de IBM Cloud que se utilizan para completar esta tarea.
  • Cree un archivo de configuración de Terraform denominado main.tf. En este archivo, puede definir recursos utilizando HashiCorp Configuration Language. Para más información, consulte la documentación de Terraform.

Creación de una clave API para un ID de servicio mediante Terraform

Utilice los pasos siguientes para crear una clave de API para un ID de servicio utilizando Terraform.

  1. Cree un argumento en el archivo main.tf. El ejemplo siguiente crea una clave de API para un ID de servicio utilizando el recurso ibm_iam_service_api_key, donde name es un nombre exclusivo para identificar la clave de API de servicio. Debe necesitar un ID de IAM del servicio para poder completar la tarea.

    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
    }
    

    Para obtener más información, consulte los detalles de referencia de los argumentos en la página de Terraform Identity and Access Management(IAM).

  2. Después de terminar de crear el archivo de configuración, inicialice la CLI de Terraform. Para obtener más información, consulte Inicialización de directorios de trabajo.

    terraform init
    
  3. Suministre los recursos desde el archivo main.tf. Para obtener más información, consulte Infraestructura de suministro con Terraform.

    1. Ejecute terraform plan para generar un plan de ejecución de Terraform para obtener una vista previa de las acciones propuestas.

      terraform plan
      
    2. Ejecute terraform apply para crear los recursos definidos en el plan.

      terraform apply
      

Actualización de una clave API para un ID de servicio mediante Terraform

Utilice los pasos siguientes para actualizar una clave de API para un ID de servicio utilizando Terraform:

  1. Cree un argumento en el archivo main.tf. Puede actualizar la clave de API para un ID de servicio añadiendo nuevos valores a las opciones name y iam_service_id en el ejemplo siguiente.

    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
    }
    

    Para obtener más información, consulte los detalles de referencia de los argumentos en la página de Terraform Identity and Access Management(IAM).

  2. Después de terminar de crear el archivo de configuración, inicialice la CLI de Terraform. Para obtener más información, consulte Inicialización de directorios de trabajo.

    terraform init
    
  3. Suministre los recursos desde el archivo main.tf. Para obtener más información, consulte Infraestructura de suministro con Terraform.

    1. Ejecute terraform plan para generar un plan de ejecución de Terraform para obtener una vista previa de las acciones propuestas.

      terraform plan
      
    2. Ejecute terraform apply para crear los recursos definidos en el plan.

      terraform apply
      

Eliminación de una clave API para un ID de servicio mediante Terraform

Debe haber creado la clave de API para un ID de servicio utilizando el archivo Terraform. Utilice los pasos siguientes para suprimir una clave de API para un ID de servicio utilizando Terraform.

  1. El ejemplo siguiente muestra cómo suprimir la clave de API para un ID de servicio.

    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
    }
    

    Para obtener más información, consulte los detalles de referencia de los argumentos en la página de Terraform Identity and Access Management(IAM).

  2. Después de terminar de crear el archivo de configuración, inicialice la CLI de Terraform. Para obtener más información, consulte Inicialización de directorios de trabajo.

    terraform init
    
  3. Suministre los recursos desde el archivo main.tf. Para obtener más información, consulte Infraestructura de suministro con Terraform.

    1. Ejecute terraform plan para generar un plan de ejecución de Terraform para obtener una vista previa de las acciones propuestas.

      terraform plan
      
    2. Ejecute terraform apply para crear los recursos definidos en el plan.

      terraform apply
      

Revisión de claves API de ID de servicio filtradas mediante la consola

Si se detecta una clave API de ID de servicio filtrada, puede utilizar la consola para revisarla. Complete los pasossiguientes:

  1. Inicie la sesión en la consola de IBM Cloud.
  2. Seleccione la cuenta que contiene la clave API de ID de servicio filtrada.
  3. Vaya a Gestión > Acceso > ID de servicio.
  4. Seleccione el nombre del ID de servicio.
  5. Seleccione Claves de API.
  6. Seleccione el nombre de la clave API filtrada para revisarla.

Revisión de las claves API de ID de servicio filtradas mediante la CLI

Si se detecta una clave API de ID de servicio filtrada, puede utilizar la CLI para revisarla. Complete los pasossiguientes:

  1. Inicie una sesión en la CLI de IBM Cloud.

  2. Ejecute el mandato siguiente:

    ibmcloud iam service-api-key <API_key_ID> <service_id_name>