Verwaltung von Zugriffsrichtlinien über APIs

Eine Zugriffsrichtlinie ist eine Gruppe von Regeln und Bedingungen, die ausgewertet werden, um die Zugriffsentscheidung zu bestimmen. Sie können angepasste Zugriffsrichtlinien erstellen. Alle angepassten Zugriffsrichtlinien werden als Optionen in der Anwendungskonfiguration angezeigt.

Informationen zu dieser Task

Einige Standardzugriffsrichtlinien werden für die sofortige Verwendung bereitgestellt und können nicht geändert werden. Tenants können angepasste Zugriffsrichtlinien gemäß ihren Anforderungen hinzufügen.

  • Regeln werden auf der Basis der ersten Übereinstimmung ausgewertet. Wenn ein Abgleich aller Bedingungen in einer Regel als wahr ausgewertet wird, wird das Ergebnis der Regel als Auswertungsentscheidung zurückgegeben. Es wird keine weitere Verarbeitung ausgeführt.
  • Der optionale Parameter alwaysRun: true kann einer einzelnen Regel hinzugefügt werden. Dieser Parameter bewirkt, dass die Regel zusätzlich zu der zuerst abgeglichenen Gruppe von Regeln ausgewertet wird. Die Ergebnisse des ersten Abgleichs und der Verwendung des Parameters alwaysRun werden kombiniert und die restriktivste Aktion wird als Ergebnis der Richtlinie angewendet. Einer Richtlinie können mehrere Regeln alwaysRun hinzugefügt werden.
  • Wenn eine Richtlinie eine bestimmte Subskription für eine Bedingung erfordert, wie beispielsweise Gerätemanagement, und der Tenant momentan nicht für diese Subskription berechtigt ist, wird die Richtlinie übersprungen. Es wird eine Mehrfaktorauthentifizierungsentscheidung (MFA-Entscheidung) zurückgegeben.
  • Wenn eine Regel eine bestimmte Subskription für MFA erfordert und der Tenant momentan nicht für diese Subskription berechtigt ist, wird eine ausgewertete MFA-Entscheidung in eine Zurückweisung geändert. Durch diese Änderung wird die Anwendung geschützt, anstatt unbedingten Zugriff zu ermöglichen.

Der Richtlinieneditor kann zum Erstellen und Ändern von Richtlinien verwendet werden. Siehe „Verwalten von Zugriffsrichtlinien “.

Einige Bedingungen können nicht mithilfe des Richtlinieneditors hinzugefügt werden. In diesen Fällen kann die API zum Ändern vorhandener Richtlinien oder zum Erstellen neuer Zugriffsrichtlinien mit diesen Bedingungen verwendet werden.

Die Syntaxprüfung erfolgt, wenn eine Zugriffsrichtlinie erstellt oder aktualisiert wird.

