認可


Red Hat Developer Hub 1.3

Red Hat Developer Hub でロールベースアクセス制御 (RBAC) を使用して認可を設定する

Red Hat Customer Content Services

概要

Red Hat Developer Hub プラットフォームエンジニアは、ロールベースのアクセス制御 (RBAC) を使用して他のユーザーの認可を管理し、組織の特定のニーズを満たすことができます。

はじめに

認証 では、Red Hat Developer Hub に対してユーザーを認証する方法を学びました。Developer Hub は、ユーザーを認識しています。

このドキュメントでは、Developer Hub でユーザーにアクションの実行を許可する方法を学習します。Developer Hub でユーザーが実行できる操作を定義します。

ロールベースアクセス制御 (RBAC) は、システム内のリソースへのアクセスを制御し、システムのユーザーと、ユーザーがシステム内のリソースに対して実行できるアクションの間のマッピングを指定するセキュリティーの概念です。特定の権限を持つロールを定義し、そのロールをユーザーとグループに割り当てます。

Developer Hub の RBAC は、コード内で RBAC ポリシーを定義するアクセス許可フレームワーク上に構築されています。Developer Hub RBAC 機能を使用すると、コードでポリシーを定義するのではなく、シンプルな CSV ベースの形式を使用して宣言的にポリシーを定義できます。CSV を直接編集するのではなく、Developer Hub Web インターフェイスまたは REST API を使用してポリシーを定義できます。

Developer Hub で認可を定義するには、以下を行います。

  1. Developer Hub 管理者は RBAC 機能を有効にし、アクセス権を付与します。
  2. 次の方法を組み合わせて、ロールとポリシーを定義します。

    • Developer Hub ポリシー管理者は、Developer Hub Web インターフェイスまたは REST API を使用します。
    • Developer Hub 管理者は、メインの Developer Hub 設定ファイルを編集します。
    • Developer Hub 管理者は外部ファイルを編集します。

第1章 ロールベースのアクセス制御 (RBAC) 機能の有効化とアクセス権の付与

ロールベースのアクセス制御 (RBAC) 機能はデフォルトで無効になっています。RBAC プラグインを有効にし、ポリシー管理者が RBAC 機能の使用を開始することを宣言します。

Developer Hub のユーザーとグループの権限ポリシーは、権限ポリシー管理者が管理します。ロールベースアクセス制御 REST API には、権限ポリシー管理者のみアクセスできます。

前提条件

手順

  1. RBAC プラグインはインストールされていますが、デフォルトでは無効になっています。./dynamic-plugins/dist/janus-idp-backstage-plugin-rbac プラグインを有効にするには、次の内容で dynamic-plugins.yaml を編集します。

    dynamic-plugins.yaml フラグメント

    plugins:
      - package: ./dynamic-plugins/dist/janus-idp-backstage-plugin-rbac
        disabled: false
    Copy to Clipboard Toggle word wrap

    動的プラグインのインストールと表示 を参照してください。

  2. ポリシー管理者を宣言して、CSV ファイルを直接変更するのではなく、認証されたユーザーの選択した数が REST API または Web UI を使用して RBAC ポリシーを設定できるようにします。権限は、app-config-rhdh ConfigMap で参照される別の CSV ファイルで指定することも、REST API または Web UI を使用して作成することもできます。

    <your_policy_administrator_name> などのユーザーをポリシー管理者として宣言するには、app-config-rhdh などのカスタム Developer Hub ConfigMap を編集し、次のコードを app-config-rhdh.yaml コンテンツに追加します。

    app-config.yaml フラグメント

    permission:
      enabled: true
      rbac:
        admin:
          users:
            - name: user:default/<your_policy_administrator_name>
    Copy to Clipboard Toggle word wrap

検証

  1. 既存の Red Hat Developer Hub セッションからサインアウトし、宣言されたポリシー管理者アカウントを使用して再度ログインします。
  2. RBAC を有効にすると、ほとんどの機能はデフォルトで無効になっています。

    1. RHDH の Catalog ページに移動します。Create ボタンは表示されません。新しいコンポーネントは作成できません。
    2. API ページに移動します。Register ボタンは表示されません。

次のステップ

  • Developer Hub のリソースへのパーミッションを明示的に有効にします。

第2章 権限ポリシーとロール設定ソースの決定

さまざまなソースを使用して、Red Hat Developer Hub のポリシーとロールを設定できます。データの一貫性を維持するために、Developer Hub は各権限ポリシーとロールを 1 つの一意のソースに関連付けます。このソースはリソースを変更する場合にのみ使用できます。

利用可能なソースは次のとおりです。

設定ファイル

たとえば、ポリシー管理者を宣言する には、Developer Hub の app-config.yaml 設定ファイルでロールとポリシーを設定します。

設定ファイルは、RBAC プラグインによって提供されるデフォルトの role:default/rbac_admin ロールに関係します。デフォルトのロールには、権限ポリシーまたはロールの作成、読み取り、更新、削除、およびカタログエンティティーの読み取りを行うための制限された権限があります。

注記

デフォルトの権限が管理要件を満たしていない場合は、必要な権限ポリシーを持つカスタム管理者ロールを作成できます。

REST API
Developer Hub Web UI または REST API を使用して、ロールとポリシーを設定します。
CSV ファイル
外部 CSV ファイルを使用してロールとポリシーを設定します。
レガシー

レガシーソースは、RBAC バックエンドプラグインバージョン 2.1.3 より前に定義されたポリシーとロールに適用されます。上記の選択肢の中で、最も制限が少ないソースの場所です。

重要

従来のソースを使用した権限とロールを、REST API または CSV ファイルソースを使用した権限に置き換えます。

手順

  • ロールまたはポリシーのソースを確認するには、GET リクエストを使用します。

第3章 Red Hat Developer Hub Web UI を使用したロールベースアクセス制御 (RBAC) の管理

ポリシー管理者は、Developer Hub Web インターフェイス (Web UI) を使用して、特定のロールと権限を個々のユーザーまたはグループに割り当てることができます。ロールを割り当てると、リソースと機能へのアクセスが Developer Hub 全体で確実に規制されます。

Developer Hub のポリシー管理者ロールを使用すると、ユーザーとグループに権限を割り当てることができます。このロールを使用すると、Developer Hub Web UI を使用してロールを表示、作成、変更、削除できます。

3.1. Red Hat Developer Hub Web UI でのロールの作成

Web UI を使用して、Red Hat Developer Hub でロールを作成できます。

手順

  1. Developer Hub のサイドバーの下部にある Administration に移動します。

    RBAC タブが表示され、Developer Hub で作成されたすべてのロールが表示されます。

  2. (オプション) 任意のロールをクリックすると、OVERVIEW ページにロール情報が表示されます。
  3. CREATE をクリックしてロールを作成します。
  4. 所定のフィールドにロールの名前と説明を入力し、NEXT をクリックします。
  5. 検索フィールドを使用してユーザーとグループを追加し、NEXT をクリックします。
  6. Add permission policies セクションのドロップダウンから PluginPermission を選択します。
  7. Add permission policies セクションで、設定する Policy を選択または選択解除し、NEXT をクリックします。
  8. Review and create セクションで追加された情報を確認します。
  9. CREATE をクリックします。

検証

作成したロールは、RBAC タブのリストに表示されます。

3.2. Red Hat Developer Hub Web UI でのロールの編集

Web UI を使用して、Red Hat Developer Hub でロールを編集できます。

