IBM Cloud Docs
Gestión del acceso de IBM Cloudant

Gestión del acceso de IBM Cloudant

IBM Cloud® Identity and Access Management proporciona un enfoque unificado para gestionar las identidades de usuario, los servicios y el control de acceso.

El texto siguiente describe la integración de IBM® Cloudant® for IBM Cloud® con IBM Cloud Identity and Access Management. Se tratan los temas siguientes:

  • Diferencias entre los controles de acceso heredados de IBM Cloudant y los controles de acceso de IBM Cloud IAM.
  • Ventajas y desventajas de cada unos de ellos para ayudarle a decidir cuál utilizar.
  • Cómo utilizar IAM en bibliotecas de cliente de IBM Cloudant mediante llamadas HTTP.
  • Descripción de las acciones y roles de IAM disponibles en IBM Cloudant.

Para obtener más información, consulte una visión general de IAM que incluye los temas siguientes:

  • Gestionar usuarios e ID de servicio.
  • Gestionar las credenciales disponibles.
  • Utilizar políticas de acceso de IAM que permitan y revoquen el acceso a las instancias de servicio de IBM Cloudant.

Diferencias entre los controles de acceso de IAM y antiguos de IBM Cloudant

La sección siguiente proporciona una breve visión general de las diferencias entre los controles de acceso heredados de IBM Cloudant y los mecanismos de control de acceso de IBM Cloud IAM.

IBM Cloud Identity and Access Management

  • Gestión de acceso gestionado de manera central en IBM Cloud.
  • Permitir a un usuario o servicio acceder a distintos recursos utilizando el mismo conjunto de credenciales (por ejemplo, el mismo usuario y contraseña o clave de API IAM).
  • Es posible otorgar acceso a las claves de API IAM a las funciones de gestión de cuenta, como la creación de bases de datos nuevas.

Controles de acceso heredados de IBM Cloudant

  • Exclusivo de IBM Cloudant.
  • El acceso a cada instancia de servicio requiere su propio conjunto de credenciales.
  • Utiliza la autenticación básica HTTP con las credenciales que no están enlazadas a un servicio o usuario individual.
  • Solo se pueden otorgar permisos a las claves de API de IBM Cloudant a nivel de base de datos.

Notas de clave de API

En este documento, cuando se menciona a las claves de API, se hace referencia a las claves de API de IAM. Los controles de acceso antiguos de IBM Cloudant también tiene un concepto de claves de API y cualquier discusión acerca de las credenciales o combinaciones de nombre de usuario y contraseña antiguas de IBM Cloudant incluye también claves de API de IBM Cloudant.

Habilitación de IAM con IBM Cloudant

Todas las instancias de servicio de IBM Cloudant suministradas en julio de 2018 o posteriores se suministran en grupos de recursos y están habilitadas con IBM Cloud IAM. Si lo desea, puede optar por habilitar también el mecanismo de autenticación de Legacy de IBM Cloudant. Cuando suministre una nueva instancia de IBM Cloudant del catálogo de IBM Cloud, seleccione uno de los siguientes métodos de autenticación.

Utilizar credenciales heredadas e IAM
Esta modalidad significa que se pueden utilizar las credenciales de IAM y de herencia para acceder a la cuenta. En concreto, se proporcionan conjuntos de credenciales Legacy e IAM para todas las aplicaciones vinculadas las credenciales de servicio y cuenta generadas.
Utilizar solo IAM
Este modo significa que solo se proporcionan credenciales IAM mediante el uso de la vinculación de servicios y la generación de credenciales.

Cuando se utilizan roles de IAM distintos de Manager como, por ejemplo, Reader, Writer, Monitor o Checkpointer, debe utilizar Utilizar solo IAM para evitar suministrar a los usuarios credenciales antiguas que incluyan permisos de acceso superiores.

Aplicación de políticas

Las políticas de IAM se aplican jerárquicamente desde el mayor nivel de acceso al más restringido, y las políticas más permisivas prevalecen sobre las menos permisivas. Por ejemplo, si un usuario tiene el rol de acceso al servicio Writer y Reader en una base de datos, se ignora la política que otorga el rol Reader.

Esto también es aplicable a las políticas de instancia de servicio y de nivel de base de datos.

  • Si un usuario tiene una política que le otorga el rol de administrador de seguridad ( Writer ) en una instancia de servicio y el rol de administrador de seguridad de base de datos ( Reader ) en una sola base de datos, se ignora la política a nivel de base de datos.
  • Si un usuario tiene una política que le otorga el rol de Reader en una instancia de servicio y el rol de Writer en una sola base de datos, se aplican ambas políticas y el rol de Writer, más permisivo, tendrá prioridad para la base de datos individual.

Si es necesario restringir el acceso a una sola base de datos (o conjunto de bases de datos), asegúrese de que el usuario o el ID de servicio no tengan ninguna otra política a nivel de instancia utilizando la consola o la CLI.

Consulte Prácticas recomendadas para organizar recursos y asignar accesos para obtener más información.

Claves de API de IBM Cloudant y Utilizar solo IAM

Es posible utilizar claves de API de IBM Cloudant junto con IAM, pero no se recomienda. Esta recomendación se hace porque las claves y permisos de API de IBM Cloudant no se pueden ver ni gestionar utilizando la interfaz de políticas de IAM, lo que hace imposible la gestión de acceso holístico.

