Funzioni avanzate dei criteri

In questa sezione vengono descritte le funzioni del linguaggio dei criteri che consentono di concedere un accesso più granulare.

Condizioni

Nell'ambito di un'istruzione criterio, è possibile specificare una o più condizioni che devono essere soddisfatte affinché l'accesso possa essere concesso.

Ogni condizione è costituita da una o più variabili predefinite per le quali si specificano valori nell'istruzione dei criteri. In seguito, quando un utente richiede l'accesso alla risorsa in questione, se la condizione nel criterio viene soddisfatta, restituisce true e la richiesta è consentita. Se la condizione non viene soddisfatta, viene restituito false e la richiesta non è consentita.

Esistono due tipi di variabili: quelle rilevanti per la richiesta stessa e quelle rilevanti per la risorsa su cui si sta eseguendo l'azione nella richiesta, nota anche come destinazione. Il nome della variabile viene preceduto dal prefisso request o target seguito da un punto. Ad esempio, esiste una variabile di richiesta denominata request.operation per rappresentare l'operazione API richiesta. Questa variabile consente di scrivere un'ampia istruzione dei criteri, ma di aggiungere una condizione in base all'operazione API specifica. Per un esempio, vedere Consenti agli utenti di scrivere oggetti nei bucket di storage degli oggetti.

Importante

La corrispondenza delle condizioni non fa distinzione tra maiuscole e minuscole. Ciò è importante da ricordare quando si scrivono le condizioni per i tipi di risorsa che consentono la denominazione con distinzione tra maiuscole e minuscole. Ad esempio, il servizio di storage degli oggetti ti consente di creare sia un bucket denominato "BucketA" che un bucket denominato "bucketA" nello stesso compartimento. Se si scrive una condizione che specifica "BucketA", verrà applicata anche a "bucketA", poiché la corrispondenza delle condizioni non fa distinzione tra maiuscole e minuscole.

Variabili non applicabili a una richiesta hanno prodotto una richiesta rifiutata

Se la variabile non è applicabile alla richiesta in entrata, la condizione restituisce false e la richiesta viene rifiutata. Di seguito sono riportate, ad esempio, le istruzioni dei criteri di base che consentono a un utente di aggiungere o rimuovere utenti da qualsiasi gruppo, ad eccezione degli amministratori.

Allow group GroupAdmins to use users in tenancy 
 where target.group.name != 'Administrators'

Allow group GroupAdmins to use groups in tenancy 
 where target.group.name != 'Administrators'

Dato il criterio di cui sopra, se GroupAdmins ha tentato di chiamare un'operazione API generale per utenti quali ListUsers o UpdateUser (che consente di modificare la descrizione dell'utente), la richiesta verrà rifiutata, anche se tali operazioni API sono coperte da use users. Questo perché l'istruzione dei criteri precedente per use users include anche la variabile target.group.name, ma la richiesta ListUsers o UpdateUser non implica la specifica di un gruppo. Non esiste un target.group.name per tali richieste, pertanto la richiesta viene rifiutata.

Se si desidera concedere anche l'accesso alle operazioni API utente generali che non coinvolgono un determinato gruppo, è necessaria un'istruzione aggiuntiva che fornisca il livello di accesso che si desidera concedere, ma senza la condizione. Ad esempio, se si desidera concedere l'accesso a ListUsers, è necessaria la seguente istruzione aggiuntiva:

Allow group GroupAdmins to inspect users in tenancy

Oppure, se si desidera concedere l'accesso a UpdateUser, è necessaria questa istruzione aggiuntiva (che copre anche ListUsers perché il verbo use include le funzionalità del verbo inspect):

Allow group GroupAdmins to use users in tenancy

Questo concetto generale si applica anche ai gruppi (ad esempio, ListGroups e UpdateGroup) e a qualsiasi altro tipo di risorsa con variabili di destinazione.

Per ulteriori informazioni sulla sintassi delle condizioni, vedere Condizioni. Per un elenco di tutte le variabili che è possibile utilizzare nei criteri, vedere le tabelle nella Panoramica sui criteri IAM.

Controllo dell'accesso basato su tag

