intra-mart Accel Platform 認可仕様書 第14版 2020-08-01

ポリシー管理

ポリシー

ポリシーとは 認可 概要 で紹介した通り、

  • 「誰が」(サブジェクト)
  • 「何を」(リソース)
  • 「どうする」(アクション)

に対して

  • 「許可/禁止」(エフェクト)

を定めたものです。

../../../_images/policy.png

サブジェクト管理機能で管理されている「誰が」とリソース管理機能で管理されている「何を」「どうする」について「許可/禁止」を管理するのがポリシー管理機能です。リソースはまとめて権限を管理するためにリソースグループで設定をまとめることができ、サブジェクトは実際には条件式を使用してサブジェクトグループという単位で利用されます。このため、ポリシー管理は実際には

  • 「誰が」:サブジェクトグループ
  • 「何を」:リソースグループ
  • 「どうする」:アクション

に対して「禁止」「許可」の設定を管理する形になっています。

ポリシー管理では上記の情報のセットを大量に保持しているだけなので、ポリシー情報の取り扱い自体はとても単純です。

API

ポリシー管理に関係する主要なAPI上の操作を説明します。詳細に関してはAPIリストを参照してください。

マネージャインスタンスの取得

ポリシー管理の主要な操作を行うためには PolicyManager クラスを使用します。
マネージャクラス、および、ファクトリクラスは以下の通りです。
マネージャクラス
jp.co.intra_mart.foundation.authz.services.admin.PolicyManager
マネージャファクトリ
jp.co.intra_mart.foundation.authz.services.admin.PolicyManagerFactory

マネージャインスタンスはファクトリクラスを使用して取得します。ファクトリも自身のファクトリメソッドを持っていますので、以下のようにして取得します。

final PolicyManager policyManager = PolicyManagerFactory.getInstance().getPolicyManager();

ポリシーの設定

特定のリソースグループ、サブジェクトグループ、アクションに対してエフェクトを設定します。PermitDeny が設定できます。

// ポリシーの設定
final Policy policy1 = policyManager.setPolicy("resource-group-id", "subject-group-id", "service", "execute", "permit");
final Policy policy2 = policyManager.setPolicy(resourceGroup, action, subjectGroup, Effect.PERMIT);

ポリシーの取得

特定のリソースグループ、サブジェクトグループ、アクションに対して設定されているエフェクトを取得します。この時、単純に設定したポリシーを取得するか、リソースグループの継承関係を考慮するかによってメソッドが分かれています。

// 継承関係を考慮せずポリシーを取得する(テーブルの値からそのまま取得)
Policy declaredPolicy = policyManager.getDeclaredPolicy("resource-group-id", "subject-group-id", "service", "execute");

// リソースグループの継承関係を考慮してポリシーを取得する
Policy actualPolicy = policyManager.getActualPolicy("resource-group-id", "subject-group-id", "service", "execute");

ポリシーの削除

特定のリソースグループ、サブジェクトグループ、アクションに対して設定されているポリシーを削除すると「未設定」状態になります。通常上位のリソースグループに設定されている権限を参照するようになります。

// 単一の設定を削除
// 削除すると通常継承扱いになります。
policyManager.removePolicy(policy1);
policyManager.removePolicy(policy2.getPolicyId());

// リソースグループ、サブジェクトグループについて一括で削除
policyManager.removePoliciesForResourceGroup("resource-group-id");
policyManager.removePoliciesForSubjectGroup("subject-group-id");

テーブル上の表現

ここではAPI上のモデルとテーブル上の関連を中心に説明します。

ポリシー(imaz_policy)

ポリシーテーブルには概要で説明した項目をほぼそのまま格納します。

主要なフィールド
論理名 物理名
ポリシーID policy_id
リソースグループID resource_group_id
サブジェクトグループID subject_group_id
リソースタイプ resource_type
アクション action
エフェクト effect

ポリシーIDは内部的に採番されるIDです。リソースグループID、リソースタイプ、アクション、サブジェクトグループIDで一意になるよう制約がかかっており、通常APIなどからポリシーを変更する際にはこれらの値を使用します。