La elección entre Utilizar solo IAM o Utilizar credenciales Legacy e IAM afecta a los factores siguientes:

  1. Si las credenciales heredadas a nivel de cuenta de IBM Cloudant están disponibles para gestionar bases de datos y otras acciones a nivel de cuenta.
  2. El estilo de credenciales que se entregan durante la generación de credenciales de servicio.

En particular, las claves de API de IBM Cloudant pueden utilizarse para gestionar el acceso a la base de datos. Dichas credenciales deben generarse y configurarse mediante la API HTTP.

Suministro mediante la línea de mandatos

Al suministrar una nueva instancia de IBM Cloudant desde la línea de mandatos, proporcione una opción a la herramienta ibmcloud utilizando el parámetro -p para habilitar o inhabilitar las credenciales heredadas de una cuenta. La opción se pasa en formato JSON y se denomina legacyCredentials.

Para suministrar una instancia como Utilizar solo IAM (recomendado), ejecute el mandato siguiente:

ibmcloud resource service-instance-create  "Instance Name" \
    cloudantnosqldb Standard us-south \
    -p {"legacyCredentials": false}

Cuando se utilizan roles de IAM distintos de Manager como, por ejemplo, Reader, Writer, Monitor o Checkpointer, debe utilizar Utilizar solo IAM para evitar suministrar a los usuarios credenciales antiguas que incluyan permisos de acceso superiores.

Para suministrar una instancia como Utilizar credenciales Legacy e IAM, ejecute el mandato siguiente:

ibmcloud resource service-instance-create  "Instance Name" \
    cloudantnosqldb Standard us-south \
    -p {"legacyCredentials": true}

Ejemplos JSON de credenciales de servicio para cada opción

La elección entre el control de acceso Utilizar solo IAM y Utilizar credenciales Legacy e IAM afecta a la manera en la que las credenciales se entregan a la aplicación al vincular y generar credenciales de servicio. Cuando se generan credenciales en la interfaz IBM Cloud IAM primaria, las claves de API se muestran en esa interfaz cuando se generan.

También puede generar credenciales desde la sección Credenciales de servicio de una instancia de servicio. Este tipo de generación de credenciales de servicio crea un blob JSON de credenciales de servicio que se puede pegar a las aplicaciones con todos los detalles necesarios para acceder a la instancia de servicio.

A continuación puede ver qué aspecto tienen el JSON de credenciales de servicio y lo que significa cada valor.

Al seleccionar Utilizar solo IAM, las credenciales de servicio que se generan contienen únicamente valores IAM y presentan el mismo aspecto que el que observamos en el ejemplo siguiente.

{
  "apikey": "MxVp86XHkU82Wc97tdvDF8qM8B0Xdit2RqR1mGfVXPWz",
  "iam_apikey_description": "Auto generated apikey during resource-key [...]",
  "iam_apikey_name": "auto-generated-apikey-050d21b5-5f[...]",
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager",
  "iam_serviceid_crn": "crn:v1:staging:public:iam-identity::[...]",
  "url": "https://76838001-b883-444d-90d0-46f89e942a15-bluemix.cloudant.com",
  "username": "76838001-b883-444d-90d0-46f89e942a15-bluemix"
}

Cada valor del ejemplo JSON anterior se debe interpretar utilizando las definiciones siguientes:

apikey
Clave de API de IAM.
iam_apikey_description
Descripción de la clave de API de IAM.
iam_apikey_name
ID de la clave de API de IAM.
iam_role_crn
El rol de IAM que tiene la clave de API de IAM.
iam_serviceid_crn
El CRN de ID de servicio.
url
URL de servicio IBM Cloudant.
username
El nombre de cuenta interno de IBM Cloudant.

Al seleccionar Utilizar tanto credenciales heredadas como IAM, las credenciales de servicio que se generan contienen credenciales heredadas e IAM y presentan un aspecto como el siguiente.

{
  "apikey": "MxVp86XHkU82Wc97tdvDF8qM8B0Xdit2RqR1mGfVXPWz",
  "host": "76838001-b883-444d-90d0-46f89e942a15-bluemix.cloudant.com",
  "iam_apikey_description": "Auto generated apikey during resource-key [...]",
  "iam_apikey_name": "auto-generated-apikey-050d21b5-5f[...]",
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager",
  "iam_serviceid_crn": "crn:v1:staging:public:iam-identity::[...]",
  "password": "8fb6a16b48903e87b769e7f4968521e85c2394ed8f0e69b2769e56dcb27d2e76",
  "port": 443,
  "url": "https://<username>:<password>@76838001-b883-444d-90d0-46f89e942a15-bluemix.cloudant.com",
  "username": "apikey-v2-58B528DF5397465BB6673E1B79482A8C"
}

Cada valor del ejemplo JSON anterior se debe interpretar utilizando las definiciones siguientes:

apikey
Clave de API de IAM.
host
Nombre de host del servicio IBM Cloudant.
iam_apikey_description
Descripción de la clave de API de IAM.
iam_apikey_name
ID de la clave de API de IAM.
iam_role_crn
El rol de IAM que tiene la clave de API de IAM.
iam_serviceid_crn
El CRN de ID de servicio.
password
La contraseña de credencial heredada de IBM Cloudant.
port
Puerto de servicio de IBM Cloudant.
url
URL de servicio de IBM Cloudant, incluidas las credenciales heredadas de IBM Cloudant incorporadas.
username
El nombre de usuario de credencial heredada de IBM Cloudant.