Utilizzando le condizioni e un set di variabili di tag, è possibile scrivere criteri per l'accesso all'ambito in base alle tag applicate a una risorsa. L'accesso può essere controllato in base a una tag esistente nella risorsa richiedente (il gruppo o il gruppo dinamico nel criterio) o nella destinazione della richiesta (risorsa o compartimento). Il controllo dell'accesso basato su tag offre ulteriore flessibilità ai criteri consentendo di definire l'accesso che si estende su compartimenti, gruppi e risorse. Per informazioni dettagliate su come scrivere i criteri per l'accesso all'ambito tramite tag, vedere Utilizzo delle tag per gestire l'accesso.

Autorizzazioni

Le autorizzazioni sono le unità atomiche di autorizzazione che controllano la capacità di un utente di eseguire operazioni sulle risorse. Oracle definisce tutte le autorizzazioni nella lingua dei criteri. Quando si scrive un criterio che consente a un gruppo di accedere a un determinato verbo e a un determinato tipo di risorsa, in realtà si concede a tale gruppo l'accesso a una o più autorizzazioni predefinite. Lo scopo dei verbi è quello di semplificare il processo di concessione di più autorizzazioni correlate che coprono un ampio set di accesso o un particolare scenario operativo. Nelle sezioni successive vengono forniti maggiori dettagli ed esempi.

Relazione con i verbi

Per comprendere la relazione tra autorizzazioni e verbi, diamo un'occhiata a un esempio. Un'istruzione dei criteri che consente a un gruppo di utilizzare inspect volumes consente effettivamente al gruppo di accedere a un'autorizzazione denominata VOLUME_INSPECT (le autorizzazioni vengono sempre scritte con tutte le lettere maiuscole e i caratteri di sottolineatura). In generale, tale autorizzazione consente all'utente di ottenere informazioni sui volumi a blocchi.

Quando si passa da inspect > read > use > manage, il livello di accesso generalmente aumenta e le autorizzazioni concesse sono cumulative. La tabella seguente mostra le autorizzazioni incluse con ogni verbo per il tipo di risorsa volumes. Si noti che non vengono concesse autorizzazioni aggiuntive da inspect a read.

Ispeziona volumi Volumi lettura Usa volumi Gestisci volumi
VOLUME_INSPECT VOLUME_INSPECT

VOLUME_INSPECT

VOLUME_UPDATE

VOLUME_WRITE

VOLUME_INSPECT

VOLUME_UPDATE

VOLUME_WRITE

VOLUME_CREATE

VOLUME_DELETE

Per un elenco completo dei comandi dettagliati, vedere Dettagli per combinazioni Verb + Resource-Type di un servizio.

Relazione con le operazioni API

Ogni operazione API richiede che il chiamante abbia accesso a una o più autorizzazioni. Ad esempio, per utilizzare ListVolumes o GetVolume, è necessario disporre dell'accesso a una singola autorizzazione: VOLUME_INSPECT. Per collegare un volume a un'istanza, è necessario disporre dell'accesso a più autorizzazioni, alcune delle quali sono correlate al tipo di risorsa volumes, altre al tipo di risorsa volume-attachments e altre al tipo di risorsa instances:

  • VOLUME_WRITE
  • VOLUME_ATTACHMENT_CREATE
  • INSTANCE_ATTACH_VOLUME

Il riferimento ai criteri elenca le autorizzazioni necessarie per ogni operazione API. Ad esempio, per le operazioni API di Core Services, vedere la tabella in Autorizzazioni richieste per ogni operazione API.

Informazioni sull'accesso di un utente

Il linguaggio dei criteri è progettato per consentire di scrivere semplici istruzioni che coinvolgono solo verbi e tipi di risorse, senza dover indicare le autorizzazioni desiderate nell'istruzione. Tuttavia, possono verificarsi situazioni in cui un membro del team di sicurezza o un auditor desidera comprendere le autorizzazioni specifiche di cui dispone un determinato utente. Le tabelle nel riferimento ai criteri per ogni servizio mostrano i verbi supportati e le autorizzazioni associate. È possibile esaminare i gruppi in cui si trova l'utente e i criteri applicabili a tali gruppi e da lì compilare una lista delle autorizzazioni concesse. Tuttavia, avere un elenco delle autorizzazioni non è l'immagine completa. Le condizioni in un'istruzione criterio possono includere l'accesso di un utente oltre le autorizzazioni individuali (vedere la sezione successiva). Inoltre, ogni istruzione criterio specifica un determinato compartimento e può avere condizioni che definiscono ulteriormente l'ambito dell'accesso solo a determinate risorse in tale compartimento.

