Red Hat Developer Hub での認可


Red Hat Developer Hub 1.6

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

Red Hat Customer Content Services

概要

Red Hat Developer Hub (RHDH) 管理者は、ロールベースアクセス制御 (RBAC) を使用して他のユーザーの認可を管理できます。

はじめに

管理者は、ユーザーにアクションの実行を許可し、Developer Hub でユーザーが実行できる操作を定義できます。

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

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

管理者は、次の手順を実行して、Developer Hub で認可を定義できます。

  1. 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/backstage-community-plugin-rbac プラグインを有効にするには、dynamic-plugins.yaml を次の内容で編集します。

    dynamic-plugins.yaml フラグメント

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

    Red Hat Developer Hub でのプラグインのインストールと表示 を参照してください。

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

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

    app-config.yaml フラグメント

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

  3. インストールされたプラグインによって提供される利用可能なパーミッションを Developer Hub Web UI に表示するには、対応するプラグイン ID を カスタムの Developer Hub 設定ファイル app-config.yaml に追加します。

    RBAC UI で利用可能なパーミッションを表示するには、app-config-rhdh などのカスタム Developer Hub ConfigMap を編集し、次のコードを app-config.yaml コンテンツに追加します。

    app-config.yaml フラグメント

    permission:
      enabled: true
      rbac:
        admin:
          users:
            - name: user:default/<your_policy_administrator_name>
        pluginsWithPermission:
          - catalog
          - scaffolder
          - permission
    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

必須

namespace

エンティティーの namespace

String

必須

name

エンティティーの名前

String

必須

memberReferences

関連するグループの情報

String

必須

応答の例

204
Copy to Clipboard Toggle word wrap

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

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

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

kind

エンティティーの種類

String

必須

namespace

エンティティーの namespace

String

必須

name

エンティティーの名前

String

必須

応答の例

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

必須

namespace

エンティティーの namespace

String

必須

name

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

String

必須

