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 su View 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 when con 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

Operatori disponibili per le condizioni
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.

Valori di esempio
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

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

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.

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.

Gli operatori disponibili alle condizioni temporali per le politiche 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.

Notazione variabile per condizioni basate sul tempo.
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.

Gli operatori disponibili per creare condizioni basate sugli attributi 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.

Notazione variabile per le condizioni basate sugli attributi delle risorse.
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
            }
        ]
    }
}