Tenga en cuenta que los valores username y password equivalen siempre a las credenciales del Gestor de IAM. Además, la utilización de Utilizar credenciales Legacy e IAM no es segura cuando se utiliza con los roles Reader, Writer, Monitor o Checkpointer de IAM.

¿Debo usar Utilizar solo IAM o Utilizar credenciales Legacy e IAM?

Si es posible, es preferible usar Utilizar solo IAM. Las principales ventajas de utilizar IBM Cloud IAM se muestran en la lista siguiente:

  • La gestión de acceso a IBM Cloudant con las herramientas estándares de IBM Cloud en lugar de una combinación de la gestión de credenciales específica de IBM Cloud y IBM Cloudant.
  • Las credenciales se pueden revocar y rotar al utilizar IBM Cloud IAM.

A continuación, se describe con más detalle las ventajas y desventajas de cada enfoque.

Cuando se utilizan roles de IAM distintos de Manager como, por ejemplo, Reader, Writer, Monitor o Checkpointer, debe utilizar Utilizar solo IAM para evitar suministrar a los usuarios credenciales antiguas que incluyan permisos de acceso superiores.

Ventajas y desventajas de los dos mecanismos de control de acceso

En general, IBM Cloud IAM es el modelo de autenticación recomendado. Sin embargo, las desventajas principales a este método se producen si tiene una aplicación o si no puede utilizar una biblioteca de cliente con soporte de IBM Cloudant.

Ventajas de la modalidad de IAM

  • Gestionar el acceso para muchos servicios utilizando una interfaz.
  • Revocar el acceso a un usuario globalmente.
  • Claves de API a nivel de cuenta mediante ID de servicio.
  • Credenciales fáciles de rotar.
  • Los registros de Activity Tracker capturan servicios y personas individuales.
  • IAM se une a otros sistemas de identidad, como los repositorios LDAP de empresa.
  • Hay permisos precisos (por ejemplo, Reader, Writer, Monitor o Checkpointer).

Desventajas de la modalidad IAM

  • Si no utiliza bibliotecas soportadas de IBM Cloudant, es posible que se requieran cambios de la aplicación para utilizar señales de acceso y claves de API de IAM.
  • Algunos puntos finales no están disponibles. Para obtener más información, consulte Puntos finales no disponibles.
  • No hay forma de especificar una base de datos como "pública", es decir, no se requiere un usuario autorizado para el acceso.

Ventajas de la modalidad antigua (legacy)

  • No es necesario modificar aplicaciones existentes o dependencias de biblioteca de cliente.

Desventajas de la modalidad antigua (legacy)

  • Gestión separada de credenciales de IBM Cloudant, por lo que no es posible obtener una visión general completa de todo el acceso dentro de la interfaz centralizada.

Políticas IAM a nivel de base de datos

Se pueden definir políticas IAM para restringir el acceso a bases de datos individuales o a aquellas bases de datos que coincidan con un patrón comodín.

Para seleccionar una base de datos, establezca el atributo Tipo de recurso en " database. Hay dos operadores disponibles:

Operadores IAM a nivel de base de datos
Operador Descripción
string equals coincide exactamente con un nombre de base de datos codificado mediante URL.
string matches coincidir utilizando un comodín de varios caracteres (*), que coincide con cualquier secuencia de cero o más caracteres, un comodín de un solo carácter (?), que coincide con cualquier carácter único, o ambos.

Los nombres de las bases de datos deben codificarse como URL en el campo ID de recurso de la política, excepto las barras inclinadas /. Esto no se aplica a ningún carácter comodín de la política.

Tenga en cuenta que si deja en blanco los campos Tipo de recurso o ID de recurso, se creará una política a nivel de instancia.

Ejemplos

Ejemplos de operadores IAM a nivel de base de datos
Descripción Atributo Operador Valor
bases de datos denominadas " movies Tipo de recurso string equals database
ID de recurso string equals movies
bases de datos que empiezan por " movies Tipo de recurso string equals database
ID de recurso string matches movies*
bases de datos denominadas " movies+new Tipo de recurso string equals database
ID de recurso string equals movies%2Bnew
bases de datos que empiezan por " movies+* Tipo de recurso string equals database
ID de recurso string matches movies%2B*
bases de datos denominadas " movies/new Tipo de recurso string equals database
ID de recurso string equals movies/new

Creación de un trabajo de réplica utilizando solamente las credenciales de IAM

Siga estas instrucciones para generar claves de API de IAM, para generar la señal portadora, para crear la base de datos _replicator y para crear el trabajo de réplica.

Generación de claves de IAM de API para el origen y el destino y una para el acceso de la API de IBM Cloudant

En este ejercicio, se crean las dos primeras claves de API de forma que las dos instancias puedan comunicarse entre sí durante el proceso de réplica. La tercera clave de API es para que el usuario acceda a la API de IBM Cloudant, para que cree la base de datos de _replicator y, a continuación, añada el documento de réplica a la misma.