Definizione dell'ambito dell'accesso con autorizzazioni o operazioni API

In un'istruzione criterio è possibile utilizzare le condizioni combinate con le autorizzazioni o le operazioni API per ridurre l'ambito di accesso concesso da un verbo specifico.

Si supponga, ad esempio, di voler consentire al gruppo XYZ di elencare, ottenere, creare o aggiornare i gruppi (ad esempio, modificarne la descrizione), ma non di eliminarli. Per elencare, ottenere, creare e aggiornare i gruppi, è necessario un criterio con manage groups come verbo e tipo di risorsa. In base alla tabella in Dettagli per combinazioni Verbi + Tipo di risorsa, le autorizzazioni coperte sono le seguenti:

  • GROUP_INSPECT
  • GROUP_UPDATE
  • GROUP_CREATE
  • GROUP_DELETE

Per limitare l'accesso solo alle autorizzazioni desiderate, è possibile aggiungere una condizione che dichiari in modo esplicito le autorizzazioni che si desidera consentire:

Allow group XYZ to manage groups in tenancy

 where any {request.permission='GROUP_INSPECT',
            request.permission='GROUP_CREATE',
            request.permission='GROUP_UPDATE'}

Un'alternativa è un criterio che consente tutte le autorizzazioni ad eccezione di GROUP_DELETE:

Allow group XYZ to manage groups in tenancy where request.permission != 'GROUP_DELETE'

Tuttavia, con questo approccio, tenere presente che tutte le nuove autorizzazioni che il servizio potrebbe aggiungere in futuro verranno automaticamente concesse al gruppo XYZ. Verrà omesso solo GROUP_DELETE.

Un'altra alternativa sarebbe quella di scrivere una condizione in base alle operazioni API specifiche. Si noti che, in base alla tabella in Autorizzazioni richieste per ogni operazione API, sia ListGroups che GetGroup richiedono solo l'autorizzazione GROUP_INSPECT. Ecco la politica:

Allow group XYZ to manage groups in tenancy

 where any {request.operation='ListGroups',  
            request.operation='GetGroup',
            request.operation='CreateGroup',
            request.operation='UpdateGroup'}

Può essere utile utilizzare le autorizzazioni anziché le operazioni API nelle condizioni. In futuro, se viene aggiunta una nuova operazione API che richiede una delle autorizzazioni elencate nel criterio basato sulle autorizzazioni sopra riportato, tale criterio controllerà già l'accesso del gruppo XYZ a tale nuova operazione API.

Tuttavia, è possibile definire ulteriormente l'ambito dell'accesso di un utente a un'autorizzazione specificando anche una condizione in base all'operazione API. Ad esempio, è possibile concedere a un utente l'accesso a GROUP_INSPECT, ma solo a ListGroups.

Allow group XYZ to manage groups in tenancy

 where all {request.permission='GROUP_INSPECT',  
            request.operation='ListGroups'}

Definizione dell'ambito dei criteri in base all'indirizzo IP del richiedente

È possibile definire l'ambito dell'accesso solo a un set di indirizzi IP consentiti. Ad esempio, puoi scrivere un criterio per consentire solo alle richieste provenienti da un determinato intervallo di IP pubblici di accedere a un bucket di storage degli oggetti specifico oppure puoi consentire solo a subnet specifiche di una VCN specifica di effettuare richieste tramite un gateway di servizi.

Per limitare l'accesso a un set di indirizzi IP, effettuare le operazioni riportate di seguito.

  1. Creare un oggetto di origine di rete che specifichi gli indirizzi IP consentiti. Per i dettagli, vedere Gestione delle origini di rete.
  2. Scrivere un criterio che utilizza l'oggetto di origine di rete in una condizione.

Utilizzare la variabile seguente nel criterio:

