API によるアクセスポリシーの管理

アクセス・ポリシーは、アクセスの決定を判別するために評価される一連のルールおよび条件です。 カスタマイズしたアクセス・ポリシーを作成できます。 すべてのカスタマイズしたアクセス・ポリシーが、アプリケーション構成でオプションとして表示されます。

このタスクについて

即時に使用できるように、いくつかのデフォルト・アクセス・ポリシーが提供されていますが、これらは変更できません。 テナントは、ニーズに従って、カスタマイズしたアクセス・ポリシーを追加できます。

  • ルールは最初に一致したものが評価されます。 ルール内のすべての条件の一致が true と評価されると、ルールの結果が評価決定として返されます。 それ以上の処理は行われません。
  • オプション・パラメーター alwaysRun: true を個々のルールに追加できます。 このパラメーターを使用すると、最初に一致したルール・セットに加えて、このルールが評価されます。 最初の一致の結果と alwaysRun パラメーターが組み合わせられ、ポリシーの結果として最も制限の厳しいアクションが適用されます。 1 つのポリシーに複数の alwaysRun ルールを追加できます。
  • ポリシーが条件に特定のサブスクリプション (デバイス管理など) を求めている場合に、現時点でテナントにそのサブスクリプションに対する資格がないときは、そのポリシーがスキップされます。 多要素認証 (MFA) の決定が返されます。
  • ルールが MFA に特定のサブスクリプションを求めている場合に、現時点でテナントにそのサブスクリプションに対する資格がないときは、評価された MFA 決定が拒否に変更されます。 この変更により、無条件のアクセスが不可能となり、アプリケーションが保護されます。

ポリシー・エディターを使用して、ポリシーの作成や変更を行うことができます。 「アクセスポリシーの管理」 を参照してください。

一部の条件をポリシー・エディターで追加できない場合があります。 その場合は、API を使用して既存のポリシーを変更するか、該当する条件を指定して新しいアクセス・ポリシーを作成することができます。

アクセス・ポリシーが作成または更新されるときに、構文の検証が実行されます。

アクセス・ポリシーは、以下の JSON 形式です。
注:FedRAMP はアダプティブ・アクセスをサポートしていません。 したがって、 FedRAMP をご利用のお客様は、Trusteerの機能をご利用いただけません。
{
    "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": []
            }
        }
    ]
}
注: APIの大部分は、すでにSwaggerのドキュメントに記載されています。 Swaggerドキュメントには、管理者コンソールの「 設定 」>「 APIアクセス 」>「 APIドキュメント 」からアクセスできます。 Swagger API の詳細については、 「アプリケーション・プログラミング・インターフェース (API) の確認」 を参照してください。
以下の情報が API ルールに適用されます。
  • 各ルールは、以下のプロパティーで構成されます。
    name
    ルールの名前。
    id
    イベント・データおよびレポートで使用されるルールの固有 ID。
    conditions
    1 つのルールに複数の条件を指定できます。 ルールに一致して結果が適用されるためには、ルール内のすべての条件が true に評価されなければなりません。 デフォルトのルールには空の条件が 1 つ含まれています。
  • 条件には、以下のプロパティーが含まれます。
    contextAttributes
    アクセス・ポリシーが実行されたフローのコンテキスト属性。 これには、デバイス管理、OpenID Connect、HTTP 要求の属性などがあります。
    subjectAttributes
    認証済みユーザー・サブジェクトに関連付けられているログイン・セッション属性。
    factorLifetimeAttributes
    特定の認証要素または認証方式に有効期間を関連付けます。
    timeAttributes
    時刻ベースのアクセス制御を可能にする時刻属性。
    ipAddress
    個人、範囲、またはサブネットを基準とした許可リストとブロック・リストを有効にする IP アドレス条件。
    location
    ユーザーの IP アドレスから解決される国または市区町村。 国には、国名または以下の ISO 規格に基づく 3 文字の国別コードのコンマ区切りリストが含まれている必要があります。 1 つの国または 3 文字の国別コードが許容されます。

    市区町村には、市区町村名のコンマ区切りリストが含まれている必要があります。 1 つの市区町村が許容されます。

    geoLocation
    アクセスの決定が検証されたロケーション。 デフォルトの設定は、最近検証された 5 つのロケーションが対象です。 この条件プロパティーは、enabled (true) または disabled (false) のいずれかです。
    trusteer
    IBM Security Trusteer で、ユーザーの新しいデバイスの初回アクセスが検出されます。
  • 属性には、以下のプロパティーが含まれます。
    name
    属性の名前。
    values
    属性の値。
    opCode
    演算子。
  • 属性値を評価するための演算子。
    EQ
    すべての値が存在している。
    NEQ
    値がいずれも存在していない。
    IN
    1 つ以上の値が存在している。
    MATCH
    一致する IP アドレス、範囲、またはサブネットを対象とする ipAddress 条件 opCode
    NOMATCH
    一致しない IP アドレス、範囲、またはサブネットを対象とする ipAddress 条件 opCode
  • 結果には、以下のプロパティーが含まれます。
    Action
    条件が満たされている場合にトリガーするアクションを指定します。 有効値は次のとおりです。
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS - アクセス・ポリシーの評価中に、ルールが一致するたびに MFA を実行します。
    • ACTION_MFA_PER_SESSION - 認証されたセッションごとに MFA が 1 回実行され、既に完了していれば許可されます。
    • ACTION_DENY
    authnMethods
    アクションが多要素認証 (MFA) である場合に指定できる認証メカニズムを指定します。urn:ibm:security:authentication:asf:macotp - ユーザーは、完了できるすべてのメカニズム、または以下の 1 つ以上の要素を選択できます。
    • emailotp - メール・ワンタイム・パスワード
    • smsotp - SMS ワンタイム・パスワード
    • totp - 時刻ベースのワンタイム・パスワード (オーセンティケーター・アプリ)
    • signatures - IBM® Verify アプリのプッシュ通知
    • passkey - パスキー 認証アプリ
    • voiceotp - ユーザーの登録済み電話番号に送信される、音声によるワンタイム・パスワード。
    • anyFactorurn:ibm:security:authentication:asf:macotp の別名。 このメカニズムは、特に factorLifetime 条件で使用され、ユーザーが完了した有効な認証メカニズムを表します。