注記

policy.csv または ConfigMap ファイルから生成されたポリシーは、Developer Hub Web UI を使用して編集または削除することはできません。

前提条件

手順

  1. Developer Hub のサイドバーの下部にある Administration に移動します。

    RBAC タブが表示され、Developer Hub で作成されたすべてのロールが表示されます。

  2. (オプション) 任意のロールをクリックすると、OVERVIEW ページにロール情報が表示されます。
  3. 編集するロールの編集アイコンを選択します。
  4. 名前、説明、ユーザーとグループ、権限ポリシーなどのロールの詳細を編集し、NEXT をクリックします。
  5. 編集したロールの詳細を確認し、SAVE をクリックします。

ロールを編集した後、ロールの OVERVIEW ページで編集したロールの詳細を表示できます。OVERVIEW ページの各カードにある編集アイコンを使用して、ロールのユーザーとグループ、または権限を編集することもできます。

3.3. Red Hat Developer Hub Web UI でのロールの削除

Web UI を使用して、Red Hat Developer Hub でロールを削除できます。

注記

policy.csv または ConfigMap ファイルから生成されたポリシーは、Developer Hub Web UI を使用して編集または削除することはできません。

前提条件

手順

  1. Developer Hub のサイドバーの下部にある Administration に移動します。

    RBAC タブが表示され、Developer Hub で作成されたすべてのロールが表示されます。

  2. (オプション) 任意のロールをクリックすると、OVERVIEW ページにロール情報が表示されます。
  3. 削除するロールの Actions 列から削除アイコンを選択します。

    Delete this role? というポップアップが画面に表示されます。

  4. DELETE をクリックします。

第4章 REST API を使用した認可の管理

Red Hat Developer Hub の権限ポリシーとロールのメンテナンスを自動化するには、Developer Hub のロールベースアクセス制御 (RBAC) REST API を使用できます。

REST API を使用して次のアクションを実行できます。

  • 次の情報を取得します。

    • すべての権限ポリシー
    • 特定の権限ポリシー
    • 特定のロール
    • 静的プラグインの権限ポリシー
  • 作成、更新、または削除:

    • 許可ポリシー
    • ロール

4.1. curl ユーティリティーを使用した RBAC REST API へのリクエストの送信

curl ユーティリティーを使用して RBAC REST API リクエストを送信できます。

手順

  1. REST API に認証するための Bearer トークンを見つけます。

    1. ブラウザーで、Web コンソールの Network タブを開きます。
    2. メイン画面で、Developer Hub の ホームページ を再読み込みします。
    3. Web コンソールの Network タブで、query?term= ネットワーク呼び出しを検索します。
    4. 次の手順のために、レスポンス JSON に トークン を保存します。
  2. ターミナルで curl コマンドを実行し、応答を確認します。

    GET または DELETE リクエスト

    curl -v \
      -H "Authorization: Bearer <token>" \
      -X <method> "https://<my_developer_hub_url>/<endpoint>" \
    Copy to Clipboard Toggle word wrap

    JSON ボディーデータを必要とする POST リクエストまたは PUT リクエスト

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer <token>" \
      -X POST "https://<my_developer_hub_url>/<endpoint>" \
      -d <body>
    Copy to Clipboard Toggle word wrap

    <token>
    保存した認可トークンを入力します。
    <method>

    API エンドポイント の HTTP メソッドを入力します。

    • GET: 指定されたリソースエンドポイントから指定された情報を取得します。
    • POST: リソースを作成または更新します。
    • PUT: リソースを更新します。
    • DELETE: リソースを削除します。
    https://<my_developer_hub_url>
    Developer Hub の URL を入力します。
    <endpoint>
    /api/permission/policies など、リクエストを送信する API エンドポイント を入力します。
    <body>
    HTTP POST または PUT リクエストで API エンドポイント に必要なデータを含む JSON ボディーを入力します。

    ロールを作成するためのリクエストの例

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer <token>" \
      -X POST "https://<my_developer_hub_url>/api/permission/roles" \
      -d '{
          "memberReferences": ["group:default/example"],
          "name": "role:default/test",
          "metadata": { "description": "This is a test role" }
        }'
    Copy to Clipboard Toggle word wrap

    ロールを更新するリクエストの例

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer <token>" \
      -X PUT "https://<my_developer_hub_url>/api/permission/roles/role/default/test" \
      -d '{
              "oldRole": {
                "memberReferences":  [ "group:default/example" ],
                "name": "role:default/test"
              },
              "newRole": {
                "memberReferences": [ "group:default/example", "user:default/test" ],
                "name": "role:default/test"
              }
            }'
    Copy to Clipboard Toggle word wrap

    権限ポリシーを作成するためのリクエストの例

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer $token" \
      -X POST "https://<my_developer_hub_url>/api/permission/policies" \
      -d '[{
          "entityReference":"role:default/test",
          "permission": "catalog-entity",
          "policy": "read", "effect":"allow"
        }]'
    Copy to Clipboard Toggle word wrap

    権限ポリシーを更新するリクエストの例

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer $token" \
      -X PUT "https://<my_developer_hub_url>/api/permission/policies/role/default/test" \
      -d '{
             "oldPolicy": [
               {
                 "permission": "catalog-entity", "policy": "read", "effect": "allow"
               }
             ],
             "newPolicy":
               [
                 {
                   "permission": "policy-entity", "policy": "read", "effect": "allow"
                 }
               ]
           }'
    Copy to Clipboard Toggle word wrap

    条件を作成するためのリクエストの例

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer $token" \
      -X POST "https://<my_developer_hub_url>/api/permission/roles/conditions" \
      -d '{
          "result": "CONDITIONAL",
          "roleEntityRef": "role:default/test",
          "pluginId": "catalog",
          "resourceType": "catalog-entity",
          "permissionMapping": ["read"],
          "conditions": {
            "rule": "IS_ENTITY_OWNER",
            "resourceType": "catalog-entity",
            "params": {"claims": ["group:default/janus-authors"]}
          }
        }'
    Copy to Clipboard Toggle word wrap

    条件を更新するリクエストの例

    curl -v -H "Content-Type: application/json" \
      -H "Authorization: Bearer $token" \
      -X PUT "https://<my_developer_hub_url>/api/permission/roles/conditions/1" \
      -d '{
              "result":"CONDITIONAL",
              "roleEntityRef":"role:default/test",
              "pluginId":"catalog",
              "resourceType":"catalog-entity",
              "permissionMapping": ["read",  "update", "delete"],
              "conditions": {
                "rule": "IS_ENTITY_OWNER",
                "resourceType": "catalog-entity",
                "params": {"claims": ["group:default/janus-authors"]}
              }
           }'
    Copy to Clipboard Toggle word wrap

検証

  • 返された HTTP ステータスコードを確認します。

    200 OK
    リクエストは成功しました。
    201 Created
    リクエストの結果、新しいリソースが正常に作成されました。
    204 No Content
    リクエストは成功し、応答のペイロードにはこれ以上のコンテンツはありません。
    400 Bad Request
    リクエストの入力エラー。
    401 Unauthorized
    要求されたリソースに対する有効な認証がありません。
    403 Forbidden
    リクエストの承認を拒否します。
    404 Not Found
    要求されたリソースが見つかりませんでした。
    409 Conflict
    現在の状態とターゲットリソースとの要求の競合。

4.2. REST クライアントを使用した RBAC REST API へのリクエストの送信