request.networkSource.name='<network_source_name>'

Ad esempio:

allow group GroupA to manage object-family in tenancy where request.networkSource.name='corpnet'

Limitazione dell'accesso alle risorse in base all'intervallo di tempo

È possibile utilizzare variabili basate sul tempo nei criteri per limitare l'accesso concesso nel criterio solo a determinati intervalli di tempo. Questa funzione consente di limitare le azioni sulle risorse a orari specifici. Ad esempio, è possibile creare un criterio che consenta l'accesso solo fino a una data specificata. Una politica di questo tipo sarebbe utile se l'azienda assume collaboratori e si desidera assicurarsi che l'accesso non sia consentito oltre la data di fine del contratto. In alternativa, è possibile consentire l'accesso alle risorse solo durante l'orario lavorativo (ad esempio, lunedì-venerdì 9:00 - 5:00 PM). Questa restrizione può ridurre il rischio che un cattivo attore apporti modifiche quando è più probabile che passino inosservati.

Di seguito sono riportate le variabili che è possibile utilizzare per definire l'accesso in base al tempo.

  • request.utc-timestamp
  • request.utc-timestamp.month-of-year
  • request.utc-timestamp.day-of-month
  • request.utc-timestamp.day-of-week
  • request.utc-timestamp.time-of-day

L'uso di queste variabili è descritto in modo più dettagliato nelle sezioni seguenti.

Informazioni per l'utilizzo di variabili basate sul tempo

È necessario specificare l'ora in cui le variabili utilizzano il formato ISO 8601: AAAA-MM-GGThh:mm:ssZ. Di seguito sono riportati alcuni esempi di questo formato.

  • Data e ora con secondi: '2020-04-01T15:00:00Z'
  • Dati e ora con minuti: '2020-04-01T05:00Z'
  • Solo data: '2020-04-01Z'
  • Solo ora: '05:00:00'

Anche se è possibile specificare un periodo di tempo inferiore a secondi, è necessario consentire una differenza di tempo di 5 minuti tra l'indicatore orario della richiesta e l'ora in cui la richiesta viene valutata dal servizio IAM. Questa differenza di tempo può essere causata da diversi fattori, quindi tieni presente questa potenziale discrepanza quando pianifichi e implementi le tue politiche basate sul tempo.

L'ora specificata viene valutata come ora coordinata universale (UTC). Ciò significa che è necessario calcolare l'ora UTC corretta per il fuso orario in cui viene valutato il criterio. Ad esempio, per specificare le ore 9:00 dell'ora standard del Pacifico per il valore di una variabile, immettere '17:00:00'. Se le impostazioni nazionali partecipano all'ora legale, sarà necessario aggiornare i criteri che fanno riferimento a un'ora specifica in cui la modifica dell'ora diventa effettiva.

Dettagli per ogni variabile basata sul tempo

L'uso di ogni variabile viene descritto nelle sezioni riportate di seguito.

request.utc: indicatore orario

Descrizione: l'ora di ricezione della richiesta per l'autorizzazione. È possibile scrivere un criterio che consenta l'accesso solo prima o dopo un indicatore orario di data e ora specifico. L'indicatore orario deve seguire il formato ISO 8601: AAAA-MM-GGThh:mm:ssZ ed essere in UTC (Coordinated Universal Time).

Operatori supportati: prima di | dopo

Valori consentiti: indicatore orario UTC (Coordinated Universal Time) in formato ISO 8601: AAAA-MM-GGThh:mm:ssZ

Valori di esempio:
  • '2020-04-01T00:00:00Z'
  • '2020-04-01T00:00Z'

Criterio di esempio: consentire al gruppo, ai collaboratori esterni, di accedere alle risorse instance-family solo fino a una determinata data:

Allow group Contractors to manage instance-family in tenancy where request.utc-timestamp before '2022-01-01T00:00Z'

L'accesso concesso dalla polizza al gruppo Contraenti scadrà il 1° gennaio 2022, 12:00 AM, UTC.

request.utc-timestamp.month-dell'anno

Descrizione: il mese dell'anno in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consenta l'accesso solo durante mesi specifici.

Operatori supportati: = | != | in