要素の存続時間

この条件は、特定の認証要素または認証方式に有効期間を関連付けます。 有効期間は、ユーザー・プロファイルまたはユーザーのデバイスに関連付けることができます。

この機能を使用して、以下のようなビジネス・ロジックを実装できます。
  • ユーザーに対して 1 日に 1 回だけ MFA を実施したい組織の場合は、18 時間の再認証を構成できます。
  • ユーザーに対して営業週ごとに 1 回だけ MFA を実施したい組織の場合は、6 日ごとにポリシーを構成できます。
    注: この reauthPerDevice オプションを有効にすると、「既知」ではないデバイスに対しては、ユーザーに多要素認証(MFA)の入力が求められます。 例えば、ユーザーは別のブラウザー (Edge の代わりに Chrome) から、あるいは別の物理デバイスから認証を行うとします。

    プライベート・ブラウズ・モードを使用している場合、新規セッションごとに、最初のアクセスに対して MFA チャレンジが生成されます。

注: この条件を含むルールは、 “alwaysRun” ルールである必要があり、そのルール内に他の条件が定義されてはいけません。
factorLifeTimeAttributes には、以下の必須属性が含まれています。
name
有効な authnMethods 属性または anyFactor 属性のリスト。
values
authnMethod の有効期間 (秒単位)。
opCode
EQ。
以下の属性は、MFA の有効期間をユーザーのデバイス (値が「enabled」の場合)、またはユーザーのプロファイル (値が「disabled」の場合) と関連付けます。
name
reauthPerDevice.
values
enabled または disabled。
opCode
EQ。
コンテキスト属性

コンテキスト属性には、デバイス管理属性、OpenID Connect 属性、HTTP 要求属性などがあります。

デバイス管理コンテキスト属性
デバイス管理属性 devicePlatform および deviceComplaince は、contextAttributes 条件の下で定義されます。
devicePlatform
IOSオペレーティングシステムおよびデバイスプラットフォーム( iOS,、Android、 Mac OS X など)。許可される値は、 ANDROIDOTHER_MOBILEMACOSWINDOWSOTHER_DESKTOP、 です。この条件を適用するには、Device Management サブスクリプションが必要です。 「条件付きアクセスの設定」 を参照してください。
deviceCompliance
デバイスのコンプライアンス・レベル。 許可される値は、COMPLIANTNONCOMPLIANT、および UNKNOWN です。 この条件を満たすには、デバイス管理サブスクリプションが必要です。 「条件付きアクセスの設定」 を参照してください。
OpenID Connect コンテキスト属性
OpenID Connect アプリケーションで使用可能な以下のコンテキスト属性のほとんどは、OIDC 要求パラメーターです。 要求パラメーター名と 1-1 で対応していない属性には、説明が付いています。 詳細については、 https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest および https://tools.ietf.org/html/rfc7636#section-4.3 を参照してください。
scope
このトークンが受け取るスコープをスペースで区切った任意のリスト。 既知のスコープの例として、emailaddressprofileopenid などがあります。
response_type
以下のいずれか一つ以上: codetokenid_token. サポートされている値については、 https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet を参照してください。
acr_values
特定の ARC を特定の認証に関連付けます。
method
urn:ibm:security:policy:id:<policy-id>実行されたポリシーを含む文字列のリスト(形式:)。
claims
複合 JSON。
response_mode
query fragment form_post文字列、そのうちの1つ。
response_method
要求から URI に返されるメソッドを指定します。
code_challenge_exist
要求で code_challenge が送信されたかどうかを示す PKCE フローのブール選択項目。
redirect_uri_scheme
非ブラウザー・ユーザー・エージェントと応答を検出するリダイレクト URI のスキーム・コンポーネント。
client_type
クライアントが public クライアントなのか confidential クライアントなのかを示します。 confidential (機密) クライアントにはクライアント秘密鍵があります。
request_type
リクエストの発信元となったエンドポイントを特定します。 device_authorize, user_authorize, authorization, access_token, introspect, user_info, revoke,, または client_registration
HTTP 要求コンテキスト属性
HTTP 要求ヘッダーをアクセス・ポリシーで評価することができます。 HTTP 要求ヘッダー名を contextAttributes 内の属性の名前として使用し、値にはインバウンド・ヘッダーの値に対応する値を使用します。 現在、値の変換はサポートされておらず、コンテキスト属性には標準 opCodes の形式のみを使用できます。 例えば、
"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"
      }
    ]
  }
 }
