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 deWriter
en una sola base de datos, se aplican ambas políticas y el rol deWriter
, 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:
- 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.
- 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
oCheckpointer
).
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:
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
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.
-
Inicie sesión en
cloud.ibm.com
. -
Desde la lista de recursos, seleccione Servicios y la instancia de origen.
-
Pulse Credenciales de servicio y pulse Nueva credencial.
-
Asigne el nombre
replicator-source
a la nueva credencial y, a continuación, seleccione el rol Gestor. -
Pulse Añadir y tome nota del valor
apikey
, que encontrará en Visualizar credenciales en la columna Acciones.
-
-
Repita los pasos 2 a 2.c. para la instancia de destino.
-
Cree una credencial denominada
replicator-target
con el rol Gestor. -
Tome nota de la clave de API de IAM, que se halla en Visualizar credenciales en la columna Acciones.
-
-
Seleccione la instancia de origen y pulse Credenciales de servicio y Nueva credencial.
-
Asigne el nombre
apiaccess
a la nueva credencial y, a continuación, seleccione el rol Gestor. -
Tome nota de la clave de API de IAM real en Visualizar credenciales en la columna Acciones.
-
-
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:
-
Asegúrese de que las instancias de IBM Cloudant tienen habilitada la autenticación de IAM.
-
Actualice la aplicación para que utilice la autenticación de IAM en lugar de la autenticación antigua de IBM Cloudant.
-
Genere nuevas credenciales de servicio según sea necesario.
-
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.
-
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.
- En la consola de IBM Cloud, pulse Gestionar > Restricciones basadas en contexto y seleccione Zonas de red.
- Pulse Crear.
- Especifique un nombre exclusivo (por ejemplo,
cloudant-network
) y, opcionalmente, una descripción. - En
Reference a service
, seleccione el tipo de servicioIAM Services
y el servicioIBM Cloudant
. Pulse Añadir para asociar las direcciones IP deIBM Cloudant
con la zona de red. - Pulse Siguiente para revisar la zona de red.
- 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.
- En la consola de IBM Cloud, pulse Gestionar > Acceso (IAM) y seleccione Valores.
- En la sección Cuenta, habilite la configuración de acceso por dirección IP.
- En el campo
Allowed IP addresses
, añada el nombre de la zona de red que ha creado anteriormente (por ejemplo,cloudant-network
). - 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.
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.
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 |
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 |
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 |
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 |
Método | Punto final | Nombre de acción |
---|---|---|
PUT/DELETE |
/$DATABASE/_local/$DOCUMENT_ID |
cloudantnosqldb.local-document.write |
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í.