Propriétés de condition IAM

Les règles dynamiques et les profils sécurisés utilisent tous deux les instructions IAM conditionnelles que vous spécifiez pour ajouter automatiquement des utilisateurs fédérés aux groupes d'accès ou aux profils sécurisés. Lorsque des utilisateurs se connectent à l'aide d'un ID fédéré, les données du fournisseur d'identité (IdP) les mappent automatiquement vers un groupe d'accès en fonction des conditions que vous avez définies. Pour plus d'informations, voir Création de règles dynamiques pour les groupes d'accès et Création de profils sécurisés.

Vous pouvez également assigner des politiques d'accès IAM conditionnelles pour désigner un accès temporaire aux ressources de votre compte ou autoriser l'accès aux ressources pendant des fenêtres de temps spécifiques. Pour plus d'informations, voir Limiter l'accès avec des conditions temporelles et consulter la section Conditions dans les politiques d'accès /v2/policies.

Règles dynamiques et détails des profils de confiance

Chaque relation de confiance entre règle dynamique et profil sécurisé possède les propriétés suivantes :

Nom
Entrez un nom personnalisé qui vous aide à vous souvenir du type d'utilisateurs que vous ajoutez à un groupe d'accès ou à un profil sécurisé.
Fournisseur d'identité
La règle dynamique ou le profil sécurisé n'est évalué que si l'utilisateur qui se connecte s'authentifie à l'aide de l'élément IdP de l'entreprise avec cet URI d'émetteur. Votre URL IdP s'affiche dans la console pour vous permettre de copier et coller lorsque vous créez une règle dynamique ou un profil sécurisé. Par exemple, https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20. Vous pouvez également afficher les données IdP en cliquant sur View identity provider (IdP) data. Pour IBMid, IdP est la zone "entityId" du langage SAML, parfois appelée ID émetteur, et fait partie de la configuration de fédération lorsque vous utilisez IBMid. Pour App ID, la syntaxe équivalente est le "realm ID". Pour plus d'informations, voir Activation de l'authentification à partir d'un fournisseur d'identité externe
Durée de session
L'appartenance au groupe d'accès dynamique ou la session de profil sécurisé expire après le nombre d'heures spécifié dans cette propriété. Par exemple, si la propriété est définie sur 24 heures, la session de profil dynamique ou sécurisée de l'utilisateur se termine un jour (24 heures) après sa connexion.

Propriétés de la règle et de l'énoncé de la condition du profil

En outre, chaque relation de confiance entre règle dynamique et profil sécurisé comporte une ou plusieurs conditions avec les propriétés suivantes. Les utilisateurs doivent satisfaire toutes les conditions pour que l'évaluation de la règle dynamique globale ou de l'authentification par profil sécurisé ait la valeur true :

Autoriser les utilisateurs lorsque
Un nom d'attribut qui fait partie de vos données de fournisseur d'identité. Pour en savoir plus sur la façon dont les noms d'attributs sont créés à partir de votre fournisseur d'identité d'entreprise vers l'évaluation des conditions, voir Mappage des attributs du fournisseur d'identité d'entreprise.
Opérateur
Compare l'attribut spécifié dans la zone Allow users when avec la Valuespropriété. Vous pouvez choisir Egal à, Non égal à, Est égal à (ignorer la casse), N'est pas égal à (ignorer la casse), Dans ou Contient. Utilisez l'option Contient lorsque l'instruction d'attribut a un type de tableau. Vous pouvez entrer plusieurs valeurs à mettre en correspondance à l'aide de l'option In.
Valeurs
Une valeur d'attribut utilisée par le comparateur pour procéder à une évaluation par rapport au nom de l'attribut Allow users when.

Vous pouvez penser à une règle dynamique ou à une condition de profil digne de confiance comme à une paire clé : valeur. La clé est ce que vous ajoutez dans la zone Allow users when et la valeur est ce que vous entrez dans la zone Values.

Opérateurs disponibles pour les conditions des règles et des profils

