Llamada a servicios desde instancias

En este tema, se describe cómo autorizar a las instancias a llamar a servicios en Oracle Cloud Infrastructure.

Introducción

Este procedimiento describe cómo autorizar una instancia para realizar llamadas de API en servicios de Oracle Cloud Infrastructure. Después de configurar los recursos y las políticas necesarios, una aplicación que se ejecuta en una instancia puede llamar a los servicios públicos de Oracle Cloud Infrastructure, eliminando la necesidad de configurar las credenciales de usuario o un archivo de configuración.

Conceptos

GRUPO DINÁMICO
Los grupos dinámicos permiten agrupar instancias de Oracle Cloud Infrastructure como actores principales, de manera similar a los grupos de usuarios. A continuación, puede crear políticas para permitir a las instancias de estos grupos realizar llamadas de API a los servicios de Oracle Cloud Infrastructure. La afiliación al grupo se determina mediante un juego de criterios definido, denominado reglas de coincidencia.
REGLA DE COINCIDENCIA
Cuando configura un grupo dinámico, también define las reglas de afiliación al grupo. Los recursos que coinciden con los criterios de las reglas son miembros del grupo dinámico. Las reglas de coincidencia tienen una sintaxis específica que debe seguir. Consulte Escritura de reglas de coincidencia para definir grupos dinámicos.
PRINCIPALES DE INSTANCIA
Función del servicio IAM que permite que las instancias sean actores (o principales) autorizados para realizar acciones en recursos de servicio. Cada instancia informática tiene su propia identidad y se autentica con los certificados que se le agregan. Estos certificados se crean, se asignan a instancias y se rotan automáticamente, de modo que usted no necesita distribuir credenciales a sus hosts y rotarlos.

Consideraciones acerca de la seguridad

Cualquier usuario con acceso a la instancia (es decir, que pueda acceder mediante SSH a la instancia), hereda automáticamente los privilegios otorgados a la instancia. Antes de otorgar permisos a una instancia mediante este procedimiento, asegúrese de que sabe quién puede acceder a ella y que se le autoriza con los permisos que otorga a la instancia.

A todos los principales de instancia informática se les otorga el permiso compartment_inspect. No puede revocar este permiso. Este permiso permite a la instancia mostrar los compartimentos (ListCompartments) en el arrendamiento para recuperar la siguiente información:

Visión general del proceso

En los siguientes pasos, se resume el flujo de proceso para configurar y utilizar instancias como principales. En las secciones siguientes se proporcionan más detalles.

  1. Cree un grupo dinámico. En la definición del grupo dinámico, proporciona las reglas de coincidencia para especificar a qué instancias desea autorizar para hacer llamadas de API a servicios.

  2. Cree una política que otorgue permisos al grupo dinámico para acceder a los servicios de su arrendamiento (o compartimento).

  3. Un desarrollador de su organización configura la aplicación creada mediante el SDK de Oracle Cloud Infrastructure para autenticarse utilizando el proveedor de principales de instancia. El desarrollador despliega la aplicación y el SDK en todas las instancias que pertenecen al grupo dinámico.

  4. El SDK desplegado realiza llamadas a las API de Oracle Cloud Infrastructure según lo permitido por la política (sin necesidad de configurar credenciales de API).

  5. Para cada llamada de API realizada por una instancia, el servicio Audit registra el evento, almacenando el OCID de la instancia como valor de principalId en el log de eventos. Consulte Contenido de un evento de log de auditoría para obtener más información.

Pasos para permitir que las instancias llamen a servicios

Escritura de políticas para grupos dinámicos

Después de que haya creado un grupo dinámico, debe crear políticas para permitir a los grupos dinámicos acceder a los servicios de Oracle Cloud Infrastructure.

La política para grupos dinámicos sigue la sintaxis descrita en Cómo funcionan las políticas. Revise ese tema para comprender las funciones básicas de la política.

La sintaxis para permitir el acceso de un grupo dinámico a los recursos de un compartimento es así:

Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in compartment <compartment_name>

La sintaxis para permitir el acceso de un grupo dinámico a un arrendamiento es así:

Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in tenancy

Estos son algunos ejemplos de políticas:

Para permitir que un grupo dinámico (FrontEnd) utilice un equilibrador de carga en un compartimento específico (ProjectA):

Allow dynamic-group FrontEnd to use load-balancers in compartment ProjectA

Para permitir a un grupo dinámico iniciar instancias en un compartimento específico:

Allow dynamic-group FrontEnd to manage instance-family in compartment ProjectA
Allow dynamic-group FrontEnd to use volume-family in compartment ProjectA
Allow dynamic-group FrontEnd to use virtual-network-family in compartment ProjectA