Zugriffsrichtlinien haben das folgende JSON-Format:
Hinweis: FedRAMP unterstützt keinen adaptiven Zugriff. Daher stehen den Kunden von „ FedRAMP “ keine Trusteer-Funktionen zur Verfügung.
{
    "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": []
            }
        }
    ]
}
Hinweis: Der Großteil der API ist bereits in der Swagger-Dokumentation beschrieben. Sie können die Swagger-Dokumentation über die Administratorkonsole unter „Einstellungen“ > „API-Zugriff“ > „API-Dokumentation“ aufrufen. Weitere Informationen zu den Swagger-APIs finden Sie unter „Anwendungsprogrammierschnittstellen (APIs) überprüfen “.
Die folgenden Informationen gelten für die API-Regeln.
  • Jede Regel besteht aus diesen Eigenschaften:
    name
    Ein Name für die Regel.
    id
    Die eindeutige ID für die Regel, die in Ereignisdaten und Berichten verwendet wird.
    conditions
    Pro Regel kann mehr als eine Bedingung vorhanden sein. Alle Bedingungen in der Regel müssen als wahr ausgewertet werden, damit für die Regel eine Übereinstimmung zurückgegeben und das Ergebnis angewendet wird. Die Standardregel enthält eine leere Bedingung.
  • Die Bedingungen enthalten die folgenden Eigenschaften:
    contextAttributes
    Die Attribute, die für den Ablauf, in dem die Zugriffsrichtlinie ausgeführt wurde, als Kontext dienen. Diese Attribute umfassen Attribute für Gerätemanagement, OpenID Connect und HTTP-Anforderungen.
    subjectAttributes
    Die Anmeldesitzungsattribute, die dem Subjekt des authentifizierten Benutzers zugeordnet sind.
    factorLifetimeAttributes
    Ordnen Sie die Gültigkeit einem bestimmten Authentifizierungsfaktor oder einer bestimmten Authentifizierungsmethode zu.
    timeAttributes
    Die Attribute für die Tageszeit, die die zeitbasierte Zugriffssteuerung ermöglichen.
    ipAddress
    Die IP-Adressbedingung, die Zulassungs- und Blockierlisten auf der Basis einzelner IP-Adressen, eines Bereichs von IP-Adressen oder eines Teilnetzes ermöglicht.
    location
    Das Land oder die Stadt, das bzw. die aus der IP-Adresse des Benutzers aufgelöst wird. Das Land muss eine durch Kommas getrennte Liste der Landesnamen oder aus drei Buchstaben bestehende Landescodes auf der Basis des folgenden ISO-Standards enthalten. Ein einzelnes Land oder ein aus drei Buchstaben bestehender Landescode ist zulässig.

    Die Stadt muss eine durch Kommas getrennte Liste der Ortsnamen enthalten. Eine einzelne Stadt ist zulässig.

    geoLocation
    Die Standorte, an denen Zugriffsentscheidungen verifiziert wurden. Die Standardeinstellung gilt für die vorherigen fünf verifizierten Standorte. Die Bedingungseigenschaft ist entweder enabled (wahr) oder disabled (falsch).
    trusteer
    IBM Security Trusteer erkennt den Erstzugriff neuer Geräte für Benutzer.
  • Die Attribute enthalten die folgenden Eigenschaften:
    name
    Ein Name für das Attribut.
    values
    Die Werte des Attributs.
    opCode
    Der Operator.
  • Die Operatoren für die Auswertung von Attributwerten:
    EQ
    Alle Werte sind vorhanden.
    NEQ
    Keiner der Werte ist vorhanden.
    IN
    Einer oder mehrere der Werte sind vorhanden.
    MATCH
    Die ipAddress-Bedingung opCode für übereinstimmende IP-Adressen, Bereiche oder Teilnetze.
    NOMATCH
    Die ipAddress-Bedingung opCode für nicht übereinstimmende IP-Adressen, Bereiche oder Teilnetze.
  • Das Ergebnis (result) enthält die folgenden Eigenschaften:
    Action
    Gibt an, welche Aktion ausgelöst werden soll, wenn die Bedingungen erfüllt sind. Gültige Werte sind:
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS - Jedes Mal MFA, wenn für die Regel während der Zugriffsrichtlinienauswertung eine Übereinstimmung gefunden wird.
    • ACTION_MFA_PER_SESSION - MFA einmal pro authentifizierter Sitzung und Zugriff ermöglichen, wenn bereits ausgeführt.
    • ACTION_DENY
    authnMethods
    Gibt die zulässigen Authentifizierungsverfahren an, wenn es sich bei der Aktion um eine Mehrfaktorauthentifizierung (MFA) handelt. urn:ibm:security:authentication:asf:macotp -Ermöglicht es dem Benutzer, ein beliebiges Verfahren auszuwählen, das sie ausführen können, oder einen oder mehrere der folgenden Faktoren:
    • emailotp - Kennwort für einmaliges Anmelden über E-Mail
    • smsotp - Kennwort für einmaliges Anmelden über SMS
    • totp - Zeitbasiertes Kennwort für einmaliges Anmelden (Authentifikator-App)
    • signatures - IBM® Verify Push-Benachrichtigung der App
    • passkey - Passwort -Authentifikator
    • voiceotp - Kennwort für einmaliges Anmelden über Sprache, das an die registrierte Telefonnummer des Benutzers gesendet wird
    • anyFactor – Aliasname für urn:ibm:security:authentication:asf:macotp. Dieses Verfahren wird vor allem in der Bedingung factorLifetime verwendet und stellt ein beliebiges gültiges Authentifizierungsverfahren dar, das vom Benutzer ausgeführt wird.