Siga estos pasos para generar claves de API de IAM y acceder a la API para IBM Cloudant. Debe escribir las credenciales que se solicitan en los pasos siguientes para poder continuar con el ejemplo.

Asegúrese que seleccionar la instancia especificada, ya sea Origen o Destino.

  1. Inicie sesión en cloud.ibm.com.

  2. Desde la lista de recursos, seleccione Servicios y la instancia de origen.

    1. Pulse Credenciales de servicio y pulse Nueva credencial.

    2. Asigne el nombre replicator-source a la nueva credencial y, a continuación, seleccione el rol Gestor.

    3. Pulse Añadir y tome nota del valor apikey, que encontrará en Visualizar credenciales en la columna Acciones.

  3. Repita los pasos 2 a 2.c. para la instancia de destino.

    1. Cree una credencial denominada replicator-target con el rol Gestor.

    2. Tome nota de la clave de API de IAM, que se halla en Visualizar credenciales en la columna Acciones.

  4. Seleccione la instancia de origen y pulse Credenciales de servicio y Nueva credencial.

    1. Asigne el nombre apiaccess a la nueva credencial y, a continuación, seleccione el rol Gestor.

    2. Tome nota de la clave de API de IAM real en Visualizar credenciales en la columna Acciones.

  5. Anote los URL de la instancia de origen y de destino.

Dependiendo de su flujo de trabajo, en lugar de crear una credencial de nivel de servicio (paso 4), puede utilizar una clave API de IAM personal, como se detalla en Creación de una clave API.

También puede completar estos pasos en la línea de comandos utilizando la cadena de herramientas CLI de IBM Cloud.

Generación de una señal portadora para autenticarse en la API de IBM Cloudant

En el paso 4.b, ha anotado la tecla apiaccess. Utilice esta clave ahora:

curl -k -X POST \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --header "Accept: application/json" \
  --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
  --data-urlencode "apikey=aSCsx4...2lN97h_2Ts" \
  "https://iam.cloud.ibm.com/identity/token"

La clave apiaccess devuelve la información siguiente (abreviada):

{
   "access_token": "eyJraWQiOiIyMDE5MD...tIwkCO9A",
   "refresh_token": "ReVbNrHo3UA38...mq67g",
   "token_type": "Bearer",
   "expires_in": 3600,
   "expiration": 1566313064,
   "scope": "ibm openid"
}

Cree una variable de entorno para guardar algún tipo de escritura utilizando el valor de la clave access_token en los datos de respuesta:

export TOK="Bearer eyJraWQiOiIyMDE5MD...tIwkCO9A"

Creación de la base de datos _replicator en el lado de origen

El URL es el URL de la instancia de origen que ha escrito anteriormente en el paso 4.b.

curl -k -X PUT \
     -H"Content-type: application/json" \
     -H'Authorization: '"$TOK"'' \
     'https://d43caf1b-e2c8-4d3e-9b85-1d04839fa68f-bluemix.cloudant.com/_replicator'

Consulte los resultados en le ejemplo siguiente:

{"ok": "true"}

Creación del trabajo de réplica

Cree un archivo denominado data.json que contenga la información siguiente. Las dos claves son las claves de API de origen y de destino que se han creado al principio, así como los URL de las instancias de origen y de destino, con los nombres de las bases de datos añadidos.

{
  "source": {
    "url": "https://d43caf1b-e2c8-4d3e-9b85-1d04839fa68f-bluemix.cloudant.com/source",
    "auth": {
      "iam": {
        "api_key": "xju1...TxuS"
      }
    }
  },
  "target": {
    "url": "https://dbc68dd8-f69f-4083-97dd-bf0a3e1a467a-bluemix.cloudant.com/target",
    "auth": {
      "iam": {
        "api_key": "UElc7...QIaL01Bjn"
      }
    }
  },
  "create_target": true,
  "continuous": true
}

Ahora, escriba un documento de réplica denominado source_dest en la base de datos _replicator de la instancia de origen.

curl -k -X PUT \
     -H"Content-type: application/json" \
     -H'Authorization: '"$TOK"'' \
     'https://d43caf1b-e2c8-4d3e-9b85-1d04839fa68f-bluemix.cloudant.com/_replicator/source_dest' -d@data.json

Consulte los resultados en le ejemplo siguiente:

{"ok":true,"id":"source_dest","rev":"1-89b01e42968acd5944ed657b87c49f0c"}

Eliminación de credenciales Legacy de IBM Cloudant de una instancia

IBM Cloud IAM es el modelo de autenticación recomendado. Por motivos de seguridad, puede solicitar que se eliminen las credenciales Legacy de IBM Cloudant de modo que solo se pueda utilizar la autenticación de IAM para la instancia. El proceso correcto para eliminar las credenciales Legacy se muestra en los pasos siguientes:

  1. Asegúrese de que las instancias de IBM Cloudant tienen habilitada la autenticación de IAM.

  2. Actualice la aplicación para que utilice la autenticación de IAM en lugar de la autenticación antigua de IBM Cloudant.

  3. Genere nuevas credenciales de servicio según sea necesario.

  4. Abra un nuevo caso de soporte de IBM Cloud en el que solicite eliminar las credenciales Legacy de IBM Cloudant para la instancia. Incluya el nombre de usuario de la instancia, tal como se muestra en las credenciales de servicio. Para obtener más información, consulte Localización de las credenciales de servicio.

  5. Tras la respuesta del equipo de soporte indicando que se han eliminado las credenciales antiguas, las credenciales de servicio que se hayan creado antes de eliminar los detalles de nombre de usuario y contraseña antiguos que ya no sirven. Se recomienda eliminar este tipo de entradas de credenciales de servicio.