Opérateurs disponibles pour les conditions
Opérateur Description Exemple de condition
Egal Comparaison de chaînes sensibles à la casse. Les valeurs booléennes ou les valeurs de nombre sont converties en chaîne avant la comparaison. primaryGroup Equals “Admins”
Différent Comparaison de chaînes sensibles à la casse. Les valeurs booléennes ou les valeurs de nombre sont converties en chaîne avant la comparaison. primaryGroup NotEquals “Admins”
Est égal à (ignorer la casse) Comparaison de chaîne non sensible à la casse. Les valeurs booléennes ou les valeurs de nombre sont converties en chaîne avant la comparaison. isManager EqualsIgnoreCase “tRuE”
N'est pas égal à (ignorer la casse) Comparaison de chaîne non sensible à la casse refusée. Les valeurs booléennes ou les valeurs de nombre sont converties en chaîne avant la comparaison. is_teamlead NotEqualsIgnoreCase “TrUe”
Contient Si l'attribut est un tableau de chaînes, de nombres ou de valeurs booléennes, Contains détermine, à l'aide du comparateur Equals, si la valeur fournie fait partie du tableau dans le message de connexion. Si l'attribut est une chaîne unique, Contains détermine si la valeur fournie est contenue dans l'attribut de chaîne dans le message de connexion. group contient “Admins”
Entrant Notation abrégée pour plusieurs opérateurs Equal. Compare la valeur de l'attribut de message de connexion à la liste des valeurs possibles dans cette règle. Les valeurs booléennes ou les nombres sont convertis en chaîne avant la comparaison. JobRole dans ["Gestionnaire", "Directeur", "Chef d'équipe"]

Exemple

Le tableau suivant comporte les valeurs pour chacune des zones d'une règle dynamique ou d'une condition de profil digne de confiance. Dans cet exemple, les utilisateurs identifiés comme gestionnaires dans le site fédéré IdP sont associés à un groupe d'accès IBM Cloud ou à un profil de confiance dont l'accès est réservé aux gestionnaires.

