IBM Cloud Docs
Cómo trabajar con su cuenta de IBM Cloudant

Cómo trabajar con su cuenta de IBM Cloudant

Su cuenta es su punto de entrada para la API de IBM® Cloudant® for IBM Cloud®. Puede acceder a su cuenta utilizando el prefijo de dirección https://$ACCOUNT.cloudant.com.

Para el panel de instrumentos de IBM Cloudant, utilice siempre esta dirección: https://$ACCOUNT.cloudant.com/dashboard.html.

Si todavía no tiene una cuenta, inicie sesión en IBM Cloudant.

Para ver si se puede acceder a su cuenta de IBM Cloudant, ejecute GET sobre https://$ACCOUNT.cloudant.com. Si escribe mal el nombre de su cuenta es posible que obtenga el siguiente error, 503: Servicio no disponible. Puede ver los tipos de autenticación que están disponibles en la lista siguiente:

Autenticación de IAM

Puede realizar las siguientes tareas con IAM:

  • Gestionar el acceso de manera centralizada 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.

Para obtener más información, consulte Gestión de acceso o una visión general de IAM.

Autenticación

Autenticarse significa demostrar quién es. Para demostrar su identidad, proporcione sus credenciales de usuario para su verificación.

La autenticación básica es comparable a mostrar un ID en una entrada para que se compruebe cada vez que desee pasar. La autenticación de cookies es comparable a tener una llave de la puerta para poder entrar en siempre que desee. Dentro de IBM Cloudant, la llave (o clave) es una cookie denominada AuthSession.

Cuando crea o utiliza aplicaciones críticas de IBM Cloudant, la autenticación de cookies tiene más ventajas en comparación con la autenticación básica. Le animamos a utilizar la autenticación de cookies siempre que sea posible.

Autenticación básica

Para utilizar la autenticación básica, pase sus credenciales como parte de cada solicitud. Para pasar sus credenciales, añada una cabecera Authorization a la solicitud.

La cabecera incluye el esquema de autenticación Basic), seguido de la codificación BASE64 de una cadena creada por concatenación:

  • Su nombre de usuario
  • El carácter :
  • Su contraseña

En la práctica, muchas bibliotecas de aplicaciones que se utilizan para crear solicitudes HTTP pueden hacer esta codificación automáticamente.

Para más información, consulte Esquema de seguridad sobre autenticación básica.

Autorización

Después de autenticarse, la siguiente prueba consiste en decidir si tiene permiso para realizar determinadas tareas. Esta decisión se denomina autorización.

Cuando se autentica con el sistema IBM Cloudant, este "sabe" quién es usted. La siguiente pregunta es: ¿qué tareas se le permite realizar?

Puede crear una lista completa de todas las tareas posibles que puede realizar, para cada aspecto de un sistema IBM Cloudant, como por ejemplo una base de datos o un documento. Aunque resulta simple, este enfoque requeriría muchas listas largas. Mantener esas listas actualizadas y completa resulta impracticable.

Un enfoque mejor consiste en utilizar "roles". Las diversas tareas se pueden agrupar en colecciones que son típicas de algunos roles genéricos. Por ejemplo, la tarea de crear o suprimir una base de datos es característica de alguien con un rol administrativo. Del mismo modo, la tarea de crear o actualizar un documento es característica de alguien con un rol de "escritor".

En lugar de listar explícitamente cada tarea que puede hacer, se le otorgan uno o varios roles. Si tiene un rol, puede realizar todas las tareas asociadas a dicho rol.

Roles

La siguiente sección sólo se aplica a las credenciales heredadas. Para obtener más información sobre cómo utilizar roles con credenciales de IAM, consulte Roles deIBM Cloudant.

IBM Cloudant tiene diversos roles disponibles. Los roles se pueden asignar a cuentas de usuario o a claves de API.

En la tabla siguiente se definen los tres roles principales:

