第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 条件オブジェクトのパラメーター パラメーター タイプ 説明 resultString
常に
CONDITIONALの値を持つroleEntityRefString
RBAC ロールへの文字列エンティティー参照 (
role:default/devなど)pluginIdString
対応するプラグイン ID (
catalogなど)permissionMappingString array
パーミッションアクションの配列
(['read', 'update', 'delete']など)resourceTypeString
プラグインによって提供されるリソースタイプ (
catalog-entityなど)conditionsJSON
条件によって結合されたパラメーターまたは配列パラメーターを含む条件 JSON
- 条件付きポリシーエイリアス
RBAC バックエンドプラグイン (
backstage-plugin-rbac-backend) は、条件付きポリシールールパラメーターでのエイリアスの使用をサポートしています。条件付きポリシーエイリアスは、ポリシー評価中に対応する値に動的に置き換えられます。条件付きポリシー内の各エイリアスには、その特殊な機能を示す$記号が先頭に付きます。サポートされている条件付きエイリアスは次のとおりです。
-
$currentUser: このエイリアスは、リソースへのアクセスを要求するユーザーのユーザーエンティティー参照に置き換えられます。たとえば、デフォルトの namespace のユーザー Tom がアクセスを要求すると、$currentUserはuser: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"]
}
}
}
-
$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"]
}
}
}
8.1. 推移的な親グループの有効化 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat Developer Hub は認証中に間接的な親グループを解決しません。その場合、次のグループ階層では、user_alice ユーザーは group_developers グループにのみ属します。
group_admin
└── group_developers
└── user_alice
$ownerRefs エイリアス使用時に複数レベルのグループ階層をサポートするには、ユーザーの所有権エンティティーに間接的な親グループを含めるように Developer Hub を設定できます。その場合、user_alice ユーザーは group_developers グループと group_admin グループの両方に属します。
手順
app-config.yamlファイルでincludeTransitiveGroupOwnershipオプションを有効にします。includeTransitiveGroupOwnership: true