Realización de solicitudes a instancias mediante credenciales de IAM

Ahora, en la sección siguiente se describe cómo utilizar IBM Cloudant con las instancias de servicio a través de la autenticación de IAM. Se utilizan los detalles de Ejemplos JSON de credenciales de servicio para cada opción.

IBM Cloud IAM requiere que se intercambie una clave de API de IAM por una señal de acceso de tiempo limitado antes de realizar una solicitud a un recurso o servicio. La señal de acceso se incluye en la cabecera HTTP Authorization para el servicio. Cuando la señal de acceso caduca, la aplicación consumidora debe manejar la obtención de una nueva del servicio de señal de IAM. Para obtener más información, consulte la documentación Cómo obtener un token IAM de IBM Cloud mediante una clave API para obtener más detalles.

Las bibliotecas de cliente oficiales de IBM Cloudant manejan la obtención de una señal a partir de una clave de API. Puede acceder a IBM Cloudant directamente utilizando un cliente HTTP en lugar de una biblioteca de cliente de IBM Cloudant. Sin embargo, debe manejar el intercambio y la renovación de una señal de acceso de tiempo limitado utilizando una clave de API de IAM con el servicio de señal de IAM. Después de que la señal caduque, IBM Cloudant devuelve un código de estado HTTP 401.

Versiones de biblioteca de cliente necesarias

La conectividad de IAM está disponible en el release más reciente de todas las bibliotecas de cliente soportadas. Para obtener más información, consulte Bibliotecas de cliente.

Java

El siguiente enlace proporciona la última versión compatible de la biblioteca IBM Cloudant Java™:

Para ver un ejemplo que utiliza el SDK de IBM Cloudant para Java, consulte la documentación de la API y el SDK.

Node.js

El enlace siguiente proporciona la última versión soportada de la biblioteca IBM Cloudant Node.js:

Para ver un ejemplo que utiliza el SDK de IBM Cloudant para Node, consulte la documentación de la API y el SDK.

Python

El enlace siguiente proporciona la última versión soportada de la biblioteca IBM Cloudant Python:

Para ver un ejemplo que utiliza el SDK de IBM Cloudant para Python, consulte la documentación de la API y el SDK.

Go

El enlace siguiente proporciona la última versión soportada de la biblioteca IBM Cloudant Go:

Para ver un ejemplo que utiliza el SDK de Go de IBM Cloudant, consulte la documentación de la API y el SDK.

Acceso mediante el cliente HTTP

IBM Cloud IAM requiere que se intercambie una clave de API de IAM por una señal de acceso de tiempo limitado antes de realizar una solicitud a un recurso o servicio. La señal de acceso se incluye en la cabecera HTTP Authorization para el servicio. Cuando la señal de acceso caduca, el cliente debe manejar la obtención de una nueva del servicio de señal de IAM.

Tal como se ha indicado anteriormente, si se utiliza IBM Cloud IAM, es necesario que primero cambie una clave de API de IBM por una señal de acceso de tiempo limitado. Después, puede utilizar la señal para llevar a cabo una autenticación en la API de IBM Cloudant.

En Python, un ejemplo podría ser el siguiente:

import time

import requests

API_KEY = "MxVp86XHkU82Wc97tdvDF8qM8B0Xdit2RqR1mGfVXPWz"
ACCOUNT = "76838001-b883-444d-90d0-46f89e942a15-bluemix"

def get_access_token(api_key):
    """Retrieve an access token from the IAM token service."""
    token_response = requests.post(
        "https://iam.cloud.ibm.com/identity/token",
        data={
            "grant_type": "urn:ibm:params:oauth:grant-type:apikey",
            "response_type": "cloud_iam",
            "apikey": api_key
        },
        headers={
            "Accept": "application/json"
        }
    )
    if token_response.status_code == 200:
        print "Got access token from IAM"
        return token_response.json()['access_token']
    else:
        print token_response.status_code, token_response.json()
        return None

def main(api_key, account):
    access_token = None
    while True:
        if not access_token:
            access_token = get_access_token(api_key)

        if access_token:
            response = requests.get(
                "https://{0}.cloudant.com/_all_dbs".format(account),
                headers={
                    "Accept": "application/json",
                    "Authorization": "Bearer {0}".format(access_token)
                }
            )
            print "Got Cloudant response, status code", response.status_code
            if response.status_code == 401:
                print "Token has expired."
                access_token = None

        time.sleep(1)

if __name__ == "__main__":
    main(API_KEY, ACCOUNT)

Utilización de la lista de IP de IAM con Cloudant

Puede habilitar las restricciones de acceso a la dirección IP de IAM cuando utilice IBM Cloudant.

