Funzioni dei criteri avanzati
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 dei criteri, è possibile specificare una o più condizioni che devono essere soddisfatte affinché l'accesso venga concesso.
Ogni condizione è costituita da una o più variabili predefinite per le quali si specificano i 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, restituisce false e la richiesta non è consentita.
Esistono due tipi di variabili: quelle rilevanti per la richiesta stessa e quelle relative alla risorsa su cui viene eseguita la richiesta, note anche come destinazione. Il nome della variabile viene preceduto di conseguenza da 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'istruzione criteri estesa, ma aggiunge una condizione basata sull'operazione API specifica. Per un esempio, vedere Consenti agli utenti della scrittura di oggetti nei bucket di storage degli elementi.
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 distinzione tra maiuscole e minuscole nella denominazione. Ad esempio, il servizio di storage degli oggetti 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 un risultato richiesta in una richiesta rifiutata
Se la variabile non è applicabile alla richiesta in entrata, la condizione restituisce false e la richiesta viene rifiutata. Ad esempio, di seguito sono riportate 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 tentasse di chiamare un'operazione API generale per utenti come ListUsers o UpdateUser (che consente di modificare la descrizione dell'utente), la richiesta verrebbe rifiutata, anche se tali operazioni API sono coperte da use users. Questo perché l'istruzione dei criteri di cui sopra 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 target.group.name per tali richieste, pertanto la richiesta viene rifiutata.
Se si desidera concedere l'accesso anche 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 questa 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 capacità 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 dei criteri IAM.
Controllo dell'accesso basato sui 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 consentendoti 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 in base alle 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 nel linguaggio dei criteri. Quando si scrive un criterio che consente a un gruppo di accedere a un particolare verbo e tipo di risorsa, si concede effettivamente 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 insieme di accesso o un particolare scenario operativo. Le sezioni successive forniscono maggiori dettagli ed esempi.
Relazione con i verbi
Per comprendere la relazione tra autorizzazioni e verbi, diamo un'occhiata a un esempio. Un'istruzione politica che consente a un gruppo di inspect volumes concede effettivamente al gruppo l'accesso a un'autorizzazione denominata VOLUME_INSPECT (le autorizzazioni sono 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.
Come si passa da inspect > read > use > manage, il livello di accesso in genere aumenta e le autorizzazioni concesse sono cumulative. La tabella seguente mostra le autorizzazioni incluse con ciascun verbo per il tipo di risorsa volumes. Si noti che non vengono concesse autorizzazioni aggiuntive da inspect a read.
| Ispeziona volumi | Leggi volumi | 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 i dettagli per le combinazioni di verbo e tipo di risorsa di un servizio.
Relazione con le operazioni API
Ogni operazione API richiede che il chiamante disponga dell'accesso a una o più autorizzazioni. Ad esempio, per utilizzare ListVolumes o GetVolume, è necessario disporre di un'unica autorizzazione: VOLUME_INSPECT. Per collegare un volume a un'istanza, è necessario disporre dell'accesso a più autorizzazioni, alcune delle quali correlate al tipo di risorsa volumes, altre al tipo di risorsa volume-attachments e altre correlate 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 dell'API 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 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 compilare una lista delle autorizzazioni concesse. Tuttavia, avere un elenco delle autorizzazioni non è il quadro completo. Le condizioni in un'istruzione criterio possono includere l'accesso di un utente oltre le autorizzazioni individuali (vedere la sezione successiva). Inoltre, ogni istruzione del criterio specifica un determinato compartimento e può avere condizioni che definiscono ulteriormente l'accesso solo a determinate risorse in tale compartimento.
Definizione dell'ambito dell'accesso con autorizzazioni o operazioni API
In un'istruzione dei criteri, è possibile utilizzare le condizioni combinate con autorizzazioni o operazioni API per ridurre l'ambito di accesso concesso da un determinato verbo.
Ad esempio, supponiamo che il gruppo XYZ sia in grado di elencare, ottenere, creare o aggiornare i gruppi (ad esempio, modificarne la descrizione), ma non 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 riportata in Dettagli per verbi + combinazioni di tipi 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 dichiara 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 sarebbe 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, tieni presente che qualsiasi nuova autorizzazione che il servizio potrebbe aggiungere in futuro verrà automaticamente concessa al gruppo XYZ. Verrà omesso solo GROUP_DELETE.
Un'altra alternativa sarebbe quella di scrivere una condizione basata sulle operazioni API specifiche. Si noti che, secondo la tabella riportata in Autorizzazioni richieste per ogni operazione API, sia ListGroups che GetGroup richiedono solo l'autorizzazione GROUP_INSPECT. Ecco la policy:
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 precedente, tale criterio controllerà già l'accesso del gruppo XYZ alla nuova operazione API.
Tuttavia, è possibile definire ulteriormente l'ambito dell'accesso di un utente a un'autorizzazione specificando anche una condizione basata sull'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'}Criterio di definizione ambito in base all'indirizzo IP del richiedente
È possibile estendere l'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.
- Creare un oggetto di origine di rete che specifichi gli indirizzi IP consentiti. Per ulteriori informazioni, vedere Gestione delle origini di rete.
- 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 come questa sarebbe utile se la tua azienda assumesse appaltatori e si desidera garantire 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 di lavoro (ad esempio, dal lunedì al venerdì dalle 9:00 alle 5:00 PM). Questa restrizione può ridurre il rischio che un cattivo attore faccia cambiamenti quando è più probabile che passino inosservati.
Di seguito sono riportate le variabili che è possibile utilizzare per definire l'ambito dell'accesso in base al tempo.
request.utc-timestamprequest.utc-timestamp.month-of-yearrequest.utc-timestamp.day-of-monthrequest.utc-timestamp.day-of-weekrequest.utc-timestamp.time-of-day
L'uso di queste variabili è descritto in modo più dettagliato nelle sezioni seguenti.
Informazioni sull'utilizzo delle variabili basate sul tempo
È necessario specificare l'ora delle variabili utilizzando il formato ISO 8601: YYYY-MM-DDThh:mm:ssZ. Esempi di questo formato sono:
- Data e ora con secondi: '2020-04-01T15:00:00Z'
- Dati e tempo in minuti: '2020-04-01T05:00Z'
- Solo data: '2020-04-01Z'
- Solo ora: '05:00:00'
Anche se è possibile specificare un periodo di tempo inferiore ai secondi, è consigliabile 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 i tuoi criteri basati sul tempo.
L'ora specificata viene valutata come UTC (Coordinated Universal Time). Ciò significa che è necessario calcolare l'ora UTC corretta per il fuso orario in cui viene valutato il criterio. Ad esempio, per specificare 9:00 AM - Ora standard Pacifico per il valore di una variabile, immettere '17:00:00'. Se la tua lingua partecipa al risparmio di luce del giorno, dovrai aggiornare tutti i criteri che si riferiscono a un'ora specifica quando 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:
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: YYYY-MM-DDThh:mm:ssZ ed essere in Ora UTC (Coordinated Universal Time).
Operatori supportati: prima | dopo
Valori consentiti: indicatore orario UTC (Coordinated Universal Time) nel formato ISO 8601: YYYY-MM-DDThh:mm:ssZ
- '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 ai Contractor del gruppo scadrà il 1° gennaio 2022, ore 12:00, UTC.
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 (corrispondenza con ISO 8601)
Valori di esempio: '1', '2', '3', ... '12'
Criterio di esempio: consentire al gruppo SummerInterns di accedere alle risorse instance-family solo nei 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.
Descrizione: il giorno del mese in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consente l'accesso solo per giorni specifici del mese. Tieni presente che l'arco della giornata è calcolato in base a UTC. Ad esempio, si supponga 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 dal 31 gennaio alle 6:59 PM il 1 ° febbraio.
Operatori supportati: = | != | in
Valori consentiti: giorno numerico del giorno 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).
Descrizione: il giorno della settimana in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consente l'accesso solo per giorni specifici della settimana. Si noti che l'intervallo del giorno viene calcolato in base a UTC. Ad esempio, si supponga di trovarsi a Miami, FL, USA e di immettere 'monday'. La politica sarà in vigore per le 12:00 AM fino alle 11:59 PM UTC di lunedì, che a Miami è 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ì', ecc.
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).
Descrizione: l'ora del giorno in cui la richiesta viene ricevuta per l'autorizzazione. È possibile scrivere un criterio che consente l'accesso solo per un intervallo di tempo specifico durante il giorno. Si noti che l'ora del giorno viene calcolata in base a UTC. Se si vive in un fuso orario che implementa il risparmio di luce del giorno, sarà necessario aggiornare il criterio quando cambia l'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: consentire al gruppo DayShift di gestire le istanze e le risorse correlate tra le ore 9:00 AM e le ore 5:00 PM Pacific Standard Time (PST).
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 ore 5:00 e le ore 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 gli esempi, l'ora corrente viene calcolata e testata per verificare se rientra o meno nell'intervallo fornito (ignorando il giorno in cui cade l'ora).