Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Automatizza l'aggiornamento del servizio metadati dell'istanza alla versione 2 solo per le istanze di OCI Compute utilizzando le regole degli eventi e le funzioni Python
Introduzione
Garantire sicurezza e coerenza tra gli ambienti cloud è una priorità per le aziende moderne. In Oracle Cloud Infrastructure (OCI), l'istanza Metadata Service (IMDS) fornisce informazioni critiche specifiche dell'istanza e l'applicazione della versione 2 (IMDSv2) migliora la sicurezza richiedendo l'autenticazione basata sulla sessione. L'automazione dell'upgrade a IMDSv2 in tutte le istanze di OCI Compute è un modo efficace per mantenere questo standard di sicurezza riducendo al contempo il carico di lavoro manuale.
Questa esercitazione descrive come creare un flusso di lavoro automatizzato e basato sugli eventi utilizzando le regole del servizio OCI Events e le funzioni OCI per applicare l'aggiornamento IMDSv2. Sfruttando l'automazione basata su Python, creerai e configurerai le risorse OCI necessarie, come gruppi dinamici, regole degli eventi e funzioni serverless per garantire la compliance con questo protocollo di sicurezza avanzato.
Obiettivi
- L'automazione dell'aggiornamento di IMDS alla versione 2 in OCI garantisce maggiore sicurezza e controllo sull'accesso ai metadati dell'istanza. Utilizzando le regole evento e le funzioni Python, è possibile creare un workflow automatico che applica questo aggiornamento ogni volta che vengono avviate nuove istanze. Questo approccio semplifica la gestione delle impostazioni dei metadati delle istanze mantenendo la coerenza in tutto l'ambiente cloud.
Prerequisiti
-
Oracle Cloud Infrastructure Command Line Interface (OCI CLI) e Python Software Development Kit (SDK): installa e configura OCI CLI e Python SDK per l'accesso programmatico.
-
Policy di Oracle Cloud Infrastructure Identity and Access Management (OCI IAM): assicurati che siano disponibili i criteri IAM OCI necessari per gestire gruppi dinamici, funzioni e regole di eventi.
-
OCID (Compartment Oracle Cloud Identifier): ottiene l'OCID del compartimento in cui verranno distribuite le risorse.
-
Ambiente Python: impostare Python con la libreria OCI installata (
pip install oci
). -
Impostazione delle funzioni OCI: assicurarsi che le funzioni OCI siano abilitate nella tenancy e che un ambiente Docker sia configurato per la distribuzione.
-
Autorizzazioni utente: assicurarsi di disporre delle autorizzazioni per creare e gestire le risorse OCI.
Task 1: creare un gruppo dinamico
Definire un gruppo dinamico per consentire alla funzione di accedere alle istanze di destinazione. Per utilizzare altri servizi OCI, la funzione deve far parte di un gruppo dinamico.
ALL {resource.type = 'fnfunc'}
Quando si specificano le regole di corrispondenza, si consiglia di trovare la corrispondenza tra tutte le funzioni di un compartimento e:
ALL {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaxxxxx'}
Task 2: Definisci criteri IAM OCI
Creare un nuovo criterio che consenta al gruppo dinamico di gestire le istanze di computazione. Concederemo l'accesso in gestione alle istanze nel compartimento specifico.
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
Task 3: Creare e distribuire le funzioni OCI
Creare, distribuire e richiamare la funzione per l'aggiornamento IMDS.
-
Creare un'applicazione in OCI Console.
Eseguire il login a OCI Console, passare a Servizi per sviluppatori, Funzioni e fare clic su Applicazioni. Selezionare l'area appropriata per OCI Functions e fare clic su Crea applicazione.
-
Impostare l'ambiente per la distribuzione delle funzioni, eseguire l'impostazione seguente sull'istanza di OCI Cloud Shell o OCI Compute (esecuzione di Oracle Linux 8) o su qualsiasi sistema in cui si prevede di creare e distribuire la funzione.
-
Installare le risorse seguenti: Installazione dell'interfaccia CLI, Installazione dell'interfaccia CLI di Fn Project e installazione dell'SDK Python di Oracle Cloud Infrastructure.
-
Per preparare l'ambiente, attenersi alla guida di impostazione dettagliata nelle funzioni OCI QuickStart in un'istanza di OCI Compute. Questa preparazione garantisce che l'ambiente sia pronto per la creazione, la distribuzione e la gestione delle funzioni OCI.
Nota: verificare di disporre di un repository creato nel registro OCI per le immagini delle funzioni.
-
-
Eseguire il login all'istanza OCI Cloud Shell o OCI Compute e accedere a OCI Cloud Shell o all'istanza OCI Compute in cui si creerà la funzione. Impostare il contesto per l'interfaccia CLI di OCI Functions per specificare l'area in cui verrà distribuita la funzione.
fn use context <region-name> Replace <region-name> with the appropriate region (e.g., ap-hyderabad-1).
-
Aggiornare il contesto con l'ID compartimento. Eseguire il comando riportato di seguito per impostare il compartimento in cui risiederà l'applicazione.
fn update context oracle.compartment-id <compartment-ocid>
-
Impostare il registro OCI. Immettere un prefisso di nome repository univoco per distinguere le immagini delle funzioni. Eseguire il comando seguente per aggiornare il registro.
fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name-prefix> Example: ap-hyderabad-1.ocir.io/namespace/prefix.
-
Generare un token di autenticazione dalla console OCI nel profilo utente ed eseguire il comando riportato di seguito per eseguire il login al registro contenitore utilizzando il token di autenticazione.
docker login -u '<tenancy-namespace>/<user-id>' <region-key>.ocir.io
-
Verificare che l'applicazione sia impostata correttamente elencando le applicazioni. Eseguire il comando riportato di seguito per visualizzare l'applicazione.
fn list apps
-
Creare una nuova funzione denominata
imdsupdate
utilizzando il runtime Python e inizializzare la funzione.fn init --runtime python imdsupdate
-
Eseguire il comando seguente per andare alla directory creata.
cd imdsupdate
-
Eseguire il comando
ls
per elencare i file generati.ls
Task 4: Aggiornare il codice della funzione Python
-
Aprire e modificare il file Python generato (ad esempio,
func.py
) nella directory e aggiungere il codice python seguente al file delle funzioni per la logica.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
-
Aggiornare il file
requirements.txt
.fdk>=0.1.86 oci==2.138.0
-
Eseguire il comando seguente per distribuire la funzione nell'applicazione creata.
fn -v deploy --app <application-name> Example: fn -v deploy --app functionpyth.
Questi passi garantiscono che la funzione venga creata, distribuita e pronta per essere richiamata per automatizzare gli aggiornamenti della versione IMDS in OCI.
Task 5: Definisci regola evento
Utilizzare il servizio OCI Events per rilevare quando viene creata una nuova istanza di OCI Compute.
Per configurare una regola evento, immettere le informazioni riportate di seguito.
- Origine evento: selezionare Istanza di calcolo.
- Condizione: selezionare Tipo di evento in Istanza - Fine lancio.
- Azione: selezionare Attiva una funzione, immettere funzioni, compartimento delle funzioni, applicazione delle funzioni e la funzione da attivare creata nel task 4.
Task 6: Convalida valore IMDS istanza
Avviare una nuova istanza per attivare la regola evento e verificare la configurazione del servizio metadati dell'istanza. Una volta completata la creazione della Virtual Machine (VM), imposterà automaticamente il valore IMDS solo sulla versione 2.
Queste configurazioni sono specifiche per area e compartimento. Se si desidera chiamare la stessa funzione in un compartimento diverso, creare una regola evento in tale compartimento e impostare una regola per attivare questa funzione.
Completando questi task, automatizzerai il processo di aggiornamento della versione IMDS in v2 per le istanze di OCI Compute in un compartimento specifico.
Collegamenti correlati
Conferme
- Autore - Akarsha I K (Cloud Architect)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Automate the Instance Metadata Service update to version 2 only for OCI Compute Instances using Event Rules and Python Functions
G24778-01
January 2025