Exemples de valeurs
Zone Valeur
Nom Manager
Fournisseur d'identité https://idp.example.org/SAML2
Durée de la session en heures 12
Autoriser les utilisateurs lorsque (nom de l'attribut) isManager
Opérateur Equals
Valeur true

Noms d'attribut de ressource de traitement

Pour établir la confiance avec une ressource de traitement dans un profil sécurisé, vous pouvez utiliser la console IBM Cloud, l'interface de ligne de commande IBM Cloud ou l'API IAM. Si vous sélectionnez All service resources et ajoutez des conditions pour filtrer les instances de ressource de traitement qui peuvent appliquer le profil, les conditions sont générées en fonction des attributs de ressource suivants.

Noms d'attribut Kubernetes et Red Hat OpenShift

Noms d'attribut Kubernetes et Red Hat OpenShift
Nom de la console IBM Cloud Nom de l'interface de ligne de commande et de l'API Description
ID du groupe de ressources resource_group_id ID du groupe de ressources qui contient ce cluster. Vous pouvez identifier le groupe de ressources d'un cluster à l'aide de sa page de présentation dans la console IBM Cloud.
Nom du groupe de ressources resource_group_name Nom du groupe de ressources qui contient ce cluster.
Instance de service service_instance ID de ce cluster. Vous pouvez extraire cette valeur de la page de présentation du cluster dans la console IBM Cloud en tant qu'"ID cluster" ou à l'aide de l'interface de ligne de commande IBM Cloud.
Emplacement location Emplacement du cluster dérivé de son nom de ressource de cloud.
Espace de nom namespace Espace de nom du compte de service utilisé pour extraire un jeton de ressource de traitement et obtenir un jeton IAM.
Compte de service name Nom du compte de service utilisé pour extraire un jeton de ressource de traitement et obtenir un jeton IAM.
Pod pod Nom du pod Kubernetes qui exécute le code qui souhaite extraire un jeton IAM.

Serveur virtuel pour les noms d'attribut VPC

Serveur virtuel pour les noms d'attribut VPC
Nom de la console IBM Cloud Nom de l'interface de ligne de commande et de l'API Description
ID du groupe de ressources resource_group_id ID du groupe de ressources qui contient ce cluster. Vous pouvez identifier le groupe de ressources d'un cluster à l'aide de sa page de présentation dans la console IBM Cloud.
Nom du groupe de ressources resource_group_name Nom du groupe de ressources qui contient ce cluster.
ID de ressource resource ID du serveur virtuel pour VPC.
Nom de groupe d'instance instance_group_name Nom du groupe d'instances, si ce serveur virtuel en fait partie.
Région region Région dans laquelle ce serveur virtuel est déployé.
Sous-réseau subnet_id ID sous-réseau du serveur virtuel pour VPC, le cas échéant.
ID VPC vpc_id ID VPC du serveur virtuel pour VPC, le cas échéant.
Zone zone Nom de la zone dans laquelle ce serveur virtuel est déployé.

Exemples de commande CLI IBM Cloud

Les exemples suivants montrent comment utiliser les noms d'attribut dans l'interface de ligne de commande pour générer des liens et des conditions de profil sécurisé.

Création de conditions de profil sécurisé pour Kubernetes

Pour connecter le profil sécurisé avec l'ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c à tous les comptes de service du cluster Kubernetes c0pigdctkkc07fs7pm06 dans le compte 444aebb0657c7f0f3aae8e7bdc78709a et l'espace de nom du compte de service my-namespace, indiquez la commande suivante :

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"

Création de conditions de profil sécurisé pour VPC

Pour connecter le profil sécurisé avec l'ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c à tous les serveurs virtuels d'un VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d dans le compte 444aebb0657c7f0f3aae8e7bdc78709a, indiquez la commande suivante :

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"

Conditions dans v2 politiques d'accès

Les conditions basées sur le temps et les attributs de ressources pour les politiques d'accès IAM utilisent la syntaxe /v2/policies. Les politiques qui utilisent la syntaxe /v1/policies ne peuvent pas ajouter de conditions basées sur des attributs de ressources temporelles. Pour plus d'informations, voir Limitations de la version de la politique d'accès.

Pour consulter le nouveau schéma des politiques, voir /v2/policies.

Conditions temporelles

Le tableau suivant répertorie les opérateurs disponibles pour créer des conditions temporelles pour les politiques d'accès.

Les opérateurs disponibles pour les conditions temporelles des politiques d'accès.
Opérateur Description Exemple
dayOfWeekAnyOf Les jours de la semaine où le client peut utiliser la police.
1 - Lundi
2 - Mardi
3 - Mercredi
4- Jeudi
5 - Vendredi
6 - Samedi
7 - Dimanche
Voir exemple.
timeGreaterThanOrEquals Heure à laquelle la condition commence à accorder l'accès. Le temps est calculé par <time>±<time_zone_offset>. Voir exemple.
timeLessThanOrEquals Heure à laquelle la condition met fin à l'accès. Le temps est calculé par <time>±<time_zone_offset>. Voir exemple.
dateTimeGreaterThanOrEquals La date et l'heure auxquelles la condition commence à accorder l'accès. La date est calculée par <datetime>±<time_zone_offset>. Voir exemple.
dateTimeLessThanOrEquals La date et l'heure auxquelles la condition met fin à l'accès. La date est calculée par <datetime>±<time_zone_offset>. Voir exemple.

Lorsque vous définissez une condition avec un opérateur GreaterThanOrEquals, incluez toujours une condition avec un opérateur LessThanOrEquals. De cette manière, la durée est clairement définie, qu'elle soit temporaire, récurrente toute la journée ou récurrente avec des heures personnalisées. Pour plus d'informations, voir Modèles de conditions.

Pour les opérateurs de date et d'heure, les politiques prennent en charge le format ISO 8601 hh:mm:ss±hh:mm. Le décalage du fuseau horaire fait référence au temps universel coordonné.

Utilisez les variables suivantes pour représenter l'adresse key qui spécifie l'attribut d'environnement du client, que la politique évalue en fonction de cet attribut. Chaque site key prend en charge un ensemble discret d'opérateurs.

Notation variable pour les conditions temporelles.
Nom de la variable Description Opérateurs pris en charge
environment.attributes.current_time L'heure actuelle du client. timeGreaterThanOrEquals, timeLessThanOrEquals
environment.attributes.current_date_time La date et l'heure actuelles du client. dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals
environment.attributes.day_of_week Le jour de la semaine du client. dayOfWeekAnyOf, dayOfWeekEquals

Exemple : dayOfWeekAnyOf, timeGreaterThanOrEquals, et timeLessThanOrEquals

Les jours de la semaine spécifiés dans cet exemple correspondent à lundi, mardi, mercredi et jeudi. La valeur timeGreaterThanOrEquals indique que la condition commence à accorder l'accès à 9 heures du matin dans le fuseau horaire UTC-5. La valeur timeLessThanOrEquals indique que la condition met fin à l'accès à 17 heures dans le fuseau horaire UTC-5.environment.attributes.current_time et environment.attributes.day_of_week indiquent qu'il s'agit d'une condition récurrente basée sur le temps. Les conditions time doivent toujours être accompagnées d'une condition 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"
			}
		]

Exemple : dayOfWeekEquals

Dans cet exemple, le jour de la semaine est représenté par 3 dans la chaîne value, ce qui correspond à mercredi. Dans cette même chaîne, +6:00 représente le fuseau horaire UTC+6:00. Il n'y a qu'une seule condition, elle est donc imbriquée sous "rule".

"rule": {
		"key": "{{environment.attributes.day_of_week}}",
		"operator": "dayOfWeekEquals",
		"value": "3+06:00"
},

Exemple : dateTimeGreaterThanOrEquals et dateTimeLessThanOrEquals

Dans cet exemple, la valeur dateTimeGreaterThanOrEquals indique que la condition commence à accorder l'accès le 26 décembre 2022 à 9 heures dans le fuseau horaire UTC-5. La valeur dateTimeLessThanOrEquals indique que la condition met fin à l'accès le 27 décembre 2022 à 17 heures dans le fuseau horaire UTC-5. environment.attributes.current_date_time indique qu'il s'agit d'une condition temporaire basée sur le temps.