Funciones básicas
Rol Descripción
_admin Cambiar valores de seguridad, incluida la adición de roles.
_reader Leer documentos de la base de datos.
_writer Crear, actualizar y suprimir documentos (excepto documentos de diseño) en la base de datos.

Los roles _reader y _writer son exclusivos. Si un usuario tiene el rol _writer, no puede leer los documentos que se crean a menos que también tenga el rol _reader.

Es posible que desee asignar más de un rol. Por ejemplo, es posible que un usuario tenga que leer o escribir en documentos dentro de una base de datos, pero no necesite un control administrativo completo sobre la base de datos. Para cumplir este requisito, a la cuenta del usuario se le otorgan los roles _reader y _writer, pero no el rol _admin.

También hay varios roles "focalizados" disponibles. Estos roles proporcionan permisos para puntos finales de API específicos. Los permisos de los roles focalizados son similares a los permisos de los roles principales, pero se aplican solo al punto final de API específico.

En la tabla siguiente se definen los roles focalizados:

Funciones específicas
Rol Descripción Puntos finales de API
_design Permite crear, leer, modificar o suprimir el acceso a documentos de diseño. _design, _find, _index
_replicator Permite el acceso de lectura para replicar datos de una base de datos y el acceso de escritura para crear puntos de comprobación. _local, _replicate, _replicator
_security Permite el acceso de lectura y escritura al punto final /$DATABASE/_security. _security

La naturaleza del acceso que se otorga depende del punto final de API específico. Por ejemplo, el rol _design proporciona acceso que permite a un usuario o clave de API crear, leer, modificar o suprimir documentos de diseño. Si otorga acceso de este modo, la ventaja es que no es necesario que asigne los roles _reader o _writer que tienen una aplicación más amplia. Esta distinción es útil porque, de lo contrario, la cuenta autorizada podría leer o escribir en documentos dentro de la base de datos, que no sean los documentos de diseño.

Las credenciales que utiliza para iniciar sesión en el panel de control automáticamente tienen el rol _admin sobre todas las bases de datos que cree. A todos y a todo lo demás, incluidos los usuarios con los que comparte bases de datos y las claves de API que cree, se les debe asignar un rol de forma explícita para que puedan realizar las tareas correspondientes.

El nombre de usuario nobody especial se aplica a cualquiera o a cualquier aplicación que intente realizar tareas, pero no se ha autenticado con el sistema. Es decir, el nombre de usuario nobody se aplica a todos los intentos de conexión no autenticados. Por ejemplo, si una aplicación intenta leer datos de una base de datos, pero no se ha identificado, la tarea solo puede continuar si el usuario nobody tiene el rol _reader.

Se pueden otorgar roles más potentes a un usuario no autenticado que a un usuario autenticado. Por ejemplo, si el nombre de usuario de nobody se otorga intencionadamente _admin, A los roles _reader y _writer, pero a una cuenta de usuario autenticada como, por ejemplo, alexone, solo se le otorga el rol _reader. En este caso, es posible que el usuario no autenticado tenga un rol más potente que el usuario autenticado alexone.

Es importante comprender que el nombre de usuario de nobody no constituye una forma de proporcionar un conjunto predeterminado de permisos. El nombre de usuario nobody se utiliza para determinar los permisos para los usuarios no autenticados.

Determinación del rol que se debe asignar

Primero, determine el rol o los roles que se van a asignar a una cuenta de usuario o una clave de API. Es mejor asignar un rol con el número mínimo de permisos necesario para realizar las tareas para esa cuenta o clave de API.

Si las tareas corresponden a un aspecto específico, como por ejemplo trabajar con documentos de diseño o valores de seguridad, asigne un rol focalizado, como por ejemplo _design o _security.

Claves de API

La siguiente sección sólo se aplica a las credenciales heredadas. Para obtener más información sobre el uso de claves API con credenciales IAM, consulte Claves API IAM.