FactorLifeTime

Diese Bedingung ordnet die Gültigkeit einem bestimmten Authentifizierungsfaktor oder einer bestimmten Authentifizierungsmethode zu. Die Gültigkeit kann einem Benutzerprofil oder dem Gerät eines Benutzers zugeordnet werden.

Dieses Feature kann zum Implementieren von Geschäftslogik verwendet werden, wie z. B.:
  • Für Organisationen, in denen die Mehrfaktorauthentifizierung eines Benutzers nur einmal pro Kalendertag ausgeführt werden soll, können Sie die erneute Authentifizierung für einen Zeitraum von 18 Stunden konfigurieren.
  • Für Organisationen, in denen die Mehrfaktorauthentifizierung eines Benutzers einmal pro Arbeitswoche ausgeführt werden soll, können Sie eine Richtlinie für alle 6 Tage konfigurieren.
    Hinweis: Wenn diese reauthPerDevice Option aktiviert ist, wird der Benutzer bei „unbekannten“ Geräten zur MFA-Authentifizierung aufgefordert. Beispiel: Ein Benutzer authentifiziert sich über einen anderen Browser (Chrome anstelle von Edge) oder über eine andere physische Einheit.

    Wird ein privater Browsing-Modus verwendet, wird für den ersten Zugriff in jeder neuen Sitzung eine MFA-Anforderung generiert.

Hinweis: Regeln, die diese Bedingung enthalten, müssen eine „ “alwaysRun” “-Regel sein, in der keine weiteren Bedingungen definiert sind.
factorLifeTimeAttributes enthält die folgenden obligatorischen Attribute:
name
Eine Liste gültiger authnMethods oder das Attribut anyFactor.
values
Das Gültigkeitsintervall in Sekunden für authnMethod.
opCode
EQ.
Die folgenden Attribute ordnen die MFA-Gültigkeit dem Gerät eines Benutzers zu, wenn der Wert "enabled" lautet, oder ordnen die MFA-Gültigkeit dem Profil eines Benutzers zu, wenn der Wert "disabled" lautet.
name
reauthPerDevice.
values
Entweder 'aktiviert' oder 'inaktiviert'.
opCode
EQ.
Kontextattribute

Kontextattribute können Attribute für Gerätemanagement, OpenID Connect und HTTP-Anforderungen umfassen.