"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"
			}
		]

Conditions basées sur les attributs des ressources

Le tableau suivant répertorie les opérateurs disponibles pour créer des conditions basées sur les attributs de ressources pour les politiques d'accès.

Les opérateurs disponibles pour établir des conditions basées sur les attributs pour les politiques d'accès.
Opérateur Description Exemple
stringEquals Comparaison de chaînes sensibles à la casse. Les valeurs booléennes ou les valeurs de nombre sont converties en chaîne avant la comparaison. Voir exemple.
stringExists Booléen où true indique que la chaîne doit être présente et peut être vide. false indique que la chaîne ne doit pas être présente. Voir exemple.
stringMatch La correspondance entre le motif et la chaîne cible est effectuée en utilisant soit un astérisque (*), soit un point d'interrogation (?), soit les deux, soit aucun (comme pour la valeur littérale). Un astérisque (*) représente une suite de zéro caractère ou plus dans la chaîne, tandis qu'un point d'interrogation (?) représente un seul caractère. Vous pouvez également exprimer un astérisque * et un point d'interrogation ? sous forme de valeur littérale en les plaçant entre deux séries de parenthèses courbes {{}}. Voir exemple.
stringEqualsAnyOf Chaîne exacte sensible à la casse correspondant à n'importe quelle chaîne d'un tableau de chaînes. Limite de 10 valeurs. Voir exemple.
stringMatchAnyOf Chaîne sensible à la casse correspondant à n'importe quelle chaîne d'un tableau de chaînes. Les valeurs de la chaîne peuvent inclure soit un astérisque (*), soit un point d'interrogation (?), soit les deux, soit aucun (comme la valeur littérale). Un astérisque (*) représente une suite de zéro caractère ou plus dans la chaîne, tandis qu'un point d'interrogation (?) représente un seul caractère. Vous pouvez également exprimer un astérisque * et un point d'interrogation ? sous forme de valeur littérale en les plaçant entre deux séries de parenthèses courbes {{}}. Limite de 10 valeurs.

Le site key représente l'attribut de la ressource qui est pris en charge par le service choisi. Un key se présente sous la forme d'un resource.attributes.<attribute-name>. Par exemple, dans le cas de Cloud Object Storage, l'attribut prefix pris en charge peut être représenté comme la clé avec la notation resource.attributes.prefix. Le tableau suivant énumère des exemples de variables et n'est pas exhaustif.

Notation variable pour les conditions basées sur les attributs des ressources.
Nom de la variable Description Opérateurs pris en charge
resource.attributes.prefix Définit le préfixe que cette condition doit autoriser pour l'énumération des objets ou des dossiers. stringMatchAnyOf
resource.attributes.path Permet de gérer tous les accès en lecture, en écriture et en gestion des objets. stringMatchAnyOf
resource.attributes.delimiter Limite le type de structure de dossier que l'utilisateur peut générer et l'aide à naviguer dans le seau comme dans une hiérarchie de fichiers. stringEquals

Pour plus d'informations, voir Modèles de conditions.

Exemple : stringMatchAnyOf et stringEqualsAnyOf

Dans cet exemple, les valeurs stringMatchAnyOf pour la variable resource.attributes.path indiquent que l'accès est accordé lorsque le chemin d'accès à l'objet correspond et commence par home/David/*, special/*, restricted/* ou temporary/test*spatial.?.log (par exemple temporary/test_spatial.1.log ). La valeur or indique qu'il existe une autre condition permettant d'accorder l'accès.

La valeur stringEqualsAnyOf pour la variable resource.attributes.delimiter indique que l'accès est accordé en l'absence d'indicateur de délimitation ou en présence de /. En outre, la mention stringEqualsAnyOf pour la variable resource.attributes.prefix indique que home/, ou home/David/, ou aucun préfixe ne doit exister pour accorder l'accès. La valeur and nous indique que les conditions resource.attributes.delimiter et resource.attributes.prefix doivent être remplies pour que l'accès soit accordé.

"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/"
            ]
          }
        ]
      }
    ]
  }

Exemple stringExists, stringEquals, stringMatch

Dans cet exemple, stringEquals pour iam_id, accountID, serviceName, et resourceType indique qu'une correspondance de chaîne exacte est effectuée. L'astérisque présent dans la valeur stringMatch de la variable ressource indique que l'accès est accordé à toutes les ressources commençant par dev-bucket-. La valeur true stringExists pour la variable path et la valeur false stringExists pour les variables prefix et delimiter indiquent que seul le path doit exister pour accorder l'accès.

{
    "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
            }
        ]
    }
}