Para habilitar las restricciones de acceso a la dirección IP de IAM, debe asegurarse de que la lista de IP permitidas de Cloud Identity and Access Management (IAM) esté configurada para que el servicio IBM Cloudant pueda seguir funcionando. IAM lo utiliza IBM Cloudant al autenticar solicitudes en la API de IBM Cloudant que pasan credenciales de IAM y al ejecutar réplicas configuradas para autenticarse utilizando claves de API de IAM.

Las señales de IAM pueden ser válidas para hasta 60 minutos. Esto significa que los cambios en la lista de elementos permitidos de IP de IAM pueden no entrar en vigor completamente hasta que haya caducado este periodo de validación, ya que la lista de elementos permitidos sólo se aplica en el momento de la creación de la señal.

Creación de una zona de red

Para añadir IBM Cloudant a la lista de acceso de IAM, primero debe crear una Zona de red que incluya el servicio IBM Cloudant.

Para crear una zona de red, siga estos pasos.

  1. En la consola de IBM Cloud, pulse Gestionar > Restricciones basadas en contexto y seleccione Zonas de red.
  2. Pulse Crear.
  3. Especifique un nombre exclusivo (por ejemplo, cloudant-network) y, opcionalmente, una descripción.
  4. En Reference a service, seleccione el tipo de servicio IAM Services y el servicio IBM Cloudant. Pulse Añadir para asociar las direcciones IP de IBM Cloudant con la zona de red.
  5. Pulse Siguiente para revisar la zona de red.
  6. Pulse Crear.

Referencia a la zona de red en la lista de elementos permitidos de IP de IAM

La Zona de red creada anteriormente, denominada cloudant-network, se puede utilizar ahora en la Lista de elementos permitidos de IP de IAM.

  1. En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Valores.
  2. En la sección Cuenta, habilite la configuración de acceso por dirección IP.
  3. En el campo Allowed IP addresses, añada el nombre de la zona de red que ha creado anteriormente (por ejemplo, cloudant-network).
  4. Pulse Guardar.

Roles y acciones

En las tablas siguientes se incluye una lista completa de los roles de IAM de IBM Cloudant así como una correlación de las acciones permitidas para cada rol del sistema IAM.

Roles de IBM Cloudant

En la tabla siguiente se listan los roles de servicio de IAM disponibles para IBM Cloudant y una pequeña descripción de cada uno de ellos.

Roles de servicio IAM para IBM Cloudant
Rol Descripción
Manager Incluye la capacidad de acceder a todos los puntos finales y realizar todas las funciones administrativas en una instancia como, por ejemplo, la creación de bases de datos, el cambio de la capacidad, la lectura y escritura de datos e índices, y el acceso al panel de control.
Writer Incluye la capacidad de leer y escribir en todas las bases de datos y documentos pero no es posible crear índices.
Reader Incluye la capacidad de leer todas las bases de datos y documentos pero no permite escribir documentos nuevos ni crear índices.
Monitor Incluye la capacidad de leer punto finales de supervisión como, por ejemplo, _active_tasks y puntos finales de réplica _scheduler.
Checkpointer Incluye la capacidad de escribir los documentos checkpointer del _local de réplica. Obligatorio en las bases de datos de origen durante la réplica.

Gestor incluye todas las acciones de Lector y Escritor; y Escritor incluye todas las acciones de Lector.

Acciones de IBM Cloudant

En la tabla siguiente se describen las acciones y los roles de IAM disponibles. Para obtener una autorización precisa, puede utilizar los roles de Manager, Reader, Writer, Monitor o Checkpointer.

Cuando se utilizan roles de IAM distintos de Manager como, por ejemplo, Reader, Writer, Monitor o Checkpointer, debe utilizar Utilizar solo IAM para evitar suministrar a los usuarios credenciales antiguas que incluyan permisos de acceso superiores.