応答例 (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

必須

permission

特定のプラグイン、リソースタイプ、または名前からのパーミッション

String

必須

policy

パーミッションのポリシーアクション (createreadupdatedeleteuse など)

String

必須

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

必須

policy

パーミッションのポリシーアクション (createreadupdatedeleteuse など)

String

必須

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

必須

namespace

エンティティーの namespace

String

必須

name

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

String

必須

permission

特定のプラグイン、リソースタイプ、または名前からのパーミッション

String

必須

policy

パーミッションのポリシーアクション (createreadupdatedeleteuse など)

String

必須

effect

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

String

必須

応答の例

204 No Content
Copy to Clipboard Toggle word wrap

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

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

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

kind

エンティティーの種類

String

必須

namespace

エンティティーの namespace

String

必須

name

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

String

必須

応答の例

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

必須

roleEntityRef

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

String

必須

pluginId

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

String

必須

permissionMapping

パーミッションアクションの配列 (['read', 'update', 'delete'] など)

String array

必須

resourceType

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

String

必須

conditions

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

JSON

必須

name

ロールの名前

String

必須

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

必須

roleEntityRef

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

String

必須

pluginId

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

String

必須

permissionMapping

パーミッションアクションの配列 (['read', 'update', 'delete'] など)

String array

必須

resourceType

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

String

必須

conditions

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

JSON

必須

name

ロールの名前

String

必須

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. Backstage カスタムリソース を更新して、rbac-policies config map からのファイルを Developer Hub ファイルシステムにマウントします。

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

    apiVersion: rhdh.redhat.com/v1alpha3
    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.yaml ファイルのフラグメント

    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.yaml ファイルのフラグメント

    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 プラグインがインストールされている。詳細は、{plugins-configure-book-title} を参照してください。

手順

  • 次のように 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 プラグインがインストールされている。詳細は、{plugins-configure-book-title} を参照してください。

手順

  • 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 でのロールベースアクセス制御 (RBAC) アクセスの委譲

エンタープライズのお客様には、ロールベースアクセス制御 (RBAC) の管理権限を組織内の他の担当者に委譲する機能が必要です。このシナリオでは、管理者は、チームリードなど特定のユーザーに対して RBAC プラグインへのアクセス権を付与できます。各チームリードは、割り当てられた範囲外のパーミッションを表示したり制御したりすることなく、それぞれのチームまたは部門内のユーザーのみのパーミッションを管理できます。このアプローチにより、チームリードは自分のチームのアクセスやパーミッションを独立して管理できる一方で、管理者は全体を統括することができます。

Red Hat Developer Hub では、RBAC プラグインのマルチテナント機能、具体的には IS_OWNER 条件ルールを使用して RBAC アクセスを委譲できます。優先するワークフローと自動化のレベルに応じて、Web UI または RBAC バックエンド API のいずれかを使用できます。

  • Web UI を使用して、直感的なインターフェイスを通じてロールの作成、ユーザーまたはグループの割り当て、パーミッションの定義、所有権条件の適用を行います。
  • より柔軟で自動化可能なアプローチには API を使用します。この場合、認証された curl リクエストを使用してロール、パーミッション、所有権の条件をプログラムで管理できます。

いずれかの方法で RBAC アクセスを委譲すると、次の結果が期待できます。

  • チームリードは、チームの RBAC 設定を個別に管理できます。
  • 他のユーザーまたはチームのパーミッションの表示は制限されます。
  • 管理者は、チーム固有のアクセスを委譲しながら、全体的な制御を維持します。

前提条件

  • RHDH インスタンスが、RBAC プラグインがインストールおよび設定された状態で実行されている。
  • RHDH への管理者アクセス権がある。

7.1. Web UI を使用して Red Hat Developer Hub で RBAC アクセスを委譲する

Web UI を使用して、Red Hat Developer Hub で RBAC アクセスを委譲できます。

手順

  1. 管理者の認証情報を使用して RHDH インスタンスにログインします。
  2. Administration → RBAC に移動します。
  3. Create Role をクリックし、role:default/team_lead など、チームリードの新しいロールを定義します。
  4. Members セクションで、user:default/team_lead などのユーザーまたはグループを追加します。
  5. 以下のように、チームリードに必要なパーミッションを付与します。

    • policy.entity.create: ポリシーの作成を許可する。
    • catalog-entity:read: カタログへのアクセスを許可する。
  6. アクセスを制限するには、次のように 条件 を適用します。

    • IS_OWNER ルールを使用して、チームリードが自分が所有するリソースのみを管理できるようにします。
  7. Save をクリックして、ロールを作成し、変更を適用します。

検証

  • チームリードとしてログインします。
  • 以下を確認します。

    • RBAC UI にアクセスできます。
    • チームに関連するユーザーまたはロールのみが表示されます。
    • ロールやパーミッションの範囲外へのアクセスは許可されません。

7.2. API を使用して Red Hat Developer Hub で RBAC アクセスを委譲する

RBAC バックエンド API を使用して、Red Hat Developer Hub で RBAC アクセスを委譲できます。

前提条件

  • curl または別のツールを使用して API にアクセスできます。

手順

  1. RBAC バックエンド API を使用して、チームリード専用の新しいロールを作成します。

    RBAC バックエンド API を使用してチームリードの新しいロールを作成する例

    curl -X POST 'http://localhost:7007/api/permission/roles' \
    --header "Authorization: Bearer $ADMIN_TOKEN" \
    --header "Content-Type: application/json" \
    --data '{
      "memberReferences": ["user:default/team_lead"],
      "name": "role:default/team_lead",
      "metadata": {
        "description": "This is an example team lead role"
      }
    }'
    Copy to Clipboard Toggle word wrap

  2. 次の API リクエストを使用して、チームリードがカタログエンティティーを読み取り、RBAC プラグインパーミッションを作成できるようにします。

    チームリードロールに、RBAC ポリシーの作成およびカタログエンティティーの読み取りを許可する例

    curl -X POST 'http://localhost:7007/api/permission/policies' \
    --header "Authorization: Bearer $ADMIN_TOKEN" \
    --header "Content-Type: application/json" \
    --data '[
      {
        "entityReference": "role:default/team_lead",
        "permission": "policy.entity.create",
        "policy": "create",
        "effect": "allow"
      },
      {
        "entityReference": "role:default/team_lead",
        "permission": "catalog-entity",
        "policy": "read",
        "effect": "allow"
      }
    ]'
    Copy to Clipboard Toggle word wrap

  3. チームリードが自分の所有するもののみを管理できるようにするには、次のように IS_OWNER 条件ルールを使用します。

    チームリードのロールに対して IS_OWNER ルールを使用し、条件付きアクセスポリシーを適用する curl の例

    curl -X POST 'http://localhost:7007/api/permission/roles/conditions' \
    --header "Authorization: Bearer $ADMIN_TOKEN" \
    --header "Content-Type: application/json" \
    --data '{
     "result": "CONDITIONAL",
     "pluginId": "permission",
     "resourceType": "policy-entity",
     "conditions": {
       "rule": "IS_OWNER",
       "resourceType": "policy-entity",
       "params": {
         "owners": [
           "user:default/team_lead"
         ]
       }
     },
     "roleEntityRef": "role:default/team_lead",
     "permissionMapping": [
       "read",
       "update",
       "delete"
     ]
    }'
    Copy to Clipboard Toggle word wrap

    前の条件付きポリシーの例では、表示と制御が所有されているロールとポリシーのみに制限されています。

  4. チームリードとして RHDH にログインし、次のことを確認します。

    1. 次のリクエストを使用して、ロールが表示されないことを確認します。

      チームリードに表示されるロールを取得するための curl の例

      curl -X GET 'http://localhost:7007/api/permission/roles' \
      --header "Authorization: Bearer $TEAM_LEAD_TOKEN"
      Copy to Clipboard Toggle word wrap

    2. 次のリクエストを使用して、チームに新しいロールを作成します。

      チームリードが所有権を割り当てた新しいロールをチームに作成する curl の例

      curl -X POST 'http://localhost:7007/api/permission/roles' \
      --header "Authorization: Bearer $TEAM_LEAD_TOKEN" \
      --header "Content-Type: application/json" \
      --data '{
        "memberReferences": ["user:default/team_member"],
        "name": "role:default/team_a",
        "metadata": {
          "description": "This is an example team_a role",
          "owner": "user:default/team_lead"
        }
      }'
      Copy to Clipboard Toggle word wrap

      注記

      作成時に所有権を設定できますが、所有権はいつでも更新できます。

    3. 新しいロールにパーミッションポリシーを割り当てるには、次のリクエストを使用します。

      新しいロールにカタログエンティティーへの読み取りアクセスを許可する curl の例

      curl -X POST 'http://localhost:7007/api/permission/policies' \
      --header "Authorization: Bearer $ADMIN_TOKEN" \
      --header "Content-Type: application/json" \
      --data '[
        {
          "entityReference": "role:default/team_a",
          "permission": "catalog-entity",
          "policy": "read",
          "effect": "allow"
        }
      ]'
      Copy to Clipboard Toggle word wrap

    4. 次のリクエストを使用して、チームが所有するロールとポリシーのみが表示されることを確認します。

      チームリードに表示されるロールとパーミッションポリシーを取得するための curl の例

      curl -X GET 'http://localhost:7007/api/permission/roles' \
      --header "Authorization: Bearer $TEAM_LEAD_TOKEN"
      
      curl -X GET 'http://localhost:7007/api/permission/policies' \
      --header "Authorization: Bearer $TEAM_LEAD_TOKEN"
      Copy to Clipboard Toggle word wrap