任意の REST クライアントを使用して RBAC REST API リクエストを送信できます。

手順

  1. REST API に認証するための Bearer トークンを見つけます。

    1. ブラウザーで、Web コンソールの Network タブを開きます。
    2. メイン画面で、Developer Hub の ホームページ を再読み込みします。
    3. Web コンソールの Network タブで、query?term= ネットワーク呼び出しを検索します。
    4. 次の手順のために、レスポンス JSON に トークン を保存します。
  2. REST クライアントで、次のパラメーターを使用してコマンドを実行し、応答を確認します。

    認可
    保存した認可トークンを入力します。
    HTTP メソッド

    API エンドポイント の HTTP メソッドを入力します。

    • GET: 指定されたリソースエンドポイントから指定された情報を取得します。
    • POST: リソースを作成または更新します。
    • PUT: リソースを更新します。
    • DELETE: リソースを削除します。
    URL
    Developer Hub の URL と API エンドポイント を入力します (https://<my_developer_hub_url>/<endpoint> (https://<my_developer_hub_url>/api/permission/policies など))。
    Body
    HTTP POST リクエストで API エンドポイント に必要なデータを含む JSON ボディーを入力します。

4.3. サポートされている RBAC REST API エンドポイント

RBAC REST API は、Developer Hub でロール、権限、条件付きポリシーを管理し、ロールとポリシーに関する情報を取得するためのエンドポイントを提供します。

4.3.1. ロール

RBAC REST API は、Red Hat Developer Hub でロールを管理するために、次のエンドポイントをサポートします。

[GET] /api/permission/roles

Developer Hub のすべてのロールを返します。

応答例 (JSON)

[
  {
    "memberReferences": ["user:default/username"],
    "name": "role:default/guests"
  },
  {
    "memberReferences": [
      "group:default/groupname",
      "user:default/username"
    ],
    "name": "role:default/rbac_admin"
  }
]
Copy to Clipboard Toggle word wrap

[GET] /api/permission/roles/<kind>/<namespace>/<name>

Developer Hub の 1 つのロールに関する情報を返します。

応答例 (JSON)

[
  {
    "memberReferences": [
      "group:default/groupname",
      "user:default/username"
    ],
    "name": "role:default/rbac_admin"
  }
]
Copy to Clipboard Toggle word wrap

[POST] /api/permission/roles/<kind>/<namespace>/<name>

Developer Hub でロールを作成します。

Expand
表4.1 要求パラメーター
名前説明要否

body

作成される新しいロールの memberReferencesgroupnamespacename

リクエストの本文

必須

要求の body の例 (JSON)

{
  "memberReferences": ["group:default/test"],
  "name": "role:default/test_admin"
}
Copy to Clipboard Toggle word wrap

応答の例

201 Created
Copy to Clipboard Toggle word wrap

[PUT] /api/permission/roles/<kind>/<namespace>/<name>

Developer Hub のロールの memberReferenceskindnamespace、または name を更新します。

要求パラメーター

要求の body には、oldRole オブジェクトと newRole オブジェクトが含まれています。

Expand
名前説明要否

body

作成される新しいロールの memberReferencesgroupnamespacename

リクエストの本文

必須

要求の body の例 (JSON)

{
  "oldRole": {
    "memberReferences": ["group:default/test"],
    "name": "role:default/test_admin"
  },
  "newRole": {
    "memberReferences": ["group:default/test", "user:default/test2"],
    "name": "role:default/test_admin"
  }
}
Copy to Clipboard Toggle word wrap

応答の例

200 OK
Copy to Clipboard Toggle word wrap

[DELETE] /api/permission/roles/<kind>/<namespace>/<name>?memberReferences=<VALUE>

Developer Hub のロールから、指定されたユーザーまたはグループを削除します。

Expand
表4.2 要求パラメーター
名前説明要否

kind

エンティティーの種類

String

Required

namespace

エンティティーの namespace

String

Required

name

エンティティーの名前

String

Required

memberReferences

関連するグループの情報

String

Required

応答の例

204
Copy to Clipboard Toggle word wrap

[DELETE] /api/permission/roles/<kind>/<namespace>/<name>

Developer Hub から、指定されたロールを削除します。

Expand
表4.3 要求パラメーター
名前説明要否

kind

エンティティーの種類

String

Required

namespace

エンティティーの namespace

String

Required

name

エンティティーの名前

String

Required

応答の例

204
Copy to Clipboard Toggle word wrap

4.3.2. 権限ポリシー

RBAC REST API は、Red Hat Developer Hub で権限ポリシーを管理するために、次のエンドポイントをサポートします。

[GET] /api/permission/policies

すべてのユーザーの権限ポリシーリストを返します。

応答例 (JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow",
    "metadata": {
      "source": "csv-file"
    }
  },
  {
    "entityReference": "role:default/test",
    "permission": "catalog.entity.create",
    "policy": "use",
    "effect": "allow",
    "metadata": {
      "source": "csv-file"
    }
  },
]
Copy to Clipboard Toggle word wrap

[GET] /api/permission/policies/<kind>/<namespace>/<name>

指定されたエンティティー参照に関連する権限ポリシーを返します。

Expand
表4.4 要求パラメーター
名前説明要否

kind

エンティティーの種類

String

Required

namespace

エンティティーの namespace

String

Required

name

エンティティーに関連する名前

String

Required

応答例 (JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow",
    "metadata": {
      "source": "csv-file"
    }
  },
  {
    "entityReference": "role:default/test",
    "permission": "catalog.entity.create",
    "policy": "use",
    "effect": "allow",
    "metadata": {
      "source": "csv-file"
    }
  }
]
Copy to Clipboard Toggle word wrap

[POST] /api/permission/policies

指定されたエンティティーの権限ポリシーを作成します。

Expand
表4.5 要求パラメーター
名前説明要否

entityReference

kindnamespacename を含むエンティティーの参照値

String

Required

permission

特定のプラグイン、リソースタイプ、または名前からの権限

String

Required

policy

権限のポリシーアクション (createreadupdatedeleteuse など)

String

Required

effect

ポリシーを許可するかどうか

String

必須

要求の body の例 (JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
  }
]
Copy to Clipboard Toggle word wrap

応答の例

201 Created
Copy to Clipboard Toggle word wrap

[PUT] /api/permission/policies/<kind>/<namespace>/<name>

指定されたエンティティーの権限ポリシーを更新します。

要求パラメーター

要求の body には、oldPolicy オブジェクトと newPolicy オブジェクトが含まれています。

Expand
名前説明要否

permission

特定のプラグイン、リソースタイプ、または名前からの権限

String

Required

policy

権限のポリシーアクション (createreadupdatedeleteuse など)

String

Required

effect

ポリシーを許可するかどうか

String

必須

要求の body の例 (JSON)

{
  "oldPolicy": [
    {
      "permission": "catalog-entity",
      "policy": "read",
      "effect": "allow"
    },
    {
      "permission": "catalog.entity.create",
      "policy": "create",
      "effect": "allow"
    }
  ],
  "newPolicy": [
    {
      "permission": "catalog-entity",
      "policy": "read",
      "effect": "deny"
    },
    {
      "permission": "policy-entity",
      "policy": "read",
      "effect": "allow"
    }
  ]
}
Copy to Clipboard Toggle word wrap

応答の例

200
Copy to Clipboard Toggle word wrap

[DELETE] /api/permission/policies/<kind>/<namespace>/<name>?permission={value1}&policy={value2}&effect={value3}

