Chiamata dei servizi da un'istanza

Questo argomento descrive come autorizzare le istanze a chiamare i servizi in Oracle Cloud Infrastructure.

Introduzione

Questa procedura descrive come autorizzare un'istanza a effettuare chiamate API nei servizi Oracle Cloud Infrastructure. Dopo aver impostato le risorse e i criteri necessari, un'applicazione in esecuzione su un'istanza può chiamare i servizi pubblici di Oracle Cloud Infrastructure, eliminando la necessità di configurare le credenziali utente o un file di configurazione.

Concetti

GRUPPO DINAMICO
I gruppi dinamici ti consentono di raggruppare le istanze di Oracle Cloud Infrastructure come attori principali, simili ai gruppi di utenti. È quindi possibile creare criteri per consentire alle istanze di questi gruppi di effettuare chiamate API sui servizi Oracle Cloud Infrastructure. L'appartenenza al gruppo è determinata da una serie di criteri definiti, denominati regole di corrispondenza.
REGOLA DI CORRISPONDENZA
Quando si imposta un gruppo dinamico, vengono definite anche le regole per l'appartenenza al gruppo. Le risorse che corrispondono ai criteri della regola sono membri del gruppo dinamico. Le regole di corrispondenza hanno una sintassi specifica che si segue. Vedere Scrittura di regole di corrispondenza per definire i gruppi dinamici.
PRINCIPI ISTANZA
Funzione del servizio IAM che consente agli attori (o principal) autorizzati delle istanze di eseguire azioni sulle risorse del servizio. Ogni istanza di computazione dispone di una propria identità ed esegue l'autenticazione utilizzando i certificati aggiunti. Questi certificati vengono creati automaticamente, assegnati alle istanze e ruotati, evitando che sia necessario distribuire le credenziali agli host e ruotarle.

considerazioni sulla sicurezza

Qualsiasi utente che dispone dell'accesso all'istanza (che può eseguire l'accesso SSH all'istanza) eredita automaticamente i privilegi concessi all'istanza. Prima di concedere le autorizzazioni a un'istanza utilizzando questa procedura, assicurarsi di sapere chi può accedervi e che siano autorizzati con le autorizzazioni concesse all'istanza.

A tutti i principal dell'istanza di computazione viene concessa l'autorizzazione compartment_inspect. Non è possibile revocare questa autorizzazione. Questa autorizzazione consente all'istanza di ListCompartments nella tenancy di recuperare le informazioni riportate di seguito.

  • Nomi compartimento
  • Descrizioni compartimento
  • Tag in formato libero applicate ai compartimenti
  • Valori predefiniti tag automatici applicati ai compartimenti. Queste tag, ad esempio CreatedBy e CreatedOn, si trovano nello spazio di nomi Oracle-Tag e vengono aggiunte automaticamente da Oracle.

Panoramica processo

I passi seguenti riepilogano il flusso del processo per l'impostazione e l'utilizzo delle istanze come principal. Nelle sezioni successive vengono forniti ulteriori dettagli.

  1. Crea un gruppo dinamico. Nella definizione del gruppo dinamico, fornire le regole di corrispondenza per specificare le istanze che si desidera consentire per effettuare chiamate API sui servizi.

  2. Creare un criterio che conceda le autorizzazioni al gruppo dinamico per accedere ai servizi nella tenancy (o nel compartimento).

  3. Uno sviluppatore dell'organizzazione configura l'applicazione creata utilizzando l'SDK di Oracle Cloud Infrastructure per l'autenticazione utilizzando il provider dei principal dell'istanza. Lo sviluppatore distribuisce l'applicazione e l'SDK a tutte le istanze appartenenti al gruppo dinamico.

  4. L'SDK distribuito effettua chiamate alle API Oracle Cloud Infrastructure come consentito dal criterio (senza dover configurare le credenziali API).

  5. Per ogni chiamata API eseguita da un'istanza, il servizio di audit registra l'evento, registrando l'OCID dell'istanza come valore principalId nel log eventi. Per ulteriori informazioni, vedere Contenuto di un evento del log di controllo.

Passi per abilitare le istanze per chiamare i servizi

Scrittura dei criteri per i gruppi dinamici

Dopo aver creato un gruppo dinamico, è necessario creare criteri per consentire ai gruppi dinamici di accedere ai servizi Oracle Cloud Infrastructure.

Il criterio per i gruppi dinamici segue la sintassi descritta nella sezione Funzionamento dei criteri. Rivedere l'argomento per comprendere le funzioni di base dei criteri.

La sintassi per consentire a un gruppo dinamico di accedere alle risorse in un compartimento è la seguente:

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