Para ver más ejemplos de políticas, consulte Políticas comunes.

Configuración del SDK, la CLI o Terraform

Para obtener información sobre los SDK, consulte Software development kits e interfaz de línea de comandos.

Para el SDK de Java:

En su SDK de Java, cree un objeto InstancePrincipalsAuthenticationDetailsProvider. Por ejemplo:

public static void main(String[] args) throws Exception {

   InstancePrincipalsAuthenticationDetailsProvider provider =

      InstancePrincipalsAuthenticationDetailsProvider.builder().build();

   IdentityClient identityClient = new IdentityClient(provider);

...

Para el SDK para Python:

En el SDK para Python, cree un objeto oci.auth.signers.InstancePrincipalsSecurityTokenSigner. Por ejemplo:

# By default this will hit the auth service in the region returned by http://169.254.169.254/opc/v1/instance/region on the instance.
			
signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
identity_client = oci.identity.IdentityClient(config={}, signer=signer)

...

Para refrescar el token sin esperar, utilice el siguiente comando:

signer.refresh_security_token()

Permitir autorización de principal de instancia para la CLI

Para permitir la autorización de principal de instancia desde la CLI, puede especificar la opción de autorización (--auth) para un comando. Por ejemplo:

oci os ns get --auth instance_principal

O puede especificar la siguiente variable de entorno:

OCI_CLI_AUTH=instance_principal

Tenga en cuenta que si se especifican ambas, el valor establecido para --auth tiene prioridad sobre la variable de entorno.

Para obtener información sobre el uso de la CLI, consulte Trabajar con la interfaz de línea de comandos.

Permitir autorización de principal de instancia para Terraform

Para permitir la autorización de principal de instancia en Terraform, puede definir el atributo auth como "InstancePrincipal" en la definición del proveedor, como se muestra en el siguiente ejemplo:

variable "region" {}

provider "oci" {
   auth = "InstancePrincipal"  
   region = "${var.region}"

}

Tenga en cuenta que cuando utiliza la autorización de principal de instancia, no necesita incluir los atributos tenancy_ocid, user_ocid, fingerprint ni private_key_path.

Preguntas frecuentes

¿Cómo puedo hacer consultas al servicio de metadatos de instancia en relación con el certificado de la instancia?

Utilice este comando curl: curl http://169.254.169.254/opc/v1/identity/cert.pem

¿Con qué frecuencia se rota el certificado en cada instancia?

El certificado se rota varias veces al día.

¿Qué sucede si recibo un error 401-Not Authenticated?
Si recibe un error 401-Not Authenticated, compruebe los siguientes problemas:
  • Vuelva a ejecutar el comando. A veces, la rotación del certificado y la solicitud se producen al mismo tiempo.
  • Es posible que el certificado haya caducado. Verifique que el certificado es válido.
¿Puedo cambiar la frecuencia con la que se rota el certificado?

No. No puede cambiar la frecuencia con la que se rota el certificado. Sin embargo, puede cambiar la política en el grupo dinámico. Si cree que una instancia corre peligro, puede cambiar la política en el grupo dinámico a fin de revocar permisos para todos los miembros del grupo, o bien puede eliminar la instancia del grupo dinámico. Consulte ¿Puedo eliminar una instancia de un grupo dinámico?

¿Qué sucede si el certificado se rota en medio de una operación de larga ejecución?

La caducidad del token es independiente del período de caducidad del certificado. Además, depende de la aplicación con la que esté interactuando. Por ejemplo, si Object Storage no tiene una operación PUT de varias partes, no importa el tiempo de ejecución de la operación.

¿Todos los usuarios de una instancia tienen acceso a los certificados?

Sí. Asegúrese de que solo los usuarios a los que se debe conceder el acceso que ha otorgado al grupo dinámico tengan acceso a la instancia.

¿Puedo eliminar una instancia de un grupo dinámico?

Sí. Puede eliminarla modificando la regla de coincidencia para excluirla. Se muestra un ejemplo a continuación.

¿Puedo excluir del grupo dinámico instancias específicas de un compartimento?

Sí. Por ejemplo, suponga que desea excluir del grupo dinámico dos instancias específicas de un compartimento. Escriba una regla de coincidencia como esta:

All {instance.compartment.id = '<compartment_ocid>',
 instance.id != '<instance1_to_exclude_ocid>', instance.id != '<instance2_to_exclude_ocid>'}

La regla anterior incluye todas las instancias del compartimento, excepto las que tengan los OCID especificados.