指定されたエンティティーに追加された権限ポリシーを削除します。

Expand
表4.6 要求パラメーター
名前説明要否

kind

エンティティーの種類

String

Required

namespace

エンティティーの namespace

String

Required

name

エンティティーに関連する名前

String

Required

permission

特定のプラグイン、リソースタイプ、または名前からの権限

String

Required

policy

権限のポリシーアクション (createreadupdatedeleteuse など)

String

Required

effect

ポリシーを許可するかどうか

String

Required

応答の例

204 No Content
Copy to Clipboard Toggle word wrap

[DELETE] /api/permission/policies/<kind>/<namespace>/<name>

指定されたエンティティーに追加されているすべての権限ポリシーを削除します。

Expand
表4.7 要求パラメーター
名前説明要否

kind

エンティティーの種類

String

Required

namespace

エンティティーの namespace

String

Required

name

エンティティーに関連する名前

String

Required

応答の例

204 No Content
Copy to Clipboard Toggle word wrap

[GET] /api/permission/plugins/policies

すべての静的プラグインの権限ポリシーを返します。

応答例 (JSON)

[
  {
    "pluginId": "catalog",
    "policies": [
      {
        "isResourced": true,
        "permission": "catalog-entity",
        "policy": "read"
      },
      {
        "isResourced": false,
        "permission": "catalog.entity.create",
        "policy": "create"
      },
      {
        "isResourced": true,
        "permission": "catalog-entity",
        "policy": "delete"
      },
      {
        "isResourced": true,
        "permission": "catalog-entity",
        "policy": "update"
      },
      {
        "isResourced": false,
        "permission": "catalog.location.read",
        "policy": "read"
      },
      {
        "isResourced": false,
        "permission": "catalog.location.create",
        "policy": "create"
      },
      {
        "isResourced": false,
        "permission": "catalog.location.delete",
        "policy": "delete"
      }
    ]
  },
  ...
]
Copy to Clipboard Toggle word wrap

4.3.3. 条件付きポリシー

RBAC REST API は、Red Hat Developer Hub で条件付きポリシーを管理するための次のエンドポイントをサポートしています。

[GET] /api/permission/plugins/condition-rules

Developer Hub で有効になっている利用可能なプラグインの利用可能な条件ルールパラメータースキーマを返します。

応答例 (JSON)

[
   {
      "pluginId": "catalog",
      "rules": [
         {
            "name": "HAS_ANNOTATION",
            "description": "Allow entities with the specified annotation",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "annotation": {
                     "type": "string",
                     "description": "Name of the annotation to match on"
                  },
                  "value": {
                     "type": "string",
                     "description": "Value of the annotation to match on"
                  }
               },
               "required": [
                  "annotation"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "HAS_LABEL",
            "description": "Allow entities with the specified label",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "label": {
                     "type": "string",
                     "description": "Name of the label to match on"
                  }
               },
               "required": [
                  "label"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "HAS_METADATA",
            "description": "Allow entities with the specified metadata subfield",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "key": {
                     "type": "string",
                     "description": "Property within the entities metadata to match on"
                  },
                  "value": {
                     "type": "string",
                     "description": "Value of the given property to match on"
                  }
               },
               "required": [
                  "key"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "HAS_SPEC",
            "description": "Allow entities with the specified spec subfield",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "key": {
                     "type": "string",
                     "description": "Property within the entities spec to match on"
                  },
                  "value": {
                     "type": "string",
                     "description": "Value of the given property to match on"
                  }
               },
               "required": [
                  "key"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "IS_ENTITY_KIND",
            "description": "Allow entities matching a specified kind",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "kinds": {
                     "type": "array",
                     "items": {
                        "type": "string"
                     },
                     "description": "List of kinds to match at least one of"
                  }
               },
               "required": [
                  "kinds"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "IS_ENTITY_OWNER",
            "description": "Allow entities owned by a specified claim",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "claims": {
                     "type": "array",
                     "items": {
                        "type": "string"
                     },
                     "description": "List of claims to match at least one on within ownedBy"
                  }
               },
               "required": [
                  "claims"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         }
      ]
   }
   ... <another plugin condition parameter schemas>
]
Copy to Clipboard Toggle word wrap

[GET] /api/permission/roles/conditions/:id

指定された ID の条件を返します。

応答例 (JSON)

{
  "id": 1,
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/test",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["read"],
  "conditions": {
    "anyOf": [
      {
        "rule": "IS_ENTITY_OWNER",
        "resourceType": "catalog-entity",
        "params": {
          "claims": ["group:default/team-a"]
        }
      },
      {
        "rule": "IS_ENTITY_KIND",
        "resourceType": "catalog-entity",
        "params": {
          "kinds": ["Group"]
        }
      }
    ]
  }
}
Copy to Clipboard Toggle word wrap

[GET] /api/permission/roles/conditions

全ロールの全条件のリストを返します。

応答例 (JSON)

[
  {
    "id": 1,
    "result": "CONDITIONAL",
    "roleEntityRef": "role:default/test",
    "pluginId": "catalog",
    "resourceType": "catalog-entity",
    "permissionMapping": ["read"],
    "conditions": {
      "anyOf": [
        {
          "rule": "IS_ENTITY_OWNER",
          "resourceType": "catalog-entity",
          "params": {
            "claims": ["group:default/team-a"]
          }
        },
        {
          "rule": "IS_ENTITY_KIND",
          "resourceType": "catalog-entity",
          "params": {
            "kinds": ["Group"]
          }
        }
      ]
    }
  }
]
Copy to Clipboard Toggle word wrap

[POST] /api/permission/roles/conditions

指定されたロールの条件付きポリシーを作成します。

Expand
表4.8 要求パラメーター
名前説明要否

result

常に CONDITIONAL の値を持つ

String

Required

roleEntityRef

RBAC ロールへの文字列エンティティー参照 (role:default/dev など)

String

Required

pluginId

対応するプラグイン ID (catalog など)

String

Required

permissionMapping

権限アクションの配列 (['read', 'update', 'delete'] など)

String array

Required

resourceType

プラグインによって提供されるリソースタイプ (catalog-entity など)

String

Required

conditions

条件によって結合されたパラメーターまたは配列パラメーターを含む条件 JSON

JSON

Required

name

ロールの名前

String

Required

metadata.description

ロールの説明

String

任意

要求の body の例 (JSON)

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/test",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["read"],
  "conditions": {
    "rule": "IS_ENTITY_OWNER",
    "resourceType": "catalog-entity",
    "params": {
      "claims": ["group:default/team-a"]
    }
  }
}
Copy to Clipboard Toggle word wrap

応答例 (JSON)

{
  "id": 1
}
Copy to Clipboard Toggle word wrap

[PUT] /permission/roles/conditions/:id

指定された ID の条件ポリシーを更新します。

Expand
表4.9 要求パラメーター
名前説明要否

result

常に CONDITIONAL の値を持つ

String

Required

roleEntityRef

RBAC ロールへの文字列エンティティー参照 (role:default/dev など)

String

Required

pluginId

対応するプラグイン ID (catalog など)

String

Required

permissionMapping

権限アクションの配列 (['read', 'update', 'delete'] など)

String array

Required

resourceType

プラグインによって提供されるリソースタイプ (catalog-entity など)

String

Required

conditions

条件によって結合されたパラメーターまたは配列パラメーターを含む条件 JSON

JSON

Required

name

ロールの名前

String