Acciones y asignación de la función de Gestor
Método Punto final Nombre de acción
GET/PUT /_api/v2/db/<path:db>/_security cloudantnosqldb.sapi.db-security
GET /_api/v2/user/capacity/throughput cloudantnosqldb.capacity-throughput.read
PUT /_api/v2/user/capacity/throughput cloudantnosqldb.capacity-throughput.write
GET /_api/v2/user/current/throughput cloudantnosqldb.current-throughput.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.read
POST /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.write
POST /_api/v2/api_keys cloudantnosqldb.sapi.apikeys
GET/POST /_api/v2/user/config/cors/ cloudantnosqldb.sapi.usercors
GET/PUT /_api/v2/user/plan cloudantnosqldb.sapi.userplan
GET /_api/v2/user/ccm_diagnostics cloudantnosqldb.sapi.userccmdiagnostics
GET /_api/v2/user/last_activity cloudantnosqldb.sapi.lastactivity
GET /_api/v2/support/tickets/$CASEID/files/$ATTACHMENTID cloudantnosqldb.sapi.supportattachments
GET/POST /_api/v2/support/tickets cloudantnosqldb.sapi.supporttickets
GET/PUT/DELETE /_api/v2/support/tickets/$CASEID cloudantnosqldb.sapi.supporttickets
GET /_api/v2/user cloudantnosqldb.sapi.userinfo
GET /_api/v2/usage/data_volume y /_api/v2/usage/$YEAR/$MONTH cloudantnosqldb.sapi.usage-data-volume
GET/HEAD / cloudantnosqldb.account-meta-info.read
GET/HEAD /_active_tasks cloudantnosqldb.account-active-tasks.read
GET/HEAD /_replicator cloudantnosqldb.replicator-database-info.read
GET/HEAD /_replicator/$DOCUMENT cloudantnosqldb.replication.read
GET/HEAD /_scheduler/jobs cloudantnosqldb.replication-scheduler.read
GET/HEAD /_scheduler/docs cloudantnosqldb.replication-scheduler.read
POST /_replicate cloudantnosqldb.replication.write
POST /_replicator cloudantnosqldb.replication.write
PUT/DELETE /_replicator cloudantnosqldb.replicator-database.create
PUT/DELETE /_replicator/$DOCUMENT cloudantnosqldb.replication.write
GET/HEAD /_up cloudantnosqldb.account-up.read
PUT /$DATABASE/ cloudantnosqldb.database.create
DELETE /$DATABASE cloudantnosqldb.database.delete
POST /$DATABASE/_design_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo_info cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_info/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_design/$DOCUMENT_ID/_search_disk_size/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_design/$DOCUMENT_ID/_search_info/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_index/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_design_docs cloudantnosqldb.any-document.read
GET /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
PUT /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.design-document.write
COPY /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.design-document.write
DELETE /$DATABASE/_design/$DOCUMENT_ID cloudantnosqldb.design-document.write
PUT /$DATABASE/_design/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.design-document.write
DELETE /$DATABASE/_design/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.design-document.write
POST/DELETE /$DATABASE/_index/$FURTHER_PATH_PARTS cloudantnosqldb.design-document.write
GET/HEAD /$DATABASE/_security cloudantnosqldb.database-security.read
PUT /$DATABASE/_security cloudantnosqldb.database-security.write
GET/HEAD /$DATABASE/_shards cloudantnosqldb.database-shards.read
COPY (Depende del tipo de documento de escritura.) /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read + cloudantnosqldb.design-document.write cualquiera o ambos cloudantnosqldb.local-document.write cualquiera o ambos cloudantnosqldb.data-document.write
GET /_membership cloudantnosqldb.cluster-membership.read
POST /$DATABASE/_ensure_full_commit cloudantnosqldb.database-ensure-full-commit.execute
PUT /_users cloudantnosqldb.users-database.create
GET/HEAD /_users cloudantnosqldb.users-database-info.read
DELETE /_users cloudantnosqldb.users-database.delete
GET/HEAD /_users/$DOCUMENT cloudantnosqldb.users.read
GET/POST /_users/_all_docs cloudantnosqldb.users.read
GET/POST /_users/_changes cloudantnosqldb.users.read
POST /_users/_missing_revs cloudantnosqldb.users.read
POST /_users/_revs_diff cloudantnosqldb.users.read
POST /_users/_bulk_get cloudantnosqldb.users.read
PUT/DELETE /_users/$DOCUMENT cloudantnosqldb.users.write
POST /_users/_bulk_docs cloudantnosqldb.users.write
POST /_users/ cloudantnosqldb.users.write
GET/HEAD /_uuids cloudantnosqldb.cluster-uuids.execute
POST /$DATABASE/ cloudantnosqldb.data-document.write or cloudantnosqldb.design-document.write or cloudantnosqldb.local-document.write
POST /$DATABASE/_bulk_docs cloudantnosqldb.data-document.write cualquiera o ambos cloudantnosqldb.design-document.write cualquiera o ambos cloudantnosqldb.local-document.write
PUT /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
PUT /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write
COPY (Depende del tipo de documento de escritura.) /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read + cloudantnosqldb.design-document.write cualquiera o ambos cloudantnosqldb.local-document.write cualquiera o ambos cloudantnosqldb.data-document.write
GET/HEAD /_iam_session cloudantnosqldb.iam-session.read
POST /_iam_session cloudantnosqldb.iam-session.write
DELETE /_iam_session cloudantnosqldb.iam-session.delete
GET/HEAD /_session cloudantnosqldb.session.read
POST /_session cloudantnosqldb.session.write
DELETE /_session cloudantnosqldb.session.delete
GET/HEAD /_all_dbs cloudantnosqldb.account-all-dbs.read
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
GET/POST /$DATABASE/_all_docs cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_changes cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
POST /$DATABASE/_bulk_get cloudantnosqldb.any-document.read
GET/POST /_search_analyze cloudantnosqldb.account-search-analyze.execute
POST /$DATABASE/_all_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_search/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_design/$DOCUMENT_ID/_view/$VIEW/queries cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_view/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_explain/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_find/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read
POST /$DATABASE/_missing_revs cloudantnosqldb.any-document.read
POST /$DATABASE/_revs_diff cloudantnosqldb.any-document.read
Acciones y asignación de la función Redactor
Método Punto final Nombre de acción
GET /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET/HEAD /_uuids cloudantnosqldb.cluster-uuids.execute
POST /$DATABASE/ cloudantnosqldb.data-document.write or cloudantnosqldb.design-document.write or cloudantnosqldb.local-document.write
POST /$DATABASE/_bulk_docs cloudantnosqldb.data-document.write cualquiera o ambos cloudantnosqldb.design-document.write cualquiera o ambos cloudantnosqldb.local-document.write
PUT /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID cloudantnosqldb.data-document.write
PUT /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
DELETE /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.data-document.write
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write
GET/HEAD /_iam_session cloudantnosqldb.iam-session.read
POST /_iam_session cloudantnosqldb.iam-session.write
DELETE /_iam_session cloudantnosqldb.iam-session.delete
GET/HEAD /_session cloudantnosqldb.session.read
POST /_session cloudantnosqldb.session.write
DELETE /_session cloudantnosqldb.session.delete
GET/HEAD /_all_dbs cloudantnosqldb.account-all-dbs.read
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
GET/POST /$DATABASE/_all_docs cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_changes cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
POST /$DATABASE/_bulk_get cloudantnosqldb.any-document.read
GET/POST /_search_analyze cloudantnosqldb.account-search-analyze.execute
POST /$DATABASE/_all_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_search/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_design/$DOCUMENT_ID/_view/$VIEW/queries cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_view/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_explain/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_find/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read
POST /$DATABASE/_missing_revs cloudantnosqldb.any-document.read
POST /$DATABASE/_revs_diff cloudantnosqldb.any-document.read
GET/HEAD / cloudantnosqldb.account-meta-info.read
POST /$DATABASE/_ensure_full_commit cloudantnosqldb.database-ensure-full-commit.execute
Acciones y asignación de la función de lector
Método Punto final Nombre de acción
GET /_api/v2/user/activity_tracker/events cloudantnosqldb.activity-tracker-event-types.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET/HEAD /_iam_session cloudantnosqldb.iam-session.read
POST /_iam_session cloudantnosqldb.iam-session.write
DELETE /_iam_session cloudantnosqldb.iam-session.delete
GET/HEAD /_session cloudantnosqldb.session.read
POST /_session cloudantnosqldb.session.write
DELETE /_session cloudantnosqldb.session.delete
GET/HEAD /_all_dbs cloudantnosqldb.account-all-dbs.read
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
GET/POST /$DATABASE/_all_docs cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_changes cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/$DOCUMENT_ID/$ATTACHMENT cloudantnosqldb.any-document.read
POST /$DATABASE/_bulk_get cloudantnosqldb.any-document.read
GET/POST /_search_analyze cloudantnosqldb.account-search-analyze.execute
POST /$DATABASE/_all_docs/queries cloudantnosqldb.any-document.read
GET/HEAD /$DATABASE/_design/$DOCUMENT_ID/_geo/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_search/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_design/$DOCUMENT_ID/_view/$VIEW/queries cloudantnosqldb.any-document.read
GET/POST /$DATABASE/_design/$DOCUMENT_ID/_view/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_explain/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
POST /$DATABASE/_find/$FURTHER_PATH_PARTS cloudantnosqldb.any-document.read
GET /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.any-document.read
POST /$DATABASE/_missing_revs cloudantnosqldb.any-document.read
POST /$DATABASE/_revs_diff cloudantnosqldb.any-document.read
GET/HEAD / cloudantnosqldb.account-meta-info.read
Acciones y asignación de la función Monitor
Método Punto final Nombre de acción
GET /_api/v2/usage/data_volume y /_api/v2/usage/$YEAR/$MONTH cloudantnosqldb.sapi.usage-data-volume
GET /_api/v2/user/capacity/throughput cloudantnosqldb.capacity-throughput.read
GET /_api/v2/user/current/throughput cloudantnosqldb.current-throughput.read
GET /_api/v2/user/capacity/databases cloudantnosqldb.account-capacity-dbs.read
GET /_api/v2/user/current/databases cloudantnosqldb.account-current-dbs.read
GET/HEAD / cloudantnosqldb.account-meta-info.read
GET/HEAD /_active_tasks cloudantnosqldb.account-active-tasks.read
GET/HEAD /_scheduler/jobs cloudantnosqldb.replication-scheduler.read
GET/HEAD /_scheduler/docs cloudantnosqldb.replication-scheduler.read
GET/HEAD /_up cloudantnosqldb.account-up.read
GET/HEAD /$DATABASE/_shards cloudantnosqldb.database-shards.read
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write
POST /_dbs_info cloudantnosqldb.account-dbs-info.read
GET /$DATABASE/ cloudantnosqldb.database-info.read
Acciones y asignación de la función Checkpointer
Método Punto final Nombre de acción
PUT/DELETE /$DATABASE/_local/$DOCUMENT_ID cloudantnosqldb.local-document.write

Puntos finales no disponibles

Los puntos finales siguientes no están disponibles para las solicitudes autorizadas con IAM:

  • Controladores de reescritura HTTP: /db/_design/design-doc/_rewrite/path.

A pesar de que los documentos de diseño pueden contener controladores de reescritura, los usuarios no pueden llamarlos.

  • Controladores de actualización: POST /db/_design/ddoc/_update/func.

Aunque los documentos de diseño pueden contener funciones de actualización, los usuarios no pueden llamarlos.

Resolución de problemas

Si no puede utilizar IAM para autenticarse al realizar solicitudes a la instancia de servicio de IBM Cloudant, verifique la cuenta tal como se indica en la sección siguiente.

Asegúrese de que la cuenta está habilitada para IAM

En la parte Visión general del panel de control de IBM Cloudant, el "método de autenticación" se muestra en los detalles del despliegue. Los métodos de autenticación disponibles se listan ahí.