Kontextattribute für Gerätemanagement
Die Gerätemanagementattribute 'devicePlatform' und 'deviceCompliance' sind unter der Bedingung (condition) 'contextAttributes' definiert.
devicePlatform
Das Betriebssystem und Geräteplattformen wie iOS, Android, Mac OS X. Die zulässigen Werte sind IOS, ANDROID, OTHER_MOBILE, MACOS, WINDOWS, OTHER_DESKTOP. Für diese Bedingung ist das „Device Management“-Abonnement erforderlich, siehe „Konfigurieren des bedingten Zugriffs “.
deviceCompliance
Die Konformitätsebene des Geräts. Die zulässigen Werte sind COMPLIANT, NONCOMPLIANT, und UNKNOWN. Für diese Voraussetzung ist das „Device Management“-Abonnement erforderlich; siehe „Konfigurieren des bedingten Zugriffs “.
OpenID Connect-Kontextattribute
Bei den meisten der folgenden Kontextattribute, die für OpenID Connect-Anwendungen verfügbar sind, handelt es sich um OIDC-Anforderungsparameter. Für die Attribute, die über keine 1:1-Entsprechung mit den Anforderungsparameternamen verfügen, ist eine Erläuterung angegeben. Weitere Informationen finden Sie unter https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest und https://tools.ietf.org/html/rfc7636#section-4.3.
scope
Eine beliebige Liste der durch Leerzeichen getrennten Geltungsbereiche, die von diesem Token empfangen werden. Ein Beispiel eines bekannten Geltungsbereichs ist emailaddressprofileopenid.
response_type
Eine oder mehrere der folgenden Angaben: codetokenid_token. Die unterstützten Werte finden Sie unter https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet.
acr_values
Bindet eine bestimmte ARC an eine spezifische Anwendung.
method
Eine Liste von Zeichenfolgen, die die ausgeführten Richtlinien im Format urn:ibm:security:policy:id:<policy-id>. enthalten.
claims
Eine komplexe JSON.
response_mode
Eine Zeichenkette, eine von query fragment form_post.
response_method
Gibt die Methode an, die von einer Anforderung an einen URI zurückgegeben wird.
code_challenge_exist
Eine boolesche Auswahl in einem PKCE-Ablauf, die angibt, ob eine code_challenge in der Anforderung gesendet wurde.
redirect_uri_scheme
Die Schemakomponente der Umleitungs-URI, die einen Nicht-Browserbenutzeragenten und die Antwort erkennt.
client_type
Gibt an, ob es sich bei den Client um einen öffentlichen (public) oder vertraulichen (confidential) Client handelt. Für vertrauliche Clients ist ein geheimer Clientschlüssel vorhanden.
request_type
Gibt den Endpunkt an, von dem die Anfrage stammt: device_authorize, user_authorize, authorization, access_token, introspect, user_info, revoke, oder client_registration.
HTTP-Anforderungskontextattribute
HTTP-Anforderungsheader können in Zugriffsrichtlinien ausgewertet werden. Verwenden Sie den HTTP-Anforderungsheadernamen als den Namen des Attributs in den Kontextattributen (contextAttributes) und den Wert, der dem Wert des eingehenden Headers entspricht. Die Umwandlung von Werten wird derzeit nicht unterstützt, und es kann nur der Standard opCodes für Kontextattribute verwendet werden. Zum Beispiel,,
"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"
      }
    ]
  }
 }
Cloud Directory-Subjektattribute
Die folgenden Subjektattribute sind für Benutzer in der Cloud Directory-Identitätsquelle verfügbar.
displayName
Der Name, der für den Benutzer angezeigt wird.
name
Der Vorname, gefolgt vom Familiennamen.
family_name
Der Familienname des Benutzers.
given_name
Der Vorname des Benutzers.
email
Die E-Mail des Benutzers.
emailAddress
Die E-Mail des Benutzers.
groupIds
Die Gruppen-IDs.
preferred_username
Ein änderbarer Benutzername.
uuid
Eine eindeutige ID für den Benutzer.
uniqueSecurityName
Eine eindeutige ID für den Benutzer.
realmName
Dieses Attribut hat für nicht föderierte Cloud Directory-Benutzer immer den Wert cloudIdentityRealm.
userType
Dieses Attribut hat für nicht föderierte Cloud Directory-Benutzer immer den Wert regular.
timeAttributes