Required

metadata.description

ロールの説明

String

任意

要求の body の例 (JSON)

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/test",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["read"],
  "conditions": {
    "anyOf": [
      {
        "rule": "IS_ENTITY_OWNER",
        "resourceType": "catalog-entity",
        "params": {
          "claims": ["group:default/team-a"]
        }
      },
      {
        "rule": "IS_ENTITY_KIND",
        "resourceType": "catalog-entity",
        "params": {
          "kinds": ["Group"]
        }
      }
    ]
  }
}
Copy to Clipboard Toggle word wrap

応答の例

200
Copy to Clipboard Toggle word wrap

[DELETE] /api/permission/roles/conditions/:id

指定された ID の条件付きポリシーを削除します。

応答の例

204
Copy to Clipboard Toggle word wrap

4.3.4. ユーザー統計

licensed-users-info-backend プラグインは、ログインしたユーザーに関連するデータを取得するためのさまざまな REST API エンドポイントを公開します。

licensed-users-info-backend プラグインには追加の設定は必要ありません。RBAC バックエンドプラグインが有効になっていると、エンドポイントは policy.entity.read 権限によって保護されているため、エンドポイントにアクセスするには管理者ロールを割り当てる必要があります。

ユーザー統計エンドポイントのベース URL は http://SERVER:PORT/api/licensed-users-info です (例: http://localhost:7007/api/licensed-users-info)。

[GET] /users/quantity

ログインしているユーザーの合計数を返します。

要求の例

curl -X GET "http://localhost:7007/api/licensed-users-info/users/quantity" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $token"
Copy to Clipboard Toggle word wrap

応答の例

{ "quantity": "2" }
Copy to Clipboard Toggle word wrap

[GET] /users

ログインしているユーザーとその詳細のリストを返します。

要求の例

curl -X GET "http://localhost:7007/api/licensed-users-info/users" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $token"
Copy to Clipboard Toggle word wrap

応答の例

[
  {
    "userEntityRef": "user:default/dev",
    "lastTimeLogin": "Thu, 22 Aug 2024 16:27:41 GMT",
    "displayName": "John Leavy",
    "email": "dev@redhat.com"
  }
]
Copy to Clipboard Toggle word wrap

[GET] /users

ログインしているユーザーのリストを CSV 形式で返します。

要求の例

curl -X GET "http://localhost:7007/api/licensed-users-info/users" \
-H "Content-Type: text/csv" \
-H "Authorization: Bearer $token"
Copy to Clipboard Toggle word wrap

応答の例

userEntityRef,displayName,email,lastTimeLogin
user:default/dev,John Leavy,dev@redhat.com,"Thu, 22 Aug 2024 16:27:41 GMT"
Copy to Clipboard Toggle word wrap

第5章 外部ファイルを使用した認可の管理

Red Hat Developer Hub のメンテナンスを自動化するには、Developer Hub を起動する前に、外部ファイルで権限とロールを設定できます。

5.1. Operator を使用して外部ファイルで権限の定義

Red Hat Developer Hub のメンテナンスを自動化するには、Developer Hub を起動する前に、外部ファイルで権限とロールを定義します。ファイルを準備し、OpenShift Container Platform プロジェクトにアップロードして、外部ファイルを使用するように Developer Hub を設定する必要があります。

手順

  1. 次の形式を使用して、CSV ファイル rbac-policies.csv でポリシーを定義します。

    1. ロール権限を定義します。

      p, <role_entity_reference>, <permission>, <action>, <allow_or_deny>
      Copy to Clipboard Toggle word wrap
      <role_entity_reference>
      ロールエンティティー参照 (例: role:default/guest)
      <permission>

      権限 (例: bulk.importcatalog.entity.readcatalog.entity.refresh)、または権限リソースタイプ (例: bulk-importcatalog-entity)

      権限ポリシーリファレンス を参照してください。

      <action>
      アクションタイプ (例: usereadcreateupdatedelete)。
      <allow_or_deny>
      許可されるアクセス: (allow または deny)。
    2. グループまたはユーザーにロールを割り当てます。

      g, <group_or_user>, <role_entity_reference>
      Copy to Clipboard Toggle word wrap
      <group_or_user>

      グループ (例: user:default/mygroup)、またはユーザー (例: user:default/myuser)。

      サンプル rbac-policies.csv

      p, role:default/guests, catalog-entity, read, allow
      p, role:default/guests, catalog.entity.create, create, allow
      g, user:default/my-user, role:default/guests
      g, group:default/my-group, role:default/guests
      Copy to Clipboard Toggle word wrap

  2. 次の形式を使用して、YAML ファイル rbac-conditional-policies.yaml で条件付きポリシーを定義します。

    result: CONDITIONAL
    roleEntityRef: <role_entity_reference>
    pluginId: <plugin_id>
    permissionMapping:
      - read
      - update
      - delete
    conditions: <conditions>
    Copy to Clipboard Toggle word wrap

    条件付きポリシーリファレンス を参照してください。

  3. rbac-policies.csv ファイルと rbac-conditional-policies.yaml ファイルを、Developer Hub を含む OpenShift Container Platform プロジェクトの rbac-policies config map にアップロードします。

    $ oc create configmap rbac-policies \
         --from-file=rbac-policies.csv \
         --from-file=rbac-conditional-policies.yaml
    Copy to Clipboard Toggle word wrap
  4. Developer Hub Backstage カスタムリソースを更新して、rbac-policies config map からファイルを Developer Hub ファイルシステムにマウントします。

    Backstage カスタムリソースフラグメント

    apiVersion: rhdh.redhat.com/v1alpha1
    kind: Backstage
    spec:
      application:
        extraFiles:
          mountPath: /opt/app-root/src
          configMaps:
            - name: rbac-policies
    Copy to Clipboard Toggle word wrap

  5. 外部ファイル rbac-policies.csv および rbac-conditional-policies.yaml を使用するように、Developer Hub の app-config.yaml 設定ファイルを更新します。

    app-config.yml フラグメント

    permission:
      enabled: true
      rbac:
        conditionalPoliciesFile: /opt/app-root/src/rbac-conditional-policies.yaml
        policies-csv-file: /opt/app-root/src/rbac-policies.csv
        policyFileReload: true
    Copy to Clipboard Toggle word wrap

5.2. Helm を使用して外部ファイルで認可の定義

Red Hat Developer Hub のメンテナンスを自動化するには、Developer Hub を起動する前に、外部ファイルで権限とロールを定義します。ファイルを準備し、OpenShift Container Platform プロジェクトにアップロードして、外部ファイルを使用するように Developer Hub を設定する必要があります。

