Chiamata di servizi da un'istanza

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

Introduction

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 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 in questi gruppi di effettuare chiamate API sui servizi Oracle Cloud Infrastructure. L'appartenenza al gruppo è determinata da un set di criteri definiti, denominati regole di corrispondenza.
REGOLA DI CORRISPONDENZA
Quando si imposta un gruppo dinamico, è inoltre possibile definire 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 segui. Vedere Scrittura di regole di corrispondenza per definire i gruppi dinamici.
PRINCIPI ISTANZA
Funzione del servizio IAM che consente alle istanze di essere attori (o principal) autorizzati a eseguire azioni sulle risorse del servizio. Ogni istanza di computazione ha la propria identità e viene autenticata utilizzando i certificati aggiunti. Questi certificati vengono creati automaticamente, assegnati alle istanze e ruotati, evitando di dover distribuire le credenziali agli host e ruotarle.

Considerazioni sulla sicurezza

Qualsiasi utente che ha accesso all'istanza (che può eseguire SSH sull'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 di essere autorizzati con le autorizzazioni che si stanno concedendo all'istanza.

A tutti i principal delle istanze di computazione viene concessa l'autorizzazione compartment_inspect. Impossibile revocare questa autorizzazione. Questa autorizzazione consente all'istanza di ListCompartments nella tenancy di recuperare le informazioni riportate di seguito.

Panoramica processo

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

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

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

  3. Uno sviluppatore nella tua organizzazione configura l'applicazione creata utilizzando Oracle Cloud Infrastructure SDK per l'autenticazione utilizzando il provider di 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 effettuata 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 audit.

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 in Funzionamento dei criteri. Rivedere l'argomento per comprendere le funzioni dei criteri di base.

Di seguito è riportata la sintassi per consentire a un gruppo dinamico di accedere alle risorse in un compartimento.

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

Di seguito è riportata la sintassi per consentire l'accesso di un gruppo dinamico a una tenancy.

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 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 di SDK, CLI o Terraform

Per l'SDK per Java:

Nell'SDK per Java creare un oggetto InstancePrincipalsAuthenticationDetailsProvider. 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:

Nell'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 d'ambiente seguente:

OCI_CLI_AUTH=instance_principal

Si noti che 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 del 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}"

}

Tenere presente che 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 il certificato viene ruotato su ciascuna istanza?

Il certificato viene ruotato più volte al giorno.

Cosa succede se ricevo un errore 401-Not Authenticated?
Se si riceve un errore 401-Not Authenticated, controllare i seguenti problemi:
  • Provare a 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 cambiare 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 durante un'operazione di lunga durata?

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

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

Sì Assicurarsi che solo gli utenti a cui deve essere concesso l'accesso concesso al gruppo dinamico abbiano accesso all'istanza.

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ì Si supponga, ad esempio, 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 sopra riportata include tutte le istanze nel compartimento ad eccezione di quelle con gli OCID specificati.