検証

  • チームリードとしてログインし、以下を確認します。

    • RBAC UI にアクセスできます。
    • 割り当てられたユーザーまたはグループのみが表示されます。
    • スコープ外のチームに対するパーミッションは、表示も編集もできません。
  • 管理者としてログインし、完全な可視性と制御が保持されていることを確認します。

第8章 パーミッションポリシーリファレンス

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

Developer Hub では、次の種類のパーミッションを定義できます。

  • リソースタイプ
  • basic

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

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

scaffolder.template.management

 

use

ユーザーまたはロールが、フロントエンドテンプレート管理機能 (テンプレート、フォーム、およびカスタムフィールドの編集、プレビュー、および試用など) にアクセスすることを許可する

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

policy.entity.read

policy-entity

read

ユーザーまたはロールがパーミッションポリシーとロールを読み取ることを許可する

policy.entity.create

 

create

ユーザーまたはロールが単一または複数のパーミッションポリシーとロールを作成することを許可する

policy.entity.update

policy-entity

update

ユーザーまたはロールが単一または複数のパーミッションポリシーとロールを更新することを許可する

policy.entity.delete

policy-entity

delete

ユーザーまたはロールが単一または複数のパーミッションポリシーとロールを削除することを許可する

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

kubernetes.clusters.read

 