Utilice claves de API para habilitar el acceso a bases de datos para una persona o aplicación, pero sin crear una nueva cuenta de IBM Cloudant para dicha persona o aplicación. Una clave de API es un nombre de usuario y contraseña generados aleatoriamente. A la clave se le otorgan los permisos de acceso deseados sobre una base de datos.

Cuando se genera una clave y se otorgan los permisos de acceso necesarios, la clave de API se puede utilizar de la misma forma que una cuenta de usuario normal.

Sin embargo, las claves de API no son iguales que las cuentas de usuario normales. Una clave de API no tiene acceso al panel de control.

Una clave de API se utiliza principalmente para permitir que las aplicaciones accedan a una base de datos, con un nivel determinado de control de acceso.

Todas las instancias de IBM Cloudant que se despliegan desde la región de IBM Cloud® pública de Alemania se despliegan en entornos gestionados por la UE. Cualquiera La cuenta de IBM Cloudant o la clave de API que se genera fuera de un entorno gestionado por la UE no puede obtener acceso a una instancia de IBM Cloudant gestionada por la UE. Para obtener más información sobre IBM Cloudant en un entorno gestionado por la UE, consulte Ubicaciones y arrendamiento.

Creación de claves de API

Un método anterior de generar claves de API mediante la emisión del mandato POST sobre el punto final https://cloudant.com/api/generate_api_key está en desuso.

Puede crear una clave API de las dos maneras siguientes:

  1. Utilice el panel de control.
  2. Utilice la API IBM Cloudant para modificar los permisos.

Independientemente del método que elija, recuerde anotar el nombre de clave y la contraseña. Estos valores se generan aleatoriamente y no se pueden recuperar si se pierden o se olvidan.

Utilización de claves de API

Las claves de API se suelen generar mediante el uso de una cuenta que tiene al menos una base de datos. Se puede utilizar la clave de API con otras bases de datos, o incluso con otras cuentas.

Por defecto, una clave API no tiene permisos. Se le debe otorgar permisos de forma explícita.

Después de generar la clave API conceda a la clave permisos de acceso específicos para una base de datos concreta enviando una PUT solicitud a https://$ACCOUNT.cloudant.com/_api/v2/db/$DATABASE/_security.

No es necesario que la base de datos esté en la misma cuenta que la utilizada inicialmente para generar la clave API.

Para dar permiso a una clave API existente para acceder a una base de datos de otra cuenta, siga estos pasos:

  1. Recuperar los permisos de seguridad existentes para la base de datos.
  2. Añada los detalles de la clave API a los permisos de seguridad de la base de datos, junto con las funciones necesarias.

Para ver un ejemplo de este proceso, consulte el artículo del blog: Utilización de una clave de API de IBM Cloudant con varias bases de datos y cuentas de IBM Cloudant.

Supresión de claves de API

No se puede suprimir una clave de API. Una clave de API siempre está disponible para ser utilizada si conoce la clave y su contraseña. Sin embargo, la clave de API sólo es útil cuando se asigna a una base de datos y se asignan permisos para trabajar con la base de datos.

Para "suprimir" una clave de API, elimínela de la base de datos. Todos los permisos que se han asignado anteriormente a la clave de API para que funcione con esa base de datos se eliminan.

Para eliminar una clave de API mediante el panel de control

  1. Pulse Databases > Permissions.
  2. Pase el ratón por encima de la clave API que desea eliminar.
  3. Pulse la "X" que aparece cuando pasa el puntero del ratón sobre la clave de API.

Para eliminar una clave de API mediante la API de IBM Cloudant

Utilice la técnica de modificación de permisos para eliminar la clave API de la lista de usuarios con permiso de acceso.

Esta técnica funciona porque una clave de API es similar a un usuario y tiene permisos de acceso. Al eliminar la clave de API de la lista de usuarios que tienen permisos de acceso, se elimina la clave de API de la lista de usuarios que tienen acceso a la base de datos.

