5.3. ロールベースアクセス制御 (RBAC) REST API


Red Hat Developer Hub は、Developer Hub で権限とロールを管理するために使用できる RBAC REST API を提供します。この API は、Developer Hub の権限ポリシーとロールのメンテナンスを容易にし、自動化します。

RBAC REST API を使用すると、次のアクションを実行できます。

  • すべて、または特定の権限ポリシー、もしくはロールに関する情報を取得します。
  • 権限ポリシーまたはロールを作成、更新、削除します。
  • 静的プラグインに関する権限ポリシーの情報を取得します。

RBAC REST API には、次のコンポーネントが必要です。

認可

RBAC REST API には、許可されたユーザーロールに対するベアラートークンの認可が必要です。開発目的の場合、ブラウザーで Web コンソールにアクセスできます。ネットワーク要求リストでトークン要求を更新すると、応答 JSON 内でトークンが見つかります。

Authorization: Bearer $token

たとえば、Developer Hub の HomepageNetwork タブに移動し、query?term= ネットワーク呼び出しを検索できます。あるいは、Catalog ページに移動し、entity-facets を持つネットワーク呼び出しを選択してベアラートークンを取得することもできます。

HTTP メソッド

RBAC REST API は、API 要求で次の HTTP メソッドをサポートします。

  • GET: 指定したリソースのエンドポイントから指定した情報を取得する
  • POST: リソースを作成または更新する
  • PUT: リソースを更新する
  • DELETE: リソースを削除する

ベース URL

RBAC REST API 要求のベース URL は、http://SERVER:PORT/api/permission/policies (http://localhost:7007/api/permission/policies など) です。

エンドポイント

指定された kind、namespace、ユーザー名の RBAC REST API エンドポイント (例: /api/permission/policies/[kind]/[namespace]/[name]) は、対応するリソースにアクセスするためにベース URL に追加する URI です。

以下は、/api/permission/policies/[kind]/[namespace]/[name] エンドポイントの要求 URL の例です。

http://localhost:7007/api/permission/policies/user/default/johndoe

注記

少なくとも 1 つの権限が user:default/johndoe に割り当てられている場合、前述した要求 URL の例は、有効な認可トークンを含む GET 応答で送信されると結果を返します。ただし、権限がロールにのみ割り当てられている場合、例として挙げた要求 URL は出力を返しません。

要求データ

RBAC REST API の HTTP POST 要求では、データに JSON 要求の body が必要になる場合があります。

http://localhost:7007/api/permission/policiesPOST 要求 URL と JSON 要求の body データの例:

{
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "delete",
    "effect": "allow"
}

HTTP ステータスコード

RBAC REST API は、応答として返される次の HTTP ステータスコードをサポートしています。

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

5.3.1. REST クライアントまたは curl ユーティリティーを使用して RBAC REST API で要求を送信する

RBAC REST API を使用すると、ユーザーインターフェイスを使用せずに、Developer Hub の権限ポリシーおよびロールと対話できます。RBAC REST API 要求は、任意の REST クライアントまたは curl ユーティリティーを使用して送信できます。

前提条件