手順

  1. 次の形式を使用して、CSV ファイル rbac-policies.csv でポリシーを定義します。

    1. ロール権限を定義します。

      p, <role_entity_reference>, <permission>, <action>, <allow_or_deny>
      Copy to Clipboard Toggle word wrap
      <role_entity_reference>
      ロールエンティティー参照 (例: role:default/guest)
      <permission>

      権限 (例: bulk.importcatalog.entity.readcatalog.entity.refresh)、または権限リソースタイプ (例: bulk-importcatalog-entity)

      権限ポリシーリファレンス を参照してください。

      <action>
      アクションタイプ (例: usereadcreateupdatedelete)。
      <allow_or_deny>
      許可されるアクセス: (allow または deny)。
    2. グループまたはユーザーにロールを割り当てます。

      g, <group_or_user>, <role_entity_reference>
      Copy to Clipboard Toggle word wrap
      <group_or_user>

      グループ (例: user:default/mygroup)、またはユーザー (例: user:default/myuser)。

      サンプル rbac-policies.csv

      p, role:default/guests, catalog-entity, read, allow
      p, role:default/guests, catalog.entity.create, create, allow
      g, user:default/my-user, role:default/guests
      g, group:default/my-group, role:default/guests
      Copy to Clipboard Toggle word wrap

  2. 次の形式を使用して、YAML ファイル rbac-conditional-policies.yaml で条件付きポリシーを定義します。

    result: CONDITIONAL
    roleEntityRef: <role_entity_reference>
    pluginId: <plugin_id>
    permissionMapping:
      - read
      - update
      - delete
    conditions: <conditions>
    Copy to Clipboard Toggle word wrap

    条件付きポリシーリファレンス を参照してください。

  3. rbac-policies.csv ファイルと rbac-conditional-policies.yaml ファイルを、Developer Hub を含む OpenShift Container Platform プロジェクトの rbac-policies config map にアップロードします。

    $ oc create configmap rbac-policies \
         --from-file=rbac-policies.csv \
         --from-file=rbac-conditional-policies.yaml
    Copy to Clipboard Toggle word wrap
  4. Developer Hub Backstage Helm チャートを更新して、rbac-policies config map からファイルを Developer Hub ファイルシステムにマウントします。

    1. Developer Hub Helm チャートで、Root Schema → Backstage chart schema → Backstage parameters → Backstage container additional volume mounts に移動します。
    2. Add Backstage container additional volume mounts を選択し、次の値を追加します。

      mountPath
      /opt/app-root/src/rbac
      名前
      rbac-policies
    3. RBAC ポリシーを、Developer Hub Helm チャートの Backstage container additional volumes に追加します。

      name
      rbac-policies
      configMap
      defaultMode
      420
      name
      rbac-policies
  5. 外部ファイル rbac-policies.csv および rbac-conditional-policies.yaml を使用するように、Developer Hub の app-config.yaml 設定ファイルを更新します。

    app-config.yml フラグメント

    permission:
      enabled: true
      rbac:
        conditionalPoliciesFile: /opt/app-root/src/rbac-conditional-policies.yaml
        policies-csv-file: /opt/app-root/src/rbac-policies.csv
        policyFileReload: true
    Copy to Clipboard Toggle word wrap

第6章 RBAC UI を使用したゲストアクセスの設定

ロールベースのアクセス制御 (RBAC) フロントエンドプラグインでゲストアクセスを使用すると、認証プロバイダーの設定および構成の必要がなく、ユーザーがロールとポリシーの作成をテストできるようになります。

注記

ゲストアクセスは実稼働環境では推奨されません。

6.1. RBAC バックエンドプラグインの設定

app-config.yaml ファイルを更新してパーミッションフレームワークを有効にして、RBAC バックエンドプラグインを設定できます。

前提条件

  • Developer Hub に @janus-idp/backstage-plugin-rbac プラグインをインストールした。詳細は、動的プラグインの設定 を参照してください。

手順

  • 次のように app-config.yaml ファイルを更新して、パーミッションフレームワークを有効にします。
permission
  enabled: true
  rbac:
    admin:
      users:
        - name: user:default/guest
    pluginsWithPermission:
      - catalog
      - permission
      - scaffolder
Copy to Clipboard Toggle word wrap
注記

app-config.yaml セクションの pluginsWithPermission セクションには、デフォルトで 3 つのプラグインのみが含まれます。必要に応じて、パーミッションを組み込む追加のプラグインも含めるように、セクションも更新します。

6.2. ゲスト認証プロバイダーの設定

ゲスト認証を有効にし、RBAC フロントエンドプラグインと一緒に使用できます。

前提条件

  • Developer Hub に @janus-idp/backstage-plugin-rbac プラグインをインストールした。詳細は、動的プラグインの設定 を参照してください。

手順

  • app-config.yaml ファイルで、次の例に示すように、ユーザーエンティティー参照を追加して、dangerouslyAllowOutsideDevelopment オプションを解決して有効にします。
auth:
  environment: development
  providers:
    guest:
      userEntityRef: user:default/guest
      dangerouslyAllowOutsideDevelopment: true
Copy to Clipboard Toggle word wrap
注記

user:default/guest をユーザーエンティティー参照として使用し、app-config.yaml ファイルの permission.rbac.admin.users セクションで追加されたユーザーを照合できます。

第7章 権限ポリシーリファレンス

Red Hat Developer Hub の権限ポリシーは、リソースまたは機能へのアクセスを管理する一連のルールです。これらのポリシーは、ユーザーのロールに基づいてユーザーに付与される認可レベルを示します。権限ポリシーは、特定の環境内でセキュリティーと機密性を維持するために実装されます。

Developer Hub では、次の種類の権限を定義できます。

  • リソースタイプ
  • 基本

2 種類の権限の違いは、定義されたリソースタイプが権限に含まれているかどうかによって決まります。

リソースタイプ権限は、次の例に示すように、関連するリソースタイプまたは権限名のいずれかを使用して定義できます。

リソースタイプ権限の定義の例

p, role:default/myrole, catalog.entity.read, read, allow
g, user:default/myuser, role:default/myrole

p, role:default/another-role, catalog-entity, read, allow
g, user:default/another-user, role:default/another-role
Copy to Clipboard Toggle word wrap

基本的な権限は、次の例に示すように、権限名を使用して Developer Hub で定義できます。

基本的な権限の定義の例

p, role:default/myrole, catalog.entity.create, create, allow
g, user:default/myuser, role:default/myrole
Copy to Clipboard Toggle word wrap

Developer Hub は次の権限ポリシーをサポートしています。

Catalog 権限
.Catalog 権限
Expand
名前リソースタイプポリシー説明

catalog.entity.read

catalog-entity

read

ユーザーまたはロールがカタログから読み取ることを許可する

catalog.entity.create

 

create

ユーザーまたはロールがカタログエンティティーを作成することを許可する。これには、カタログ内の既存のコンポーネントの登録も含まれます。

catalog.entity.refresh

catalog-entity

update

ユーザーまたはロールがカタログから単一または複数のエンティティーを更新することを許可する。

catalog.entity.delete

catalog-entity

delete

ユーザーまたはロールがカタログから単一または複数のエンティティーを削除することを許可する。

catalog.location.read

 

read

ユーザーまたはロールがカタログから単一または複数の場所を読み取ることを許可する

catalog.location.create

 

create

ユーザーまたはロールがカタログ内に場所を作成することを許可する

catalog.location.delete

 

delete

ユーザーまたはロールがカタログから場所を削除することを許可する

一括インポートパーミッション
.一括インポートパーミッション
Expand
名前リソースタイプポリシー説明

bulk.import

bulk-import

use

すべての GitHub インテグレーションでアクセス可能なすべてのリポジトリーと組織のリスト表示や、インポート要求の管理など、一括インポートエンドポイントにユーザーがアクセスできるようにする

Scaffolder 権限
.Scaffolder 権限
Expand
名前リソースタイプポリシー説明

scaffolder.action.execute

scaffolder-action

use

テンプレートからのアクションの実行を許可する

scaffolder.template.parameter.read

scaffolder-template

read

ユーザーまたはロールがテンプレートから 1 つまたは複数のパラメーターを読み取ることを許可する

scaffolder.template.step.read

scaffolder-template

