Gestion des politiques d'accès via des API

Une stratégie d'accès est un ensemble de règles et de conditions qui sont évaluées afin de déterminer la décision d'accès. Vous pouvez créer des stratégies d'accès personnalisées. Toutes les stratégies d'accès personnalisées sont affichées en tant qu'options dans la configuration de l'application.

A propos de cette tâche

Certaines stratégies d'accès par défaut sont fournies pour une utilisation immédiate et ne peuvent pas être modifiées. Les titulaires peuvent ajouter des stratégies d'accès personnalisées en fonction de leurs besoins.

  • Les règles sont évaluées en fonction de la première correspondance trouvée. Lorsqu'une correspondance de toutes les conditions d'une règle renvoie la valeur true, le résultat de la règle est renvoyé comme décision d'évaluation. Aucun traitement supplémentaire n'est effectué.
  • Un paramètre facultatif alwaysRun: true peut être ajouté à une règle individuelle. Ce paramètre fait que la règle est évaluée en plus du premier ensemble de règles concordantes. Le résultat de la première concordance et le paramètre alwaysRun sont combinés et l'action la plus restrictive est appliquée en tant que résultat de la stratégie. Plusieurs règle alwaysRun peuvent être ajoutées à une stratégie.
  • Lorsqu'une stratégie requiert un abonnement spécifique pour une condition, telle que la gestion des appareils, et que le titulaire n'est pas autorisé actuellement à utiliser cet abonnement, la stratégie est ignorée. Une décision d'authentification multi-facteur est renvoyée.
  • Lorsqu'une stratégie requiert un abonnement spécifique pour l'authentification multi-facteur et que le titulaire n'est pas autorisé actuellement à utiliser cet abonnement, une décision d'authentification multi-facteur évaluée est remplacée par un refus. Cette modification protège l'application au lieu de permettre un accès inconditionnel.

L'éditeur de stratégie peut être utilisé pour créer et modifier des stratégies. Voir la section « Gestion des politiques d'accès ».

Certaines conditions ne peuvent pas être ajoutées à l'aide de l'éditeur de stratégie. Dans ces cas, l'API peut être utilisée pour modifier des stratégies existantes ou créer de nouvelles stratégies d'accès avec ces conditions.

La validation de la syntaxe est effectuée lorsqu'une stratégie d'accès est créée ou mise à jour.