手順

  1. 要求の送信先となる API エンドポイント (例: POST/api/permission/policies) を特定します。ユースケースに合わせて、要求の詳細を調整します。

    REST クライアントの場合:

    • Authorization: Web コンソールから生成されたトークンを入力します。
    • HTTP method: POST に設定します。
    • URL: RBAC REST API のベース URL とエンドポイント (例: http://localhost:7007/api/permission/policies) を入力します。

    curl ユーティリティーの場合:

    • -X: POST に設定します。
    • -H: 以下のヘッダーを設定します。

      Content-type: application/json

      Authorization: Bearer $token

      $token は、ブラウザーの Web コンソールから要求されたトークンです。

    • URL: 次の RBAC REST API ベースの URL エンドポイント (例: http://localhost:7007/api/permission/policies) を入力します。
    • -d: 要求の JSON bodyを追加します。

    要求の例:

    curl -X POST "http://localhost:7007/api/permission/policies" -d '{"entityReference":"role:default/test", "permission": "catalog-entity", "policy": "read", "effect":"allow"}' -H "Content-Type: application/json" -H "Authorization: Bearer $token" -v

  2. 要求を実行し、応答を確認します。

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

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

5.3.2.1. 権限ポリシー

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

[GET] /api/permission/policies

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

応答例 (JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
  },
  {
    "entityReference": "role:default/test",
    "permission": "catalog.entity.create",
    "policy": "use",
    "effect": "allow"
  },
]

[GET] /api/permission/policies/{kind}/{namespace}/{name}

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

表5.1 要求パラメーター
名前説明タイプ要件

kind

エンティティーの種類

String

必須

namespace

エンティティーの名前空間

String

必須

name

エンティティーに関連するユーザー名

String

必須

応答例 (JSON)

[
  {
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
  },
  {
    "entityReference": "role:default/test",
    "permission": "catalog.entity.create",
    "policy": "use",
    "effect": "allow"
  }
]

[POST] /api/permission/policies

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

表5.2 要求パラメーター
名前説明タイプ要件

entityReference

名前空間と名前を含むエンティティーの参照値

String

必須

permission

権限の種類

String

必須

policy

権限の読み取りまたは書き込みポリシー

String

必須

effect

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

String

必須

要求 の body の例 (JSON)

{
    "entityReference": "role:default/test",
    "permission": "catalog-entity",
    "policy": "read",
    "effect": "allow"
}

応答の例

201 Created

[PUT] /api/permission/policies/{kind}/{namespace}/{name}

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

要求パラメーター

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

名前説明タイプ要件

permission

権限の種類

String

必須

policy

権限の読み取りまたは書き込みポリシー

String

必須

effect

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

String

必須

要求 の body の例 (JSON)

{
    "oldPolicy": {
        "permission": "catalog-entity",
        "policy": "read",
        "effect": "deny"
    },
    "newPolicy": {
        "permission": "policy-entity",
        "policy": "read",
        "effect": "allow"
    }
}

応答の例

200

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

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

表5.3 要求パラメーター
名前説明タイプ要件

kind

エンティティーの種類

String

必須

namespace

エンティティーの名前空間

String

必須

name

エンティティーに関連するユーザー名

String

必須

permission

権限の種類

String

必須

policy

権限の読み取りまたは書き込みポリシー

String

必須

effect

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

String

必須

応答の例

204 No Content

[GET] /api/permission/plugins/policies

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

応答例 (JSON)

[
  {
    "pluginId": "catalog",
      "policies": [
        {
          "permission": "catalog-entity",
          "policy": "read"
        },
        {
          "permission": "catalog.entity.create",
          "policy": "create"
        },
        {
          "permission": "catalog-entity",
          "policy": "delete"
        },
        {
          "permission": "catalog-entity",
          "policy": "update"
        },
        {
          "permission": "catalog.location.read",
          "policy": "read"
        },
        {
          "permission": "catalog.location.create",
          "policy": "create"
        },
        {
          "permission": "catalog.location.delete",
          "policy": "delete"
        }
      ]
    },
  ...
]

5.3.2.2. ロール

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

[GET] /api/permission/roles

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

応答例 (JSON)

[
  {
    "memberReferences": ["user:default/pataknight"],
    "name": "role:default/guests"
  },
  {
    "memberReferences": [
      "group:default/janus-authors",
      "user:default/matt"
    ],
    "name": "role:default/rbac_admin"
  }
]

[GET] /api/permission/roles/{kind}/{namespace}/{name}

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

表5.4 要求パラメーター
名前説明タイプ要件

body

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

要求の body

必須

要求 の body の例 (JSON)

{
  "memberReferences": ["group:default/test"],
  "name": "role:default/test_admin"
}

応答の例

201 Created

[PUT] /api/permission/roles/{kind}/{namespace}/{name}

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

要求パラメーター

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

名前説明タイプ要件

body

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

要求の body

必須

要求 の 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"
  }
}

応答の例

200 OK

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

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

表5.5 要求パラメーター
名前説明タイプ要件

kind

エンティティーの種類

String

必須

namespace

エンティティーの名前空間

String

必須

name

エンティティーに関連するユーザー名

String

必須

memberReferences

関連するグループの情報

String

必須

応答の例

204

[DELETE] /api/permission/roles/{kind}/{namespace}/{name}

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

表5.6 要求パラメーター
名前説明タイプ要件

kind

エンティティーの種類

String

必須

namespace

エンティティーの名前空間

String

必須

name

エンティティーに関連するユーザー名

String

必須

応答の例

204

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.