クラウド・ディレクトリー・サブジェクト属性
クラウド・ディレクトリー ID ソースのユーザーに対しては、以下のサブジェクト属性が使用可能です。
displayName
ユーザーの表示名。
name
名、続けて姓。
family_name
ユーザーの姓。
given_name
ユーザーの名。
email
ユーザーの E メール。
emailAddress
ユーザーの E メール。
groupIds
グループ ID。
preferred_username
変更可能なユーザー名。
uuid
ユーザーの固有 ID。
uniqueSecurityName
ユーザーの固有 ID。
realmName
非連携クラウド・ディレクトリー・ユーザーの場合、この値は常に cloudIdentityRealm です。
userType
非連携クラウド・ディレクトリー・ユーザーの場合、この値は常に regular です。
timeAttributes

時刻属性。

  • 属性には、以下のプロパティーが含まれます。
    name
    属性の名前。 name は曜日で、オプションで timeZonestartDateendDate を指定できます。 指定できる値は以下のとおりです。
    • 月曜日
    • 火曜日
    • 水曜日
    • 木曜日
    • 金曜日
    • 土曜日
    • 日曜日

    endDatestartDate 曜日ごとの時間範囲は、その { ... "values": [ "hh:mm-hh:mm" ]} 設定範囲によって有効化され、必要に応じて および を使用して段階的に設定することができます。

    timeZone
    地域に関連付けられているタイム・ゾーン。 デフォルトは協定世界時 (UTC) です。 値は以下のいずれかの形式で指定できます。
    • UTC<+/-><offset> - 例えば、 UTC+10
    • GMT<+/-><offset> - 例えば、 GMT-5
    • タイム・ゾーン・データベース名 - 例: Australia/Brisbane
    startDate
    条件がアクティブになるタイミングを示す開始日時。 個別に使用してブロックの時刻一致を作成し、曜日属性でステージングできます。 startDate は曜日よりも優先されます。 YYYY-MM-DD HH:mm:ss値は次の形式で表示されます。 曜日の場合、値の形式は、hh:mm-hh:mm です。
    endDate
    条件がアクティブでなくなるタイミングを示すオプションの終了日時。 個別に使用して startDate とともにブロックの時刻一致を作成するか、または曜日属性でステージングできます。 startDate または曜日を指定した場合は、endDate を指定しないと条件の突き合わせが無期限に実行されます。 値の形式は YYYY-MM-DD HH:mm:ss です。
ipAddress

IPv4 と IPv6 をサポートする IP アドレス・ベースの条件。

  • この条件には以下のプロパティーが含まれます。
    values
    条件の値。 有効な値は、IP アドレスの範囲、コンマ区切りの IP アドレス・リスト、または CIDR IP アドレスです。
    opCode
    演算子。 この ipAddress 状態には、特定の opCodes ものが求められます。
    使用可能な演算子は以下のとおりです。
    MATCH
    すべての値が存在している。
    NOMATCH
    値がいずれも存在していない。
location

ユーザーの IP アドレスから解決される国または市区町村。 国には、国名または以下の ISO 規格に基づく 3 文字の国別コードのコンマ区切りリストが含まれている必要があります。 ISO 3166-1 を参照してください。 alpha-3 1 つの国または 3 文字の国別コードが許容されます。 市区町村には、市区町村名のコンマ区切りリストが含まれている必要があります。 1 つの市区町村が許容されます。

  • この条件には以下のプロパティーが含まれます。
    enabled
    条件が有効 (true) か無効 (false) か。
    opCode
    演算子。 この location 状態には、特定の opCodes ものが求められます。
    使用可能な演算子は以下のとおりです。
    IN
    1 つ以上の値が存在している。
    NOT IN
    値がいずれも存在していない。
geoLocation

アクセスの決定が検証されたロケーション。 デフォルトの設定は、最近検証された 5 つのロケーションが対象です。

  • この条件には以下のプロパティーが含まれます。
    enabled
    条件が有効 (true) か無効 (false) か。
trusteer

IBM Security Trusteer で、ユーザーの新しいデバイスの初回アクセスが検出されます。

  • この条件には以下のプロパティーが含まれます。
    enabled
    条件が有効 (true) か無効 (false) か。

手順

  1. アクセス・トークンを取得します。
    「アクセスポリシーの管理」権限 manageAccessPolicies を持つAPIクライアントを使用して、アクセストークンを生成してください。
    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
    }

    以降の要求のために、アクセス・トークンを保管します。

  2. アクセス・ポリシーを要求本体の一部として送信します。
    
    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": {}
            }
        ]
    }'