Valori consentiti: Mese numerico (corrispondente a ISO 8601)

Valori di esempio: '1', '2', '3', ... '12'

Criterio di esempio: consentire al gruppo SummerInterns di accedere alle risorse instance-family solo durante i mesi di giugno, luglio e agosto:

Allow group SummerInterns to manage instance-family in tenancy where ANY {request.utc-timestamp.month-of-year in ('6', '7', '8')}

L'accesso concesso dalla polizza al gruppo SummerInterns è valido solo nei mesi di giugno, luglio e agosto di un determinato anno.

request.utc-timestamp.day-del-mese

Descrizione: il giorno del mese in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consenta l'accesso solo per giorni specifici del mese. Tieni presente che l'intervallo della giornata viene calcolato in base all'UTC. Si supponga, ad esempio, di trovarsi a Miami, FL, USA e di immettere '1' per indicare il primo giorno del mese. Per il mese di febbraio, la politica sarà in vigore per le 12:00 AM fino alle 11:59 PM UTC il 1 ° febbraio, che a Miami è 7:00 PM il 31 gennaio fino alle 6:59 PM il 1 ° febbraio.

Operatori supportati: = | != | in

Valori consentiti: Giorno numerico del mese

Valori di esempio: '1', '2', '3', ... '31'

Criterio di esempio: consentire al gruppo ComplianceAuditors di leggere all-resources solo il primo giorno del mese.

Allow group ComplianceAuditors to read all-resources in tenancy where request.utc-timestamp.day-of-month = '1'

L'accesso concesso dal criterio al gruppo ComplianceAuditors è valido solo il primo giorno di ogni mese (il giorno è definito dall'ora UTC).

request.utc-timestamp.day-della-settimana

Descrizione: il giorno della settimana in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consenta l'accesso solo per giorni specifici della settimana. Si noti che l'intervallo del giorno viene calcolato in base a UTC. Si supponga, ad esempio, di trovarsi a Miami, FL, USA e di immettere 'monday'. La politica sarà in vigore dalle 12:00 alle 11:59 UTC di lunedì, che a Miami è alle 7:00 PM (EST) di domenica fino alle 6:59 PM di lunedì.

Operatori supportati: = | != | in

Valori consentiti: nome del giorno della settimana in inglese

Valori di esempio: 'Lunedì', 'Martedì', 'Mercoledì' e così via.

Criterio di esempio: consentire al gruppo, WorkWeek, di gestireinstance-family solo durante la settimana lavorativa dell'azienda.

Allow group WorkWeek to manage instance-family where ANY {request.utc-timestamp.day-of-week in ('monday', 'tuesday', 'wednesday', 'thursday', 'friday')}

L'accesso concesso dal criterio al gruppo WorkWeek è valido solo nei giorni specificati (il giorno è definito dall'ora UTC).

request.utc-timestamp.time-del-giorno

Descrizione: l'ora del giorno in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consenta l'accesso solo per un intervallo di tempo specifico durante il giorno. Si noti che l'ora del giorno viene calcolata in base all'ora UTC. Se si utilizza un fuso orario che implementa l'ora legale, sarà necessario aggiornare il criterio al variare dell'ora.

Operatori supportati: tra

Valori consentiti: Intervallo di tempo UTC in formato ISO 8601: hh:mm:ssZ

Valori di esempio: '01:00:00Z' AND '2:01:00Z'

Criteri di esempio: consenti al gruppo DayShift di gestire le istanze e le risorse correlate tra le ore 9:00 e le ore 5:00 PST (Pacific Standard Time).

Si noti che gli orari vengono convertiti in UTC:

Allow group DayShift to manage instance-family where request.utc-timestamp.time-of-day between '17:00:00Z' and '01:00:00Z'

Desidero consentire al gruppo NightShift di gestire le istanze e le risorse correlate tra le 5:00 PM e le 9:00 PST.

Allow group NightShift to manage instance-family where request.utc-timestamp.time-of-day between '01:00:00Z' and '17:00:00Z'

In entrambi questi esempi, l'ora corrente viene calcolata e testata per vedere se rientra o meno nell'intervallo fornito (ignorando il giorno in cui cade l'ora).