read

ユーザーまたはロールがテンプレートから 1 つまたは複数のステップを読み取ることを許可する

scaffolder.task.create

 

create

ユーザーまたはロールが新しいスキャフォールダータスクを作成するソフトウェアテンプレートをトリガーすることを許可する

scaffolder.task.cancel

 

use

ユーザーまたはロールが現在実行中のスキャフォールダータスクをキャンセルすることを許可する

scaffolder.task.read

 

read

ユーザーまたはロールがすべてのスキャフォールダータスクとそれに関連するイベントおよびログを読み取ることを許可する

RBAC 権限
.RBAC 権限
Expand
名前リソースタイプポリシー説明

policy.entity.read

policy-entity

read

ユーザーまたはロールが権限ポリシーとロールを読み取ることを許可する

policy.entity.create

policy-entity

create

ユーザーまたはロールが単一または複数の権限ポリシーとロールを作成することを許可する

policy.entity.update

policy-entity

update

ユーザーまたはロールが単一または複数の権限ポリシーとロールを更新することを許可する

policy.entity.delete

policy-entity

delete

ユーザーまたはロールが単一または複数の権限ポリシーとロールを削除することを許可する

Kubernetes 権限
.Kubernetes 権限
Expand
名前リソースタイプポリシー説明

kubernetes.proxy

 

use

ユーザーまたはロールがプロキシーエンドポイントにアクセスすることを許可する

OCM 権限
Expand
名前リソースタイプポリシー説明

ocm.entity.read

 

read

ユーザーまたはロールが OCM プラグインから読み取ることを許可する

ocm.cluster.read

 

read

ユーザーまたはロールが OCM プラグイン内のクラスター情報を読み取ることを許可する

トポロジー権限
.Topology 権限
Expand
名前リソースタイプポリシー説明

topology.view.read

 

read

ユーザーまたはロールがトポロジープラグインを表示することを許可する

kubernetes.proxy

 

use

ユーザーまたはロールがプロキシーエンドポイントにアクセスすることを許可し、RHDH 内の Pod ログとイベントを読み取ることを許可する

第8章 Red Hat Developer Hub の条件付きポリシー

Red Hat Developer Hub の権限フレームワークでは、RBAC バックエンドプラグイン (backstage-plugin-rbac-backend) によってサポートされる条件を使用できます。条件は、RBAC バックエンドプラグインによって提供される Developer Hub リソースのコンテンツフィルターとして機能します。

RBAC バックエンド API は、ロールに割り当てられた条件をデータベースに保存します。ユーザーがフロントエンドリソースへのアクセスを要求すると、RBAC バックエンド API は、対応する条件を検索し、プラグイン ID を使用して適切なプラグインに条件を委譲します。異なる条件を持つ複数のロールにユーザーが割り当てられていると、RBAC バックエンドは anyOf 基準を使用して条件をマージします。

条件基準

Developer Hub の条件は、ルールとパラメーターを含む単純な条件です。ただし、条件には、条件基準によって結合されたパラメーターまたはパラメーターの配列を含めることもできます。サポートされている条件基準は次のとおりです。

  • allOf: 結合された条件が満たされるためには、配列内のすべての条件が true でなければならない。
  • anyOf: 結合された条件が満たされるためには、配列内の条件の少なくとも 1 つが true でなければならない。
  • not: 結合された条件が満たされるためには、その中の条件が true であってはならない。
条件オブジェクト

条件でサポートされるパラメーターは、プラグインによって指定されます。RBAC API エンドポイントから条件オブジェクトスキーマにアクセスすると、RBAC バックエンドプラグイン API で使用される JSON 条件オブジェクトの構築方法を確認できます。

条件オブジェクトには次のパラメーターがあります。

Expand
表8.1 条件オブジェクトのパラメーター
パラメーター説明

result

String

常に CONDITIONAL の値を持つ

roleEntityRef

String

RBAC ロールへの文字列エンティティー参照 (role:default/dev など)

pluginId

String

対応するプラグイン ID (catalog など)

permissionMapping

String array

権限アクションの配列 (['read', 'update', 'delete'] など)

resourceType

String

プラグインによって提供されるリソースタイプ (catalog-entity など)

conditions

JSON

条件によって結合されたパラメーターまたは配列パラメーターを含む条件 JSON

条件付きポリシーエイリアス

RBAC バックエンドプラグイン (backstage-plugin-rbac-backend) は、条件付きポリシールールパラメーターでのエイリアスの使用をサポートしています。条件付きポリシーエイリアスは、ポリシー評価中に対応する値に動的に置き換えられます。条件付きポリシー内の各エイリアスには、その特殊な機能を示す $ 記号が先頭に付きます。

サポートされている条件付きエイリアスは次のとおりです。

  • $currentUser: このエイリアスは、リソースへのアクセスを要求するユーザーのユーザーエンティティー参照に置き換えられます。たとえば、デフォルトの namespace のユーザー Tom がアクセスを要求すると、$currentUseruser:default/tom になります。

$currentUser エイリアスを使用した条件付きポリシーオブジェクトの例

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/developer",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["delete"],
  "conditions": {
    "rule": "IS_ENTITY_OWNER",
    "resourceType": "catalog-entity",
    "params": {
      "claims": ["$currentUser"]
    }
  }
}
Copy to Clipboard Toggle word wrap

  • $ownerRefs: このエイリアスは所有者参照に置き換えられます。通常は、ユーザーエンティティー参照とユーザーの親グループエンティティー参照を含む配列として表されます。たとえば、team-a のユーザー Tom の場合、$ownerRefs['user:default/tom', 'group:default/team-a'] になります。

$ownerRefs エイリアスを使用した条件付きポリシーオブジェクトの例

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/developer",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["delete"],
  "conditions": {
    "rule": "IS_ENTITY_OWNER",
    "resourceType": "catalog-entity",
    "params": {
      "claims": ["$ownerRefs"]
    }
  }
}
Copy to Clipboard Toggle word wrap

8.1. 条件付きポリシーリファレンス

Red Hat Developer Hub では、条件付きポリシー用の API エンドポイントにアクセスできます。たとえば、条件付きポリシーを定義するのに役立つ利用可能な条件ルールを取得するために、GET [api/plugins/condition-rules] エンドポイントにアクセスできます。

api/plugins/condition-rules は、条件パラメータースキーマを返します。次に例を示します。

[
   {
      "pluginId": "catalog",
      "rules": [
         {
            "name": "HAS_ANNOTATION",
            "description": "Allow entities with the specified annotation",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "annotation": {
                     "type": "string",
                     "description": "Name of the annotation to match on"
                  },
                  "value": {
                     "type": "string",
                     "description": "Value of the annotation to match on"
                  }
               },
               "required": [
                  "annotation"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "HAS_LABEL",
            "description": "Allow entities with the specified label",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "label": {
                     "type": "string",
                     "description": "Name of the label to match on"
                  }
               },
               "required": [
                  "label"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "HAS_METADATA",
            "description": "Allow entities with the specified metadata subfield",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "key": {
                     "type": "string",
                     "description": "Property within the entities metadata to match on"
                  },
                  "value": {
                     "type": "string",
                     "description": "Value of the given property to match on"
                  }
               },
               "required": [
                  "key"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "HAS_SPEC",
            "description": "Allow entities with the specified spec subfield",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "key": {
                     "type": "string",
                     "description": "Property within the entities spec to match on"
                  },
                  "value": {
                     "type": "string",
                     "description": "Value of the given property to match on"
                  }
               },
               "required": [
                  "key"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "IS_ENTITY_KIND",
            "description": "Allow entities matching a specified kind",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "kinds": {
                     "type": "array",
                     "items": {
                        "type": "string"
                     },
                     "description": "List of kinds to match at least one of"
                  }
               },
               "required": [
                  "kinds"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         },
         {
            "name": "IS_ENTITY_OWNER",
            "description": "Allow entities owned by a specified claim",
            "resourceType": "catalog-entity",
            "paramsSchema": {
               "type": "object",
               "properties": {
                  "claims": {
                     "type": "array",
                     "items": {
                        "type": "string"
                     },
                     "description": "List of claims to match at least one on within ownedBy"
                  }
               },
               "required": [
                  "claims"
               ],
               "additionalProperties": false,
               "$schema": "http://json-schema.org/draft-07/schema#"
            }
         }
      ]
   }
   ... <another plugin condition parameter schemas>
]
Copy to Clipboard Toggle word wrap