Attribute für die Tageszeit.

  • Die Attribute enthalten die folgenden Eigenschaften:
    name
    Ein Name für das Attribut. Der Name (name) ist ein Wochentag und wahlweise die Angabe der Zeitzone (timeZone), des Startdatums (startDate) und des Enddatums (endDate). Gültige Werte sind:
    • Montag
    • Dienstag
    • Mittwoch
    • Donnerstag
    • Freitag
    • Samstag
    • Sonntag

    endDateDie Zeitbereiche für die Wochentage werden durch den Bereich in ihrem { ... "values": [ "hh:mm-hh:mm" ]} aktiviert und können optional mit einem startDate und einem gestaffelt werden.

    timeZone
    Die Zeitzone, die der Region zugeordnet ist. Der Standardwert ist die koordinierte Weltzeit (UTC). Die Werte können eines der folgenden Formate haben.
    • UTC<+/-><offset> - Zum Beispiel, UTC+10
    • GMT<+/-><offset> - Zum Beispiel, GMT-5
    • Ein Zeitzonendatenbankname - Beispiel: Australia/Brisbane
    startDate
    Das Startdatum und die Startzeit, das bzw. die angibt, ab wann die Bedingung aktiv ist. Diese Angabe kann zum Erstellen eines Blockzeitabgleichs verwendet werden und mit Attributen für die Wochentage bereitgestellt werden. Die Angabe für startDate hat Vorrang vor den Wochentagen. Die Werte liegen im Format YYYY-MM-DD HH:mm:ss. Für die Wochentage hat der Wert das Format hh:mm-hh:mm.
    endDate
    Das optionale Enddatum und die optionale Endzeit, das bzw. die angibt, ab wann die Bedingung nicht mehr aktiv ist. Diese Angabe kann zum Erstellen eines Blockzeitabgleichs mit einem Startdatum (startDate) verwendet werden oder mit Attributen für die Wochentage bereitgestellt werden. Ohne die Angabe eines Enddatums (endDate) gilt die Bedingung unbegrenzt, wenn ein Startdatum (startDate) oder Wochentag vorhanden ist. Die Werte liegen im Format YYYY-MM-DD HH:mm:ss.
ipAddress

Die IP-adressbasierte Bedingung, die IPv4 und IPv6 unterstützt.

  • Die Bedingung enthält die folgende Eigenschaft:
    values
    Die Werte der Bedingung. Gültige Werte sind ein Bereich von IP-Adressen, eine Liste der durch Kommas getrennten IP-Adressen oder eine CIDR-IP-Adresse.
    opCode
    Der Operator. Für diese ipAddress Erkrankung sind spezifische opCodes Maßnahmen erforderlich.
    Die verfügbaren Operatoren sind:
    MATCH
    Alle Werte sind vorhanden.
    NOMATCH
    Keiner der Werte ist vorhanden.
location

Das Land oder die Stadt, das bzw. die aus der IP-Adresse des Benutzers aufgelöst wird. Das Land muss eine durch Kommas getrennte Liste der Landesnamen oder aus drei Buchstaben bestehende Landescodes auf der Basis des folgenden ISO-Standards enthalten. Siehe ISO 3166-1 unter alpha-3. Ein einzelnes Land oder ein aus 3 Buchstaben bestehender Landescode ist zulässig. Die Stadt muss eine durch Kommas getrennte Liste der Ortsnamen enthalten. Eine einzelne Stadt ist zulässig.

  • Die Bedingung enthält die folgende Eigenschaft:
    aktiviert
    Gibt an, ob die Bedingung aktiviert (wahr) oder inaktiviert (falsch) ist.
    opCode
    Der Operator. Für diese location Erkrankung sind spezifische opCodes Maßnahmen erforderlich.
    Die verfügbaren Operatoren sind:
    IN
    Einer oder mehrere der Werte sind vorhanden.
    NOT IN
    Keiner der Werte ist vorhanden.
geoLocation

Die Standorte, an denen Zugriffsentscheidungen verifiziert wurden. Die Standardeinstellung gilt für die vorherigen fünf verifizierten Standorte.

  • Die Bedingung enthält die folgende Eigenschaft:
    aktiviert
    Gibt an, ob die Bedingung aktiviert (wahr) oder inaktiviert (falsch) ist.
trusteer

IBM Security Trusteer erkennt den Erstzugriff neuer Geräte für Benutzer.

  • Die Bedingung enthält die folgende Eigenschaft:
    aktiviert
    Gibt an, ob die Bedingung aktiviert (wahr) oder inaktiviert (falsch) ist.

Vorgehensweise

  1. Rufen Sie ein Zugriffstoken ab.
    Verwenden Sie einen API-Client mit der manageAccessPolicies Berechtigung „Zugriffsrichtlinien verwalten“, um ein Zugriffstoken zu generieren.
    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
    }

    Speichern Sie das Zugriffstoken für nachfolgende Anforderungen.

  2. Senden Sie die Zugriffsrichtlinie als Teil des Anforderungshauptteils.
    
    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": {}
            }
        ]
    }'