La sintassi per consentire a un gruppo dinamico di accedere a una tenancy è la seguente:

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

Di seguito sono riportati alcuni criteri di esempio.

Per consentire a un gruppo dinamico (FrontEnd) di utilizzare un load balancer in un compartimento specifico (ProjectA):

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

Per consentire a un gruppo dinamico di avviare le istanze in un compartimento specifico, effettuare le operazioni riportate di seguito.

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

Per ulteriori criteri di esempio, vedere Criteri comuni.

Configurazione dell'SDK, dell'interfaccia CLI o di Terraform

Per informazioni sugli SDK, vedere Software Development Kits and Command Line Interface.

Per l'SDK per Java:

Creare un oggetto InstancePrincipalsAuthenticationDetailsProvider nell'SDK per Java. Ad esempio:

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

   InstancePrincipalsAuthenticationDetailsProvider provider =

      InstancePrincipalsAuthenticationDetailsProvider.builder().build();

   IdentityClient identityClient = new IdentityClient(provider);

...

Per l'SDK per Python:

Nel kit SDK per Python creare un oggetto oci.auth.signers.InstancePrincipalsSecurityTokenSigner. Ad esempio:

# 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)

...

Per aggiornare il token senza attendere, utilizzare il comando seguente:

signer.refresh_security_token()

Abilitazione dell'autorizzazione principal dell'istanza per l'interfaccia CLI

Per abilitare l'autorizzazione del principal dell'istanza dalla CLI, è possibile impostare l'opzione di autorizzazione (--auth) per un comando. Ad esempio:

oci os ns get --auth instance_principal

In alternativa, è possibile impostare la variabile di ambiente seguente:

OCI_CLI_AUTH=instance_principal

Se entrambi sono impostati, il valore impostato per --auth ha la precedenza sulla variabile di ambiente.

Per informazioni sull'uso dell'interfaccia CLI, vedere Working with the Command Line Interface.

Abilitazione dell'autorizzazione principal dell'istanza per Terraform

Per abilitare l'autorizzazione del principal dell'istanza in Terraform, è possibile impostare l'attributo auth su "InstancePrincipal" nella definizione del provider, come mostrato nell'esempio riportato di seguito.

variable "region" {}

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

}

Quando si utilizza l'autorizzazione principal dell'istanza, non è necessario includere gli attributi tenancy_ocid, user_ocid, fingerprint e private_key_path.

Domande frequenti

Come faccio a eseguire una query sul servizio di metadati dell'istanza per eseguire una query sul certificato nell'istanza?

Utilizzare questo comando curl: curl http://169.254.169.254/opc/v1/identity/cert.pem

Con quale frequenza viene ruotato il certificato su ogni istanza?

Il certificato viene ruotato più volte al giorno.

Cosa succede se si riceve un errore 401-Not Authenticated?
Se si riceve un errore 401-Not Authenticated, controllare i seguenti problemi:
  • Eseguire di nuovo il comando. A volte la rotazione del certificato e la richiesta si verificano contemporaneamente.
  • Il certificato potrebbe essere scaduto. Verificare che il certificato sia valido.
Posso modificare la frequenza di rotazione del certificato?

N. Impossibile modificare la frequenza di rotazione del certificato. È tuttavia possibile modificare il criterio nel gruppo dinamico. Se si ritiene che un'istanza sia stata compromessa, è possibile modificare il criterio nel gruppo dinamico per revocare le autorizzazioni per tutti i membri del gruppo oppure rimuovere l'istanza dal gruppo dinamico. Vedere È possibile rimuovere un'istanza da un gruppo dinamico?

Cosa succede se il certificato viene ruotato nel mezzo di un'operazione con tempi di esecuzione lunghi?

La scadenza del token è indipendente dal periodo di scadenza del certificato. Dipende anche dall'applicazione con cui stai interagendo. Ad esempio, se lo storage degli oggetti non dispone di un'operazione PUT multiparte, non importa per quanto tempo viene eseguita l'operazione.

I certificati sono accessibili per tutti gli utenti di un'istanza?

Sì. Assicurarsi che l'accesso all'istanza sia consentito solo agli utenti ai quali è stato concesso l'accesso al gruppo dinamico.

Posso rimuovere un'istanza da un gruppo dinamico?

Sì. È possibile rimuoverla modificando la regola di corrispondenza per escluderla. Per un esempio, vedere di seguito.

Posso escludere istanze specifiche in un compartimento dal gruppo dinamico?

Sì. Ad esempio, si supponga di voler escludere due istanze specifiche in un compartimento dal gruppo dinamico. Scrivere una regola di corrispondenza come questa:

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

La regola precedente include tutte le istanze nel compartimento ad eccezione di quelle con gli OCID specificati.