read

ユーザーが /clusters パスの下にある Kubernetes クラスターの詳細を読み取ることを許可する

kubernetes.resources.read

 

read

ユーザーが /services/:serviceId および /resources にある Kubernetes リソースに関する情報を読み取ることを許可する

kubernetes.proxy

 

use

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

OCM パーミッション
基本的な OCM パーミッションはクラスタービューへのアクセスのみを制限しますが、リソースビュー内の Kubernetes クラスターへのアクセスを妨げることはありません。より効果的なパーミッションを得るには、条件付きポリシーを適用して、kubernetes-cluster タイプのカタログエンティティーへのアクセスを制限することを検討してください。アクセス制限は、ロールに付与されたパーミッションのセットに依存します。たとえば、ロールに完全なパーミッション (readupdatedelete) がある場合は、permissionMapping フィールドにそのすべてのパーミッションを指定する必要があります。

permissionMapping 定義の例

result: CONDITIONAL
roleEntityRef: 'role:default/<YOUR_ROLE>'
pluginId: catalog
resourceType: catalog-entity
permissionMapping:
  - read
  - update
  - delete
conditions:
  not:
    rule: HAS_SPEC
    resourceType: catalog-entity
    params:
      key: type
      value: kubernetes-cluster
Copy to Clipboard Toggle word wrap

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

ocm.entity.read

 

read

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

ocm.cluster.read

 

read

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

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

kubernetes.clusters.read

 

read

ユーザーが /clusters パスの下にある Kubernetes クラスターの詳細を読み取ることを許可する

kubernetes.resources.read

 

read

ユーザーが /services/:serviceId および /resources にある Kubernetes リソースに関する情報を読み取ることを許可する

kubernetes.proxy

 

use

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

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

kubernetes.clusters.read

 

read

ユーザーが /clusters パスの下にある Kubernetes クラスターの詳細を読み取ることを許可する

kubernetes.resources.read

 

read

ユーザーが /services/:serviceId および /resources にある Kubernetes リソースに関する情報を読み取ることを許可する

kubernetes.proxy

 

use

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

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

argocd.view.read

 

read

ユーザーが ArgoCD プラグインから読み取ることを許可する

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

quay.view.read

 

read

ユーザーが Quay プラグインから読み取ることを許可する

第9章 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
表9.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

9.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 条件オブジェクトを構築します。

9.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 のパーミッションの詳細は、8章パーミッションポリシーリファレンス を参照してください。

第10章 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 リンクが有効になります。

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

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

前提条件

  • RBAC プラグイン (@backstage-community/plugin-rbac および @backstage-community/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
トップに戻る