Para eliminar la clave de API, envíe una solicitud HTTP PUT al mismo _security punto final de API que utilizó para crear la clave de API. Esta solicitud elimina la clave de API de la lista de usuarios con permiso de acceso. Proporcione una lista actualizada de los nombres de usuario que tienen permiso de acceso. La lista actualizada no debe incluir la clave de API.

Utilización de la base de datos _users con IBM Cloudant

La siguiente sección sólo se aplica a las credenciales heredadas.

Puede utilizar la Base de datos de _users para gestionar roles en IBM Cloudant.

Los documentos de usuario que se almacenan en la base de datos _users deben estructurarse y rellenarse para cumplir con los requisitos de Apache CouchDB Los requisitosApache CouchDB.

Puede inhabilitar las comprobaciones de autorización de IBM Cloudant con el parámetro couchdb_auth_only:true. Para inhabilitar la seguridad de IBM Cloudant, PUT a JSON document to the _security endpoint of the database. Por ejemplo, https://$ACCOUNT.cloudant.com/$DATABASE/_security.

Consulte el ejemplo siguiente en el que se utiliza HTTP para enviar una solicitud de modificación:

PUT /$DATABASE/_security HTTP/1.1
Content-Type: application/json

Consulte el ejemplo siguiente para enviar una solicitud de modificación:

curl -H "Authorization: Bearer $API_BEARER_TOKEN" -X PUT "$SERVICE_URL/products/_security" -H "Content-Type: application/json" --data '{"members": {"names": ["user1", "user2"], "roles": ["developers"]}}'
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.Ok;
import com.ibm.cloud.cloudant.v1.model.PutSecurityOptions;
import com.ibm.cloud.cloudant.v1.model.SecurityObject;

import java.util.Arrays;

Cloudant service = Cloudant.newInstance();

SecurityObject members = new SecurityObject.Builder()
    .names(Arrays.asList("user1", "user2"))
    .roles(Arrays.asList("developers"))
    .build();

PutSecurityOptions securityOptions =
    new PutSecurityOptions.Builder()
        .db("products")
        .members(members)
        .build();

Ok response =
    service.putSecurity(securityOptions).execute()
        .getResult();

System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');

const service = CloudantV1.newInstance({});

const members: CloudantV1.SecurityObject = {
  names: ['user1', 'user2'],
  roles: ['developers']
};

service.putSecurity({
  db: 'products',
  members: members
}).then(response => {
  console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1, SecurityObject

service = CloudantV1.new_instance()

members = SecurityObject(
  names=['user1', 'user2'],
  roles=['developers']
)

response = service.put_security(
  db='products',
  members=members
).get_result()

print(response)
putSecurityOptions := service.NewPutSecurityOptions(
  "products",
)
putSecurityOptions.SetMembers(&cloudantv1.SecurityObject{
  Names: []string{"user1", "user2"},
  Roles: []string{"developers"},
})

ok, response, err := service.PutSecurity(putSecurityOptions)
if err != nil {
  panic(err)
}

b, _ := json.MarshalIndent(ok, "", "  ")
fmt.Println(string(b))

El ejemplo Go anterior requiere el siguiente bloque de importación:

import (
   "encoding/json"
   "fmt"
   "github.com/IBM/cloudant-go-sdk/cloudantv1"
)

Todos los ejemplos de Go requieren que se inicialice el objeto service. Para obtener más información, consulte los ejemplos de la Sección de autenticación de la documentación de la API.

Consulte la siguiente solicitud de modificación de ejemplo en formato JSON:

{
	"couchdb_auth_only": true,
	"members": {
		"names": ["member"],"roles":[]
	},
	"admins": {
		"names": ["admin"],"roles":[]
	}
}

Consulte la siguiente respuesta de ejemplo de una solicitud de modificación:

{
	"ok" : true
}