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:
- Nombres de compartimento
- Descripciones de compartimento
- Etiquetas de formato libre aplicadas a compartimentos
- Valores por defecto de etiqueta automática aplicados a compartimentos. Estas etiquetas, como CreatedBy y CreatedOn, están en el espacio de nombre Oracle-Tag y Oracle las agrega de forma automática.
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.
-
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.
-
Cree una política que otorgue permisos al grupo dinámico para acceder a los servicios de su arrendamiento (o compartimento).
-
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.
-
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).
-
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
Realice estas tareas para permitir que una instancia llame a servicios:
Cree un grupo dinámico y reglas de coincidencia
Creación de un grupo dinámico y reglas de coincidencia
Consulte Gestión de grupos dinámicos.
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
Utilice este comando curl: curl http://169.254.169.254/opc/v1/identity/cert.pem
El certificado se rota varias veces al día.
- 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.
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?
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.
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.
Sí. Puede eliminarla modificando la regla de coincidencia para excluirla. Se muestra un ejemplo a continuación.
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.