Les stratégies d'accès sont au format JSON suivant :
Remarque : FedRAMP ne prend pas en charge l'accès adaptatif. Par conséquent, les fonctionnalités Trusteer ne sont pas disponibles pour les clients d' FedRAMP.
{
    "name": "policy_name",
    "description": "Description of the policy",
    "schemaVersion": "urn:access:policy:4.0:schema",
    "rules": [
        {
            "name": "allow_with_conditions",
            "id": "1",
            "conditions": {
                "contextAttributes": {
                    "attributes": [
                        {
                            "name": "attrName",
                            "values": [
                                "value1",
                                "value2"
                            ],
                            "opCode": "EQ"
                        }
                    ]
                },
                "subjectAttributes": {
                    "attributes": [
                        {
                            "name": "realmName",
                            "values": [
                                "cloudIdentityRealm",
                                "www.ibm.com"
                            ],
                            "opCode": "IN"
                        },
                        {
                            "name": "customAttr1",
                            "values": [
                                "val1"
                            ],
                            "opCode": "NEQ"
                        }
                    ]
                },
                "timeAttributes": {
                    "attributes": [
                        {
                            "name": "timezone",
                            "opCode": "EQ",
                            "values": [
                                "UTC Offset or GMT Offset"
                            ]
                        },
                        {
                            "name": "startDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "endDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "Monday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        },
                        {
                            "name": "Tuesday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        }
                    ]
                },
                "ipAddress": {
                    "opCode": "MATCH",
                    "values": [
                        "<ip_address>",
                        "<ip_address_range_start> - <ip_address_range_end>",
                        "<ip_address/subnet>"
                    ]
                },   
                "location": {
                    "attributes": [
                        {
                            "values": [
                                "3-Letter-ISO"
                            ],
                            "name": "country",
                            "opCode": "IN"
                        }
                    ]
                }
                  "location": {
                      "attributes": [
                          {
                              "values": [
                                  "<city>"
                              ],
                              "name": "city",
                              "opCode": "IN"
                        }
                    ]
                }
                "geoLocation": {
                    "enabled": "true"
                },
                "trusteer": {
                    "enabled": "true"
                }
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_ALLOW"
                },
                "authnMethods": []
            }
        },
        {
            "name": "Authentication factor validity",
            "id": "2",
            “alwaysRun”: true,
            "conditions": {
            "factorLifetimeAttributes": {
                "attributes": [
                {
                    "name": "anyFactor",
                    "opCode": "EQ",
                    "values": [
                       "120"
                     ]
                }, 
                {
                      "name": "reauthPerDevice",
                      "opCode": "EQ",
                      "values": [
                         "enabled"
                       ]
                  }

               ]
            }
       },
       "result": {
        "extendedAction": {
          "action": "ACTION_MFA_OVERRIDE"
        }
       }
        },
        {
            "name": "mfa_once_per_session_device_conditions",
            "id": "3",
            "contextAttributes": {
                "attributes": [
                    {
                        "name": "devicePlatform",
                        "values": [
                            "IOS",
                            "ANDROID",
                            "OTHER_MOBILE",
                            "MACOS",
                            "WINDOWS",
                            "OTHER_DESKTOP"
                        ],
                        "opCode": "IN"
                    },
                    {
                        "name": "deviceCompliance",
                        "values": [
                            "COMPLIANT",
                            "NONCOMPLIANT",
                            "UNKNOWN"
                        ],
                        "opCode": "IN"
                    }
                ]
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_MFA_PER_SESSION"
                },
                "authnMethods": [
                    "urn:ibm:security:authentication:asf:macotp"
                ]
            }
        },
        {
            "name": "deny_otherwise",
            "id": "100",
            "conditions": {},
            "result": {
                "extendedAction": {
                    "action": "ACTION_DENY"
                },
                "authnMethods": []
            }
        }
    ]
}
Remarque : la majeure partie de l'API est déjà décrite dans la documentation Swagger. Vous pouvez accéder à la documentation Swagger depuis la console d'administration, sous Paramètres > Accès à l'API > Documentation de l'API. Pour plus d'informations sur les API Swagger, consultez la section « Vérification des interfaces de programmation d'applications (API) ».
Les informations ci-dessous s'appliquent aux règles d'API.
  • Chaque règle est composée des propriétés suivantes :
    name
    Nom pour la règle.
    id
    ID unique de la règle utilisée dans les données d'événement et les rapports.
    conditions
    Plusieurs conditions peuvent être présentes par règle. Toutes les conditions dans la règle doivent avoir pour résultat la valeur true pour que la règle corresponde et que le résultat soit appliqué. La règle par défaut contient une condition vide.
  • Les conditions contiennent les propriétés suivantes :
    contextAttributes
    Attributs dans le contexte du flux dans lequel la stratégie d'accès a été exécutée. Ces attributs incluent les attributs de gestion des appareils, OpenID Connect et de demande HTTP.
    subjectAttributes
    Attributs de session de connexion associés à l'objet utilisateur authentifié.
    factorLifetimeAttributes
    Validité associée à un facteur ou à une méthode d'authentification spécifique.
    timeAttributes
    Attributs d'heure de la journée qui activent le contrôle d'accès limité dans le temps.
    ipAddress
    Condition d'adresse IP qui active des listes autorisées et bloquées individuelles ou basées sur des plages ou des sous-réseaux.
    location
    Pays ou ville résolu à partir de l'adresse IP de l'utilisateur. Pays doit contenir une liste séparée par des virgules de noms de pays ou des codes pays de trois lettres en fonction de la norme ISO ci-après. Vous devez entrer un pays ou un code pays de trois lettres.

    Ville doit contenir une liste séparée par des virgules de noms de ville. Vous devez entrer une ville.

    geoLocation
    Emplacements où les décisions d'accès ont été vérifiées. Par défaut, il s'agit des cinq emplacements vérifiés précédents. La propriété de condition a pour valeur enabled (true) ou disabled (false).
    trusteer
    IBM Security Trusteer détecte l'accès initial des nouveaux appareils pour les utilisateurs.
  • Les attributs contiennent les propriétés suivantes :
    name
    Nom de l'attribut.
    values
    Valeurs de l'attribut.
    opCode
    Opérateur.
  • Opérateurs pour l'évaluation des valeurs d'attribut :
    EQ
    Toutes les valeurs sont présentes.
    NEQ
    Aucune des valeurs n'est présente.
    IN
    Une ou plusieurs des valeurs sont présentes.
    MATCH
    Condition ipAddress opCode pour les adresses IP, les plages ou les sous-réseaux correspondants.
    NOMATCH
    Condition ipAddress opCode pour les adresses IP, les plages ou les sous-réseaux non correspondants.
  • Le résultat contient les propriétés suivantes :
    Action
    Indique l'action à déclencher lorsque les conditions sont remplies. Les valeurs admises sont :
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS - authentification multi-facteur chaque fois que la règle est mise en correspondance lors de l'évaluation de la stratégie d'accès.
    • ACTION_MFA_PER_SESSION - authentification multi-facteur une fois par session authentifiée et autorisation si elle est déjà terminée.
    • ACTION_DENY.
    authnMethods
    Spécifie les mécanismes d'authentification autorisés lorsque l'action est une authentification multi-facteur (MFA). urn:ibm:security:authentication:asf:macotp - permet à l'utilisateur de sélectionner n'importe quel mécanisme qu'il peut exécuter, ou un ou plusieurs des facteurs suivants :
    • emailotp - Envoyer un mot de passe à utilisation unique par courrier électronique
    • smsotp - Envoyer un mot de passe à utilisation unique par SMS
    • totp - Mot de passe à utilisation unique limitée dans le temps (TOTP) (application d'authentification)
    • signatures - IBM® Verify notification push de l'application
    • passkey - authentificateur à clé de passe
    • voiceotp - Mot de passe à utilisation unique envoyé au numéro de téléphone enregistré de l'utilisateur.
    • anyFactor – est un alias pour urn:ibm:security:authentication:asf:macotp. Ce mécanisme est surtout utilisé dans la condition the factorLifetime et représente tous les mécanismes d'authentification valables qui sont complétés par l'utilisateur.
Facteur durée de vie

Cette condition associe la validité à un facteur ou à une méthode d'authentification spécifique. La validité peut être associée à un profil d'utilisateur ou à un appareil de l'utilisateur.

Cette fonction peut être utilisée pour implémenter une logique métier :
  • Pour les organisations qui ne souhaitent une authentification multi-facteur pour l'utilisateur qu'une seule fois par jour calendaire, vous pouvez configurer une nouvelle authentification pour une période de 18 heures.
  • Pour les organisations qui souhaitent une authentification multi-facteur pour l'utilisateur une fois par semaine, vous pouvez configurer une stratégie tous les six jours.
    Remarque : lorsque cette reauthPerDevice option est activée, l'utilisateur est invité à effectuer une authentification à deux facteurs (MFA) pour les appareils qui ne sont pas « connus ». Par exemple, un utilisateur s'authentifie à partir d'un autre navigateur (Chrome au lieu de Edge) ou d'un autre appareil physique.

    Lorsqu'un mode de navigation privé est utilisé, une authentification multi-facteur est générée pour le premier accès à chaque nouvelle session.

Remarque : les règles contenant cette condition doivent être des règles de type « “alwaysRun” » (règle de sélection) ne comportant aucune autre condition.
factorLifeTimeAttributes contient les attributs obligatoires suivants :
name
Une liste valide d'authnMethods ou l'attribut anyFactor.
values
L'intervalle de validité en secondes pour authnMethod.
opCode
EQ.
Les attributs suivants associent la validité de l'authentification multi-facteur à l'appareil d'un utilisateur si la valeur est “activé” ou au profil de l'utilisateur si la valeur est “désactivé”.
name
reauthPerDevice.
values
Activé ou désactivé.
opCode
EQ.
Attributs de contexte

Ces attributs peuvent inclure les attributs de gestion des appareils, OpenID Connect et de demande HTTP.

Attributs de contexte de gestion des appareils
Les attributs de gestion des appareils devicePlatform et deviceCompliance sont définis sous la condition contextAttributes.
devicePlatform
Le système d'exploitation et les plateformes de périphériques telles que iOS, Android, Mac OS X. Les valeurs autorisées sont IOS, ANDROID, OTHER_MOBILE, MACOS, WINDOWS, OTHER_DESKTOP. Cette condition nécessite un abonnement à la gestion des périphériques; voir Configuration de l'accès conditionnel.
deviceCompliance
Niveau de conformité de l'appareil. Les valeurs autorisées sont COMPLIANT, NONCOMPLIANT, et UNKNOWN. Cette condition nécessite l'abonnement à la gestion des appareils; voir « Configuration de l'accès conditionnel ».
Attributs de contexte OpenID Connect
La plupart des attributs de contexte ci-dessous qui sont disponibles dans les applications OpenID Connect sont des paramètres de demande OIDC. Ceux qui ne correspondent pas exactement aux noms des paramètres de demande sont accompagnés d'une explication. Pour plus d'informations, consultez les sites https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest et https://tools.ietf.org/html/rfc7636#section-4.3.
scope
Liste séparée par des espaces arbitraires des portées que ce jeton reçoit. Exemple de portée bien connue : emailaddressprofileopenid.
response_type
Un ou plusieurs des éléments suivants : codetokenid_token. Pour connaître les valeurs prises en charge, consultez https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet.
acr_values
Lie une ARC spécifique à une authentification spécifique.
method
Une liste de chaînes de caractères contenant les politiques qui ont été exécutées, au format urn:ibm:security:policy:id:<policy-id>.
claims
JSON complexe.
response_mode
Chaîne, de type query fragment form_post.
response_method
Indique la méthode renvoyée par une demande vers un URI.
code_challenge_exist
Choix booléen dans un flux PKCE qui indique si un élément code_challenge a été envoyé dans la demande.
redirect_uri_scheme
Composant plan de l'URI de redirection qui détecte un agent d'utilisateur autre qu'un navigateur et la réponse.
client_type
Indique si le client est de type public ou confidential. Les clients confidentiels ont un secret client.
request_type
Identifie le point de terminaison d'où provient la requête : device_authorize, user_authorize, authorization, access_token, introspect, user_info, revoke, ou client_registration.
Attributs de contexte de demande HTTP
Les en-têtes de demande HTTP peuvent être évalués dans les stratégies d'accès. Utilisez le nom d'en-tête de demande HTTP comme nom de l'attribut dans contextAttributes et la valeur qui correspond à la valeur de l'en-tête entrant. La transformation des valeurs n'est pas prise en charge actuellement et seule la norme opCodes pour les attributs de contexte peut être utilisée. Par exemple,,
"conditions": {
  "contextAttributes": {
    "attributes": [{
        "name": "referer",
        "values": [
          "https://<isv_tenant>/usc/",
          "https://<some_other_known_referrer>"
        ],
        "opCode": "IN"
      },
      {
        "name": "user-agent",
        "values": [
          "<specific_user_agent>"
        ],
        "opCode": "EQ"
      },
      {
        "name": "x-forwarded-for",
        "values": [
          "<x_forwarded_for_ip_address>"
        ],
        "opCode": "EQ"
      }
    ]
  }
 }
Attributs de sujet Cloud Directory
Les attributs de sujet ci-dessous sont disponibles pour les utilisateurs provenant de la source d'identité Cloud Directory.
displayName
Nom affiché pour l'utilisateur.
name
Prénom suivi du nom de famille.
family_name
Le nom de famille de l'utilisateur.
given_name
Prénom de l'utilisateur.
email
Adresse électronique de l'utilisateur.
emailAddress
Adresse électronique de l'utilisateur.
groupIds
ID de groupe.
preferred_username
Nom d'utilisateur modifiable.
uuid
Identificateur unique de l'utilisateur.
uniqueSecurityName
Identificateur unique de l'utilisateur.
realmName
Cette valeur est toujours cloudIdentityRealm pour les utilisateurs Cloud Directory non fédérés.
userType
Cette valeur est toujours regular pour les utilisateurs Cloud Directory non fédérés.
timeAttributes

Attributs d'heure de la journée.

  • Les attributs contiennent les propriétés suivantes :
    name
    Nom de l'attribut. Le paramètre name représente un jour de la semaine et éventuellement un fuseau horaire (timeZone), une date de début (startDate) et une date de fin (endDate). Les valeurs possibles sont les suivantes :
    • Lundi
    • Mardi
    • Mercredi
    • Jeudi
    • Vendredi
    • Samedi
    • Dimanche

    Les plages horaires par jour de la semaine sont définies par la plage indiquée dans leur champ { ... "values": [ "hh:mm-hh:mm" ]} et peuvent, si nécessaire, être programmées à l'aide d'un startDate et endDated'un.

    timeZone
    Fuseau horaire associé à la région. La valeur par défaut est le Temps Universel Coordonné (UTC). Les valeurs peuvent avoir l'un des formats suivants :
    • UTC<+/-><offset> - Par exemple, UTC+10
    • GMT<+/-><offset> - Par exemple, GMT-5
    • Nom d'une base de données de fuseaux horaires - Par exemple, Australia/Brisbane
    startDate
    Date et heure de début d'activation de la condition. Ce paramètre peut être utilisé individuellement pour créer une correspondance de temps de blocage et complété avec les attributs de jours de la semaine. Le paramètre startDate a priorité sur les jours de la semaine. Les valeurs sont au format YYYY-MM-DD HH:mm:ss. Pour les jours de la semaine, la valeur est au format hh:mm-hh:mm.
    endDate
    Date et heure de fin facultatives auxquelles la condition n'est plus active. Ce paramètre peut être utilisé individuellement pour créer une correspondance de temps de blocage avec un paramètre startDate, ou complété avec les attributs de jours de la semaine. Sans date de fin (endDate), la condition est mise en correspondance indéfiniment s'il existe un paramètre startDate ou un jour de la semaine. Les valeurs sont au format YYYY-MM-DD HH:mm:ss.
ipAddress

Condition basée sur l'adresse IP prenant en charge IPv4 et IPv6.

  • La condition contient la propriété suivante :
    values
    Valeurs de la condition. Les valeurs valides sont une plage d'adresses IP, une liste d'adresses IP séparées par des virgules ou une adresse IP CIDR.
    opCode
    Opérateur. Des opCodes spécifiques sont requis pour la condition ipAddress.
    Opérateurs disponibles :
    MATCH
    Toutes les valeurs sont présentes.
    NOMATCH
    Aucune des valeurs n'est présente.
location

Pays ou ville résolu à partir de l'adresse IP de l'utilisateur. Pays doit contenir une liste séparée par des virgules de noms de pays ou des codes pays de trois lettres en fonction de la norme ISO ci-après. Voir la norme ISO 3166-1 alpha-3. Vous devez entrer un pays ou un code pays de trois lettres. Ville doit contenir une liste séparée par des virgules de noms de ville. Vous devez entrer une ville.

  • La condition contient la propriété suivante :
    activé
    Indique si la condition est activée (true) ou désactivée (false).
    opCode
    Opérateur. Des opCodes spécifiques sont requis pour la condition location.
    Opérateurs disponibles :
    IN
    Une ou plusieurs des valeurs sont présentes.
    NOT IN
    Aucune des valeurs n'est présente.
geoLocation

Emplacements où les décisions d'accès ont été vérifiées. Par défaut, il s'agit des cinq emplacements vérifiés précédents.

  • La condition contient la propriété suivante :
    activé
    Indique si la condition est activée (true) ou désactivée (false).
trusteer

IBM Security Trusteer détecte l'accès initial des nouveaux appareils pour les utilisateurs.

  • La condition contient la propriété suivante :
    activé
    Indique si la condition est activée (true) ou désactivée (false).

Procédure

  1. Obtenez un jeton d'accès.
    Utilisez un client API disposant de l'autorisation manageAccessPolicies « Gérer les politiques d'accès » pour générer un jeton d'accès.
    Request:
    
    curl https://<tenant-hostname>/oidc/endpoint/default/token 
    -d 'grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>'
    
    Response:
    
    {
      "access_token": <access_token>,
      "token_type": "Bearer",
      "expires_in": 7199
    }

    Sauvegardez le jeton d'accès pour les demandes suivantes.

  2. Envoyez la stratégie d'accès dans le corps de demande.
    
    Request:
    
    curl -X POST \
      https://<tenant-hostname>/v5.0/policyvault/accesspolicy \
      -H 'Authorization: Bearer <access_token>' \
      -H 'Content-Type: application/json' \
      -d 
    '{
        "schemaVersion": "urn:access:policy:4.0:schema",
        "name": "policy_name",
        "description": "Description of the policy",
        "rules": [
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_ALLOW"
                    },
                    "authnMethods": []
                },
                "name": "allow_with_conditions",
                "id": "1",
                "alwaysRun": false,
                "conditions": {
                    "subjectAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "cloudIdentityRealm",
                                    "www.ibm.com"
                                ],
                                "name": "realmName",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "val1"
                                ],
                                "name": "customAttr1",
                                "opCode": "NEQ"
                            }
                        ]
                    },
                    "contextAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "COMPLIANT",
                                    "NONCOMPLIANT",
                                    "UNKNOWN"
                                ],
                                "name": "deviceCompliance",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "IOS",
                                    "ANDROID",
                                    "OTHER_MOBILE",
                                    "MACOS",
                                    "WINDOWS",
                                    "OTHER_DESKTOP"
                                ],
                                "name": "devicePlatform",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "value1",
                                    "value2"
                                ],
                                "name": "attrName",
                                "opCode": "EQ"
                            }
                        ]
                    }
                }
            },
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_MFA_PER_SESSION"
                    },
                    "authnMethods": [
                        "urn:ibm:security:authentication:asf:macotp"
                    ]
                },
                "name": "mfa_once_per_session",
                "id": "2",
                "alwaysRun": false,
                "conditions": {}
            },
         {	           
             "name": "Authentication factor validity",
             "id": "3",
             "conditions": {
             "factorLifetimeAttributes": {
                 "attributes": [
                 {
                     "name": "smsotp",
                     "opCode": "EQ",
                     "values": [
                        "120"
                      ]
                   }
                  ]
                }
           },
           "result": {
            "extendedAction": {
                "action": "ACTION_MFA_OVERRIDE"
             }
           }
             },
    
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_DENY"
                    },
                    "authnMethods": []
                },
                "name": "deny_otherwise",
                "id": "100",
                "alwaysRun": false,
                "conditions": {}
            }
        ]
    }'