Proprietà delle condizioni IAM
Le regole dinamiche e i profili affidabili utilizzano entrambi le dichiarazioni IAM condizionali specificate dall'utente per aggiungere automaticamente gli utenti federati ai gruppi di accesso o ai profili affidabili. Quando gli utenti accedono con un ID federato, i dati del provider di identità ( IdP ) li mappano dinamicamente in un gruppo di accesso in base alle condizioni impostate dall'utente. Per ulteriori informazioni, vedere Creazione di regole dinamiche per i gruppi di accesso e Creazione di profili affidabili.
È inoltre possibile assegnare criteri di accesso IAM condizionali per designare l'accesso temporaneo alle risorse dell'account o consentire l'accesso alle risorse durante finestre temporali specifiche. Per ulteriori informazioni, vedere Limitazione dell'accesso con condizioni temporali e consultare la sezione Condizioni nei criteri di accesso /v2/policies.
Regole dinamiche e dettagli del profilo di fiducia
Ciascuna regola dinamica e relazione di fiducia del profilo ha le seguenti proprietà:
- Nome
- Inserite un nome personalizzato che vi aiuti a ricordare il tipo di utenti che state aggiungendo a un gruppo di accesso o a un profilo di fiducia.
- Provider di identità (IdP)
- La regola dinamica o il profilo attendibile vengono valutati solo se l'utente che si sta collegando si autentica utilizzando il sito IdP con l'URI dell'emittente. Il sito IdP URL viene visualizzato nella console per essere copiato e incollato
quando si crea una regola dinamica o un profilo attendibile. Ad esempio,
https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20. È inoltre possibile consultare il sito IdP cliccando suView identity provider (IdP) data. Per IBMid, IdP è il campo SAML "entityId", a volte indicato come ID emittente, e fa parte della configurazione della federazione quando si effettua l'onboarding con IBMid. Per App ID, la sintassi equivalente è "realm ID". Per ulteriori informazioni, vedere Abilitazione dell'autenticazione da un provider di identità esterno - Durata sessione
- L'appartenenza al gruppo di accesso dinamico o la sessione del profilo di fiducia scade dopo il numero di ore specificato in questa proprietà. Ad esempio, se la proprietà è impostata su 24 ore, la sessione del profilo dinamico o attendibile dell'utente termina un giorno (24 ore) dopo l'accesso.
Proprietà delle dichiarazioni di condizione di regole e profili
Inoltre, ogni relazione di fiducia tra regola dinamica e profilo fidato ha una o più condizioni che consistono nelle seguenti proprietà. Gli utenti devono soddisfare tutte le condizioni affinché la regola dinamica complessiva o l'autenticazione del profilo attendibile siano valutate come vere:
- Consenti utenti quando
- Un nome di attributo che fa parte dei dati del fornitore di identità. Per saperne di più su come vengono creati i nomi degli attributi dal provider di identità aziendale alla valutazione delle condizioni, vedere Mappatura degli attributi del provider di identità aziendale.
- Operatore
- Confronta l'attributo specificato nel campo
Allow users whencon la proprietàValues. Puoi scegliere tra Uguale, Non uguale, Uguale ignorando le differenze tra maiuscolo/minuscolo, Non uguale ignorando le differenze tra maiuscolo/minuscolo, In e Contiene. Utilizza l'opzione Contiene quando l'istruzione dell'attributo ha un tipo array. È possibile inserire più di un valore da abbinare utilizzando l'opzione In. - Valori
- Un valore di attributo che viene usato dal comparatore per valutare il nome dell'attributo
Allow users when.
Si può pensare a una regola dinamica o a una condizione del profilo attendibile come a una coppia chiave:valore. La chiave è ciò che si aggiunge nel campo Allow users when, mentre il valore è ciò che si inserisce nel campo Values.
Operatori disponibili per le condizioni di regole e profili
| Operatore | Descrizione | Condizione del campione |
|---|---|---|
| Uguale | Confronto tra stringhe sensibile alle maiuscole e minuscole. I valori booleani o numerici vengono convertiti in una stringa prima del confronto. | primaryGroup Uguale a "Amministratori" |
| Non uguale | Confronto tra stringhe sensibile alle maiuscole e minuscole. I valori booleani o numerici vengono convertiti in una stringa prima del confronto. | primaryGroup NotEquals "Amministratori" |
| Uguale, ignora maiuscolo/minuscolo | Confronto tra stringhe senza distinzione di maiuscole e minuscole. I valori booleani o numerici vengono convertiti in una stringa prima del confronto. | isManager EqualsIgnoreCase “tRuE” |
| Non uguale, ignora maiuscolo/minuscolo | Confronto di stringhe senza distinzione tra maiuscole e minuscole. I valori booleani o numerici vengono convertiti in una stringa prima del confronto. | is_teamlead NotEqualsIgnoreCase “TrUe” |
| Contiene | Se l'attributo è un array di stringhe, numeri o booleani, Contains determina, utilizzando il comparatore Equals, se il valore fornito fa parte dell'array nel messaggio di accesso. Se invece l'attributo è una
singola stringa, Contains determina se il valore fornito è contenuto nell'attributo stringa del messaggio di login. |
group contiene "Amministratori" |
| In | Notazione breve per gli operatori di uguaglianza multipla. Confronta il valore dell'attributo del messaggio di accesso con l'elenco dei valori potenziali di questa regola. I booleani o i numeri vengono convertiti in stringa prima del confronto. | jobRole in ["Manager", "Direttore", "Team-Lead"] |
Esempio
La tabella seguente include i valori per ciascun campo di una regola dinamica o di una condizione di un profilo attendibile. In questo esempio, gli utenti identificati come manager all'interno del sito federato IdP sono mappati su un gruppo di accesso IBM Cloud o su un profilo fidato con accesso specifico per i soli manager.
| Campo | Valore |
|---|---|
| Nome | Manager |
| Provider di identità | https://idp.example.org/SAML2 |
| Durata della sessione in ore | 12 |
| Consentire agli utenti quando (nome dell'attributo) | isManager |
| Operatore | Equals |
| Valore | true |
Calcolo dei nomi degli attributi delle risorse
Per stabilire la fiducia con una risorsa di calcolo in un profilo di fiducia, è possibile utilizzare la console IBM Cloud, la CLI IBM Cloud o l'API IAM. Se si seleziona Tutte le risorse di servizio e si aggiungono condizioni per filtrare le istanze di risorse di calcolo che possono applicare il profilo, le condizioni sono costruite in base ai seguenti attributi delle risorse.
Kubernetes e Red Hat OpenShift nomi di attributi
| IBM Cloud nome della console | Nome della CLI e dell'API | Descrizione |
|---|---|---|
| ID gruppo di risorse | resource_group_id |
L'ID del gruppo di risorse che contiene questo cluster. È possibile identificare il gruppo di risorse di un cluster utilizzando la sua pagina di panoramica nella Console IBM Cloud. |
| Nome del gruppo di risorse: | resource_group_name |
Il nome del gruppo di risorse che contiene questo cluster. |
| Istanza del servizio | service_instance |
L'ID di questo cluster. Questo valore può essere recuperato dalla pagina di riepilogo del cluster nella console IBM Cloud come "ID cluster" o utilizzando la CLI IBM Cloud. |
| Posizione | location |
Posizione del cluster derivata dal nome della risorsa cloud. |
| Namespace | namespace |
Namespace dell'account di servizio utilizzato per recuperare un token di risorsa di calcolo e ottenere un token IAM. |
| Account di servizio | name |
Nome dell'account del servizio utilizzato per recuperare un token di risorse di calcolo e ottenere un token IAM. |
| Pod | pod |
Il nome del pod Kubernetes che esegue il codice che vuole recuperare un token IAM. |
Server virtuale per nomi di attributi VPC
| IBM Cloud nome della console | Nome della CLI e dell'API | Descrizione |
|---|---|---|
| ID gruppo di risorse | resource_group_id |
L'ID del gruppo di risorse che contiene questo cluster. È possibile identificare il gruppo di risorse di un cluster utilizzando la sua pagina di panoramica nella Console IBM Cloud. |
| Nome del gruppo di risorse: | resource_group_name |
Il nome del gruppo di risorse che contiene questo cluster. |
| ID risorsa | resource |
L'ID del server virtuale per la VPC. |
| Nome gruppo di istanze | instance_group_name |
Nome del gruppo di istanze, se il server virtuale ne fa parte. |
| Regione | region |
Regione in cui è distribuito questo server virtuale. |
| Sottorete | subnet_id |
L'ID della sottorete del server virtuale per la VPC, se disponibile. |
| ID VPC | vpc_id |
L'ID VPC del server virtuale per VPC, se disponibile. |
| Zona | zone |
Nome della zona in cui è distribuito il server virtuale. |
IBM Cloud Esempi di comandi CLI
Gli esempi seguenti mostrano come si possono usare i nomi degli attributi nella CLI per creare collegamenti e condizioni di profili affidabili.
Collegamento di un profilo attendibile a Kubernetes un cluster
Per collegare il profilo di fiducia Test al cluster Kubernetes c0pigdctkkc07fs7pm06 nell'account 444aebb0657c7f0f3aae8e7bdc78709a e all'account di servizio my-service-account nel namespace
my-namespace, specificare il comando seguente:
ibmcloud iam trusted-profile-link-create Test --name NewLink4IKS --cr-type IKS_SA \
--link-crn
crn:v1:bluemix:public:containers-kubernetes:us-east:a/444aebb0657c7f0f3aae8e7bdc78709a:c0pigdctkkc07fs7pm06:: \
--link-namespace "my-namespace" \
--link-name "my-service-account"
Creazione di condizioni di profilo affidabili per Kubernetes
Per collegare il profilo attendibile con l'ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c a tutti gli account di servizio del cluster Kubernetes c0pigdctkkc07fs7pm06 nell'account 444aebb0657c7f0f3aae8e7bdc78709a e nello spazio dei nomi dell'account di servizio my-namespace, specificare il comando seguente:
ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
--name NewRule4IKS --type Profile-CR --cr-type IKS_SA \
--conditions "claim:service_instance,operator:EQUALS,vlaue:c0pigdctkkc07fs7pm06" \
--conditions "claim:namespace,operator:EQUALS,value:my-namespace"
Creazione di condizioni di profilo attendibili per VPC
Per collegare il profilo attendibile con l'ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c a tutti i server virtuali di una VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d nell'account 444aebb0657c7f0f3aae8e7bdc78709a,
specificare il comando seguente:
ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
--name NewRule4VSI --type Profile-CR --cr-type VSI \
--conditions "claim:vpc_id,operator:EQUALS,value:r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d"
Condizioni nelle politiche di accesso di v2
Le condizioni basate sul tempo e sugli attributi delle risorse per i criteri di accesso IAM utilizzano la sintassi /v2/policies. Le politiche che utilizzano la sintassi /v1/policies non sono idonee ad aggiungere condizioni
basate su attributi di risorse temporali. Per ulteriori informazioni, vedere Limitazioni della versione dei criteri di accesso.
Per visualizzare il nuovo schema delle politiche, vedere /v2/policies.
Condizioni basate sul tempo
La tabella seguente elenca gli operatori disponibili per la creazione di condizioni temporali per i criteri di accesso.
| Operatore | Descrizione | Esempio |
|---|---|---|
dayOfWeekAnyOf |
I giorni della settimana in cui il cliente può utilizzare la polizza. 1 - Lunedì 2 - Martedì 3 - Mercoledì 4- Giovedì 5 - Venerdì 6 - Sabato 7 - Domenica |
Vedi esempio. |
timeGreaterThanOrEquals |
L'ora in cui la condizione inizia a concedere l'accesso. Il tempo è calcolato da <time>±<time_zone_offset>. |
Vedi esempio. |
timeLessThanOrEquals |
L'ora in cui la condizione termina l'accesso. Il tempo è calcolato da <time>±<time_zone_offset>. |
Vedi esempio. |
dateTimeGreaterThanOrEquals |
La data e l'ora in cui la condizione inizia a garantire l'accesso. La data è calcolata da <datetime>±<time_zone_offset>. |
Vedi esempio. |
dateTimeLessThanOrEquals |
La data e l'ora in cui la condizione termina l'accesso. La data è calcolata da <datetime>±<time_zone_offset>. |
Vedi esempio. |
Quando si definisce una condizione con l'operatore GreaterThanOrEquals, includere sempre una condizione con l'operatore LessThanOrEquals. In questo modo, la durata è chiaramente definita, che sia temporanea, ricorrente
per tutto il giorno o ricorrente con orari personalizzati. Per ulteriori informazioni, vedere Modelli di condizione.
Per gli operatori di data e ora, le politiche supportano il formato ISO 8601 hh:mm:ss±hh:mm. L'offset del fuso orario si riferisce al Tempo Universale Coordinato.
Utilizzare le seguenti variabili per rappresentare key che specifica l'attributo dell'ambiente del client, rispetto al quale il criterio viene valutato. Ogni key supporta un insieme discreto di operatori.
| Nome variabile | Descrizione | Operatori supportati |
|---|---|---|
environment.attributes.current_time |
L'ora attuale del cliente. | timeGreaterThanOrEquals, timeLessThanOrEquals |
environment.attributes.current_date_time |
La data e l'ora attuali del cliente. | dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals |
environment.attributes.day_of_week |
Il giorno della settimana corrente del cliente. | dayOfWeekAnyOf, dayOfWeekEquals |
Esempio: dayOfWeekAnyOf, timeGreaterThanOrEquals, e timeLessThanOrEquals
I giorni della settimana specificati in questo esempio corrispondono a lunedì, martedì, mercoledì e giovedì. Il valore timeGreaterThanOrEquals indica che la condizione inizia a garantire l'accesso alle 9 del mattino nel fuso
orario UTC-5. Il valore timeLessThanOrEquals indica che la condizione termina l'accesso alle 17:00 nel fuso orario UTC-5.environment.attributes.current_time e environment.attributes.day_of_week indicano
che si tratta di una condizione ricorrente basata sul tempo. Includere sempre le condizioni time con una condizione dayOfWeek.
"conditions": [
{
"key": "{{environment.attributes.day_of_week}}",
"operator": "dayOfWeekAnyOf",
"value": [
1,
2,
3,
4
]
},
{
"key": "{{environment.attributes.current_time}}",
"operator": "timeGreaterThanOrEquals",
"value": "09:00:00-05:00"
},
{
"key": "{{environment.attributes.current_time}}",
"operator": "timeLessThanOrEquals",
"value": "17:00:00-05:00"
}
]
Esempio: dayOfWeekEquals
In questo esempio, il giorno della settimana è rappresentato da 3 nella stringa value, che corrisponde a mercoledì. Nella stessa stringa, +6:00 rappresenta il fuso orario UTC+6:00. C'è
solo una condizione, quindi è annidata sotto "rule".
"rule": {
"key": "{{environment.attributes.day_of_week}}",
"operator": "dayOfWeekEquals",
"value": "3+06:00"
},
Esempio: dateTimeGreaterThanOrEquals e dateTimeLessThanOrEquals
In questo esempio, il valore dateTimeGreaterThanOrEquals indica che la condizione inizia a garantire l'accesso il 26 dicembre 2022 alle ore 9 del fuso orario UTC-5. Il valore dateTimeLessThanOrEquals indica che
la condizione termina l'accesso il 27 dicembre 2022 alle 17:00 nel fuso orario UTC-5. environment.attributes.current_date_time indica che si tratta di una condizione temporanea basata sul tempo.
"conditions": [
{
"key": "{{environment.attributes.current_date_time}}",
"operator": "dateTimeGreaterThanOrEquals",
"value": "2022-12-26T09:00:00-05:00"
},
{
"key": "{{environment.attributes.current_date_time}}",
"operator": "dateTimeLessThanOrEquals",
"value": "2022-12-27T17:00:00-05:00"
}
]
Condizioni basate sugli attributi delle risorse
La tabella seguente elenca gli operatori disponibili per creare condizioni basate sugli attributi delle risorse per i criteri di accesso.
| Operatore | Descrizione | Esempio |
|---|---|---|
stringEquals |
Confronto tra stringhe sensibile alle maiuscole e minuscole. I valori booleani o numerici vengono convertiti in una stringa prima del confronto. | Vedi esempio. |
stringExists |
Booleano dove true indica che la stringa deve essere presente e può essere vuota. false indica che la stringa non deve essere presente. |
Vedi esempio. |
stringMatch |
La corrispondenza di stringa sensibile alle maiuscole viene eseguita tra il modello e la stringa di destinazione utilizzando un asterisco (*), un punto interrogativo (?), entrambi o nessuno (come il valore letterale).
Un asterisco (*) rappresenta qualsiasi sequenza di zero o più caratteri nella stringa, mentre un punto interrogativo (?) rappresenta qualsiasi singolo carattere. È anche possibile esprimere un asterisco * e un punto interrogativo ? come valore letterale, racchiudendo ciascuno di essi all'interno di due serie di parentesi graffe {{}}. |
Vedi esempio. |
stringEqualsAnyOf |
Stringa esatta sensibile alle maiuscole e minuscole che corrisponde a una qualsiasi stringa di un array di stringhe. Limite di 10 valori. | Vedi esempio. |
stringMatchAnyOf |
Stringa sensibile alle maiuscole e minuscole che corrisponde a una qualsiasi stringa di un array di stringhe. I valori della stringa possono includere un asterisco (*), un punto interrogativo (?), entrambi o
nessuno (come il valore letterale). Un asterisco (*) rappresenta qualsiasi sequenza di zero o più caratteri nella stringa, mentre un punto interrogativo (?) rappresenta qualsiasi singolo carattere. È anche
possibile esprimere un asterisco * e un punto interrogativo ? come valore letterale, racchiudendo ciascuno di essi all'interno di due serie di parentesi graffe {{}}. Limite di 10 valori. |
key rappresenta l'attributo della risorsa supportato dal servizio scelto. Un key assume la forma di resource.attributes.<attribute-name>. Ad esempio, nel caso di Cloud Object Storage, l'attributo
prefix supportato può essere rappresentato come chiave con la notazione resource.attributes.prefix. La tabella seguente elenca le variabili di esempio e non è esaustiva.
| Nome variabile | Descrizione | Operatori supportati |
|---|---|---|
resource.attributes.prefix |
Definisce il prefisso che questa condizione deve consentire per elencare gli oggetti o le cartelle. | stringMatchAnyOf |
resource.attributes.path |
Esamina tutti gli accessi in lettura, scrittura e gestione degli oggetti. | stringMatchAnyOf |
resource.attributes.delimiter |
Limita il tipo di struttura di cartelle che l'utente può generare e aiuta l'utente a navigare nel bucket come in una gerarchia di file. | stringEquals |
Per ulteriori informazioni, vedere Modelli di condizione.
Esempio: stringMatchAnyOf e stringEqualsAnyOf
In questo esempio, i valori stringMatchAnyOf per la variabile resource.attributes.path indicano che l'accesso è consentito quando il percorso dell'oggetto corrisponde e inizia con home/David/*, special/*,
restricted/*, o temporary/test*spatial.?.log (ad esempio, temporary/test_spatial.1.log ). Il valore or indica che esiste una condizione alternativa che può garantire l'accesso.
Il valore stringEqualsAnyOf per la variabile resource.attributes.delimiter indica che l'accesso è consentito quando non c'è alcun indicatore di confine o quando è presente /. Inoltre, il prefisso stringEqualsAnyOf per la variabile resource.attributes.prefix indica che per garantire l'accesso devono esistere anche home/, o home/David/, o nessun prefisso. Il valore and indica che entrambi i valori
resource.attributes.delimiter e resource.attributes.prefix devono essere soddisfatti per garantire l'accesso.
"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
"operator": "or",
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"home/David/*",
"special/*",
"restricted/*",
"temporary/test*spatial.?.log"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"/"
]
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"home/",
"home/David/"
]
}
]
}
]
}
Esempio stringExists, stringEquals, stringMatch
In questo esempio, stringEquals per iam_id, accountID, serviceName e resourceType indica che viene eseguita una corrispondenza di stringhe esatta. L'asterisco presente nel
valore stringMatch per la variabile risorsa indica che l'accesso è consentito a tutte le risorse che iniziano con dev-bucket-. Il valore true stringExists per la variabile path e il valore false stringExists per le variabili prefix e delimiter indicano che deve esistere solo il path per garantire l'accesso.
{
"type": "access",
"subject": {
"attributes": [
{
"key": "iam_id",
"operator": "stringEquals",
"value": "IBMid-1234"
}
]
},
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolderContent"
},
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolder"
},
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:AllFolderOperations"
}
]
}
},
"resource": {
"attributes": [
{
"name": "accountId",
"operator": "stringEquals",
"value": "account-123"
},
{
"key": "serviceName",
"operator": "stringEquals",
"value": "cloud-object-storage"
},
{
"key": "serviceInstance",
"operator": "stringEquals",
"value": "cd329d97-c33d-4428-b39e-6170dc1c2a1e"
},
{
"key": "resource",
"operator": "stringMatch",
"value": "dev-bucket-*"
},
{
"key": "resourceType",
"operator": "stringEquals",
"value": "bucket"
}
]
},
"rule": {
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": true
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
}
]
}
}