Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Automatice la actualización del servicio de metadatos de instancia a la versión 2 solo para instancias de OCI Compute mediante reglas de eventos y funciones de Python
Introducción
Garantizar la seguridad y la coherencia en los entornos de nube es una prioridad para las empresas modernas. En Oracle Cloud Infrastructure (OCI), el servicio de metadatos de instancia (IMDS) proporciona información crítica específica de la instancia y la aplicación de su uso de la versión 2 (IMDSv2) mejora la seguridad al requerir autenticación basada en sesión. Automatizar el cambio de versión a IMDSv2 en todas las instancias de OCI Compute es una forma eficaz de mantener este estándar de seguridad y, al mismo tiempo, reducir la sobrecarga manual.
En este tutorial se muestra cómo crear un flujo de trabajo automatizado basado en eventos mediante las reglas del servicio OCI Events y OCI Functions para aplicar la actualización IMDSv2. Al aprovechar la automatización basada en Python, creará y configurará los recursos de OCI necesarios, como grupos dinámicos, reglas de eventos y funciones sin servidor para garantizar sin problemas el cumplimiento de este protocolo de seguridad mejorado.
Objetivos
- La automatización de la actualización de IMDS a la versión 2 en OCI garantiza una mejor seguridad y control del acceso a los metadatos de la instancia. Mediante el uso de reglas de eventos y funciones de Python, puede crear un flujo de trabajo automatizado que aplique esta actualización cada vez que se inicien nuevas instancias. Este enfoque simplifica la gestión de la configuración de metadatos de la instancia, al tiempo que mantiene la coherencia en su entorno en la nube.
Requisitos
-
Interfaz de línea de comandos (CLI de OCI) de Oracle Cloud Infrastructure y Python Software Development Kit (SDK): instale y configure la CLI de OCI y el SDK de Python para el acceso mediante programación.
-
Políticas de Oracle Cloud Infrastructure Identity and Access Management (OCI IAM): asegúrese de que las políticas de OCI IAM necesarias están en su lugar para gestionar grupos dinámicos, funciones y reglas de eventos.
-
Identificador de Oracle Cloud de compartimento (OCID): obtenga el OCID del compartimento en el que se desplegarán los recursos.
-
Entorno de Python: configure Python con la biblioteca de OCI instalada (
pip install oci
). -
Configuración de OCI Functions: asegúrese de que OCI Functions está activado en su arrendamiento y de que se ha configurado un entorno de Docker para el despliegue.
-
Permisos de usuario: asegúrese de que tiene permisos para crear y gestionar recursos de OCI.
Tarea 1: Creación de un grupo dinámico
Defina un grupo dinámico para permitir que la función acceda a las instancias de destino. Para utilizar otros servicios de OCI, la función debe formar parte de un grupo dinámico.
ALL {resource.type = 'fnfunc'}
Al especificar las reglas de coincidencia, sugerimos que todas las funciones de un compartimento coincidan con:
ALL {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaxxxxx'}
Tarea 2: Definición de políticas de OCI IAM
Cree una nueva política que permita al grupo dinámico gestionar instancias informáticas. Otorgaremos acceso de gestión a instancias en el compartimento específico.
Allow dynamic-group dmg-for-functions to manage instance-family in compartment Compartment-Name
Allow dynamic-group dmg-for-functions to manage functions-family in compartment Compartment-Name
Allow dynamic-group dmg-for-functions to use virtual-network-family in compartment Compartment-Name
Allow dynamic-group dmg-for-functions to manage instances in compartment Compartment-Name
Allow dynamic-group dmg-for-functions to read repos in compartment Compartment-Name
Tarea 3: Creación y despliegue de OCI Functions
Cree, despliegue y llame a la función para la actualización de IMDS.
-
Cree una aplicación en la consola de OCI.
Conéctese a la consola de OCI, vaya a Developer Services, Functions y haga clic en Aplicaciones. Seleccione la región adecuada para OCI Functions y haga clic en Crear aplicación.
-
Configure el entorno para el despliegue de funciones, realice la siguiente configuración en la instancia de OCI Cloud Shell o OCI Compute (que ejecuta Oracle Linux 8) o en cualquier sistema en el que tenga previsto crear y desplegar la función.
-
Instale los siguientes recursos: Instalación de la CLI, Instalación de la CLI de Fn Project e Instalación del SDK de Python de Oracle Cloud Infrastructure.
-
Siga la guía de configuración detallada de OCI Functions QuickStart en una instancia informática de OCI para preparar el entorno. Esta preparación garantiza que su entorno esté listo para crear, desplegar y gestionar OCI Functions sin problemas.
Nota: Verifique que tiene un repositorio creado en OCI Registry para las imágenes de función.
-
-
Conéctese a la instancia de OCI Cloud Shell o OCI Compute y acceda a OCI Cloud Shell o a la instancia de OCI Compute en la que creará la función. Defina el contexto para la CLI de OCI Functions para especificar la región en la que se desplegará la función.
fn use context <region-name> Replace <region-name> with the appropriate region (e.g., ap-hyderabad-1).
-
Actualice el contexto con el ID de compartimento. Ejecute el siguiente comando para definir el compartimento en el que residirá la aplicación.
fn update context oracle.compartment-id <compartment-ocid>
-
Configurar OCI Registry. Introduzca un prefijo de nombre de repositorio único para distinguir las imágenes de función. Ejecute el siguiente comando para actualizar el registro.
fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name-prefix> Example: ap-hyderabad-1.ocir.io/namespace/prefix.
-
Genere un token de autenticación desde la consola de OCI en su perfil de usuario y ejecute el siguiente comando para conectarse al registro de contenedor mediante el token de autenticación.
docker login -u '<tenancy-namespace>/<user-id>' <region-key>.ocir.io
-
Confirme que la aplicación se ha configurado correctamente enumerando las aplicaciones. Ejecute el siguiente comando para mostrar la aplicación.
fn list apps
-
Cree una nueva función denominada
imdsupdate
mediante el tiempo de ejecución de Python e inicialice la función.fn init --runtime python imdsupdate
-
Ejecute el siguiente comando para navegar hasta el directorio creado.
cd imdsupdate
-
Ejecute el comando
ls
para mostrar los archivos generados.ls
Tarea 4: Actualización del código de función de Python
-
Abra y edite el archivo Python generado (por ejemplo,
func.py
) en el directorio y agregue el siguiente código python al archivo de función para la lógica.import io import json import logging from fdk import response import oci def handler(ctx, data: io.BytesIO = None): try: # Authenticate using Instance Principals signer = oci.auth.signers.get_resource_principals_signer() body = json.loads(data.getvalue()) logging.getLogger().info("Event body: " + str(body)) # Extract Required Details From Event Rule instance_id = body["data"]["resourceId"] # Instance OCID action_type = body["eventType"] logging.getLogger().info("Action type: " + action_type) # Proceed only if instance creation event if action_type == "com.oraclecloud.computeapi.launchinstance.end": compute_client = oci.core.ComputeClient(config={}, signer=signer) update_instance_imds(compute_client, instance_id) except (Exception, ValueError) as ex: logging.getLogger().error("Error: " + str(ex)) return response.Response( ctx, response_data=json.dumps({"message": "Error: " + str(ex)}), headers={"Content-Type": "application/json"}, ) return response.Response( ctx, response_data=json.dumps({"message": "Function executed successfully"}), headers={"Content-Type": "application/json"}, ) def update_instance_imds(compute_client, instance_id): """ Updates the instance metadata service (IMDS) configuration to disable legacy endpoints. """ try: # Fetch instance details instance_details = compute_client.get_instance(instance_id).data # Update instance configuration update_details = oci.core.models.UpdateInstanceDetails( instance_options=oci.core.models.InstanceOptions( are_legacy_imds_endpoints_disabled=True # Disable legacy endpoints ) ) response = compute_client.update_instance(instance_id, update_details) logging.getLogger().info( f"Successfully updated IMDS for instance {instance_id}: {response.data}" ) except Exception as ex: logging.getLogger().error("Failed to update IMDS: " + str(ex)) raise
-
Actualice el archivo
requirements.txt
.fdk>=0.1.86 oci==2.138.0
-
Ejecute el siguiente comando para desplegar la función en la aplicación creada.
fn -v deploy --app <application-name> Example: fn -v deploy --app functionpyth.
Estos pasos garantizan que la función se cree, despliegue y esté lista para ser invocada para automatizar las actualizaciones de versión de IMDS en OCI.
Tarea 5: Definición de la regla de evento
Utilice el servicio OCI Events para detectar cuándo se crea una nueva instancia de OCI Compute.
Para configurar la regla de evento, escriba la siguiente información.
- Origen de evento: seleccione Instancia informática.
- Condition: seleccione Event Type en Instance – Launch End.
- Acción: seleccione Disparar una función, introduzca funciones, compartimento de función, aplicación de funciones y la función que se va a disparar que ha creado en la tarea 4.
Tarea 6: Validación del valor IMDS de la instancia
Inicie una nueva instancia para disparar la regla de evento y verificar la configuración del servicio de metadatos de instancia. Una vez que se haya completado la creación de la máquina virtual (VM), definirá automáticamente el valor IMDS solo en la versión 2.
Estas configuraciones son específicas de la región y el compartimento. Si desea llamar a la misma función en un compartimento diferente, cree una regla de evento en ese compartimento y defina una regla para disparar esta función.
Al completar estas tareas, automatizará el proceso de actualización de la versión de IMDS a v2 para instancias de OCI Compute en un compartimento específico.
Enlaces relacionados
Confirmaciones
- Autor: Akarsha I K (arquitecto de nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Automate the Instance Metadata Service update to version 2 only for OCI Compute Instances using Event Rules and Python Functions
G24775-01
January 2025