RBAC バックエンド API は、上記の条件スキーマに基づいて JSON 条件オブジェクトを構築します。

8.1.1. 条件付きポリシーの例

Red Hat Developer Hub では、基準のある、または基準のない条件付きポリシーを定義できます。次の例を使用して、ユースケースに応じて条件を定義できます。

基準のない条件

ユーザーが所有者グループに属する場合にのみカタログを表示する、基準のない条件を考えてみます。この条件を追加するには、カタログプラグインスキーマ IS_ENTITY_OWNER を次のように使用します。

基準のない条件の例

{
  "rule": "IS_ENTITY_OWNER",
  "resourceType": "catalog-entity",
  "params": {
    "claims": ["group:default/team-a"]
  }
}
Copy to Clipboard Toggle word wrap

上記の例では、条件パラメーターとして、ユーザーまたはグループエンティティー参照のリストを含む Claims だけが使用されています。

次のように追加のパラメーターを追加することで、上記の例の条件を RBAC REST API に適用できます。

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/test",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["read"],
  "conditions": {
    "rule": "IS_ENTITY_OWNER",
    "resourceType": "catalog-entity",
    "params": {
      "claims": ["group:default/team-a"]
    }
  }
}
Copy to Clipboard Toggle word wrap
基準のある条件

ユーザーが所有者グループに属する場合にのみカタログを表示するか、すべてのカタログユーザーグループのリストを表示する、基準のある条件を考えてみます。

基準を追加するには、次のように、条件に IS_ENTITY_KIND として別のルールを追加します。

基準のある条件の例

{
  "anyOf": [
    {
      "rule": "IS_ENTITY_OWNER",
      "resourceType": "catalog-entity",
      "params": {
        "claims": ["group:default/team-a"]
      }
    },
    {
      "rule": "IS_ENTITY_KIND",
      "resourceType": "catalog-entity",
      "params": {
        "kinds": ["Group"]
      }
    }
  ]
}
Copy to Clipboard Toggle word wrap

注記

作成中に条件を並行して実行することは、サポートされていません。したがって、利用可能な基準に基づいて、ネストされた条件付きポリシーを定義することを検討してください。

ネストされた条件の例

{
  "anyOf": [
    {
      "rule": "IS_ENTITY_OWNER",
      "resourceType": "catalog-entity",
      "params": {
        "claims": ["group:default/team-a"]
      }
    },
    {
      "rule": "IS_ENTITY_KIND",
      "resourceType": "catalog-entity",
      "params": {
        "kinds": ["Group"]
      }
    }
  ],
  "not": {
    "rule": "IS_ENTITY_KIND",
    "resourceType": "catalog-entity",
    "params": { "kinds": ["Api"] }
  }
}
Copy to Clipboard Toggle word wrap

次のように追加のパラメーターを追加することで、上記の例の条件を RBAC REST API に適用できます。

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/test",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["read"],
  "conditions": {
    "anyOf": [
      {
        "rule": "IS_ENTITY_OWNER",
        "resourceType": "catalog-entity",
        "params": {
          "claims": ["group:default/team-a"]
        }
      },
      {
        "rule": "IS_ENTITY_KIND",
        "resourceType": "catalog-entity",
        "params": {
          "kinds": ["Group"]
        }
      }
    ]
  }
}
Copy to Clipboard Toggle word wrap

以下の例は、Developer Hub プラグインで使用できます。以下の例は、条件付きポリシーを定義する方法を決定するのに役立ちます。

Keycloak プラグイン用に定義した条件付きポリシー

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/developer",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["update", "delete"],
  "conditions": {
    "not": {
      "rule": "HAS_ANNOTATION",
      "resourceType": "catalog-entity",
      "params": { "annotation": "keycloak.org/realm", "value": "<YOUR_REALM>" }
    }
  }
}
Copy to Clipboard Toggle word wrap

上記の Keycloak プラグインの例では、role:default/developer のユーザーが、Keycloak プラグインからカタログに取り込まれたユーザーを更新または削除できないようにしています。

注記

上記の例では、アノテーション keycloak.org/realm<YOUR_REALM> の値が必要です。

Quay プラグイン用に定義した条件付きポリシー

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/developer",
  "pluginId": "scaffolder",
  "resourceType": "scaffolder-action",
  "permissionMapping": ["use"],
  "conditions": {
    "not": {
      "rule": "HAS_ACTION_ID",
      "resourceType": "scaffolder-action",
      "params": { "actionId": "quay:create-repository" }
    }
  }
}
Copy to Clipboard Toggle word wrap

上記の Quay プラグインの例では、ロール role:default/developer が Quay の scaffolder アクションを使用できないようにしています。permissionMappinguse が含まれていることに注意してください。これは、scaffolder-action リソースタイプ権限に権限ポリシーがないことを示しています。

Red Hat Developer Hub の権限の詳細は、7章権限ポリシーリファレンス を参照してください。

第9章 Red Hat Developer Hub のユーザー統計

Red Hat Developer Hub では、licensed-users-info-backend プラグインが、Web UI または REST API エンドポイントを使用してログインしたユーザーに関する統計情報を提供します。

licensed-users-info-backend プラグインを使用すると、管理者は Developer Hub 上のアクティブユーザーの数を監視できます。この機能を使用すると、組織は実際の使用状況と購入したライセンスの数を比較できます。さらに、透明性と正確なライセンスを実現するために、ユーザーメトリクスを Red Hat と共有することもできます。

デフォルトでは、licensed-users-info-backend プラグインが有効になっています。このプラグインにより、Administration → RBAC タブの下部にある Download User List リンクが有効になります。

9.1. Red Hat Developer Hub でのアクティブユーザーリストのダウンロード

Developer Hub Web インターフェイスを使用して、ユーザーのリストを CSV 形式でダウンロードできます。

前提条件

  • RBAC プラグイン (@janus-idp/backstage-plugin-rbac および @janus-idp/backstage-plugin-rbac-backend) を Red Hat Developer Hub で有効にする必要があります。
  • 管理者ロールを割り当てる必要があります。

手順

  1. Red Hat Developer Hub で、Administration に移動し、RBAC タブを選択します。
  2. RBAC ページの下部にある Download User List をクリックします。
  3. オプション: Save as フィールドでファイル名を変更し、Save をクリックします。
  4. ダウンロードしたユーザーリストにアクセスするには、ローカルマシンの Downloads フォルダーに移動し、CSV ファイルを開きます。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る