6.9 ACL、Statement

以下にACL、Statement定義と定義例を示します。ACL、Statementの詳細については「ユーザーとACL」を参照してください。

ACLのマニフェストは以下です。

(表)ACL定義

キー デフォルト値 必須※ 説明
apiVersion: Yes APIバージョン
1.0を指定する。
kind: Yes aclを指定する。
type: No resourceを指定する。
Ops Iの運用機能に追加する新しい定義であることを示す。
name: Yes ACL定義の内部名
nameは以下のルールに従う必要がある。
  • 本マニフェストファイルのディレクトリ名を指定
  • 入力可能な文字は以下の通り
    • 半角英数字:
      a~z A~Z 0~9
    • 半角の特殊文字:
      _ . ( ) -
  • 先頭文字が半角英数字かアンダーバー(_)
  • その他の注意点は「マニフェストファイル作成時の注意」2~4を参照
label: Yes マニフェストファイルに記載する運用機能の表示名
includes: No このマニフェストファイルで利用する関連マニフェストファイルを記載
メモメモ
  • 記載するマニフェストファイルはこのマニフェストファイル登録前にOps Iに登録されている必要があります。
  • includesキーを指定することにより、他のマニフェストファイルで定義した内容を取り込むことができます。例えば、認可情報のセットを定義したStatementのマニフェストファイルを取り込む場合に使用します。
- kind: Yes 読み込むマニフェストファイルの種類
  name: Yes 読み込むマニフェストファイルの内部名
description: No このマニフェストファイルに対する詳細説明
statements: Yes ACLにひもづけるStatementの名前をリスト形式で指定する。
以下に記述例を示す。
例)
statements:
  - statement_name1
  - statement_name2
※入れ子関係にないキーの必須が「No」の場合は、定義が必須ではありません。入れ子関係にあるキーの場合は、下層キーの必須は、上層キーを設定している場合に適用されます。

Statementのマニフェストは以下です。

(表)Statement定義

キー デフォルト値 必須※ 説明
apiVersion: Yes APIバージョン
1.0を指定する。
kind: Yes statementを指定する。
type: No resourceを指定する。
Ops Iの運用機能に追加する新しい定義であることを示す。
name: Yes Statement定義の内部名
nameは以下のルールに従う必要がある。
  • 本マニフェストファイルのディレクトリ名を指定
  • 入力可能な文字は以下の通り
    • 半角英数字:
      a~z A~Z 0~9
    • 半角の特殊文字:
      _ . ( ) -
  • 先頭文字が半角英数字かアンダーバー(_)
  • その他の注意点は「マニフェストファイル作成時の注意」2~4を参照
label: Yes マニフェストファイルに記載する運用機能の表示名
includes: No このマニフェストファイルで利用する関連マニフェストファイルを記載
メモメモ
  • 記載するマニフェストファイルはこのマニフェストファイル登録前にOps Iに登録されている必要があります。
  • includesキーを指定することにより、他のマニフェストファイルで定義した内容を取り込むことができます。
- kind: Yes 読み込むマニフェストファイルの種類
  name: Yes 読み込むマニフェストファイルの内部名
description: No このマニフェストファイルに対する詳細説明
テンプレート機能を利用して記述することができる。
authzType: Yes Statementの権限のタイプ
以下の値が使用できる。
  • uri
  • document
  • object
actions: Yes Statementのアクション
authzTypeとリソースによって使用可能な値が異なる。
各authzTypeにおけるアクションは「(表)各authzTypeにおけるアクション」を参照。リスト形式で表記する。uriタイプの際に使用する。
action: Yes Statementのアクション
authzTypeとリソースによって使用可能な値が異なる。各authzTypeにおけるアクションは「(表)各authzTypeにおけるアクション」を参照。documentタイプとobjectタイプの際に使用する。
resources: Yes リソース
listで表記し、すべてのauthzTypeで使用できる。
- format: wildcard No Valueの形式
以下が使用できる。
  • wildcard
  • regex
  value: Yes リソースを識別するための値
authzTypeに一致するリソースを指定する。形式に応じて、ワイルドカードと正規表現を使用できる。
authzType: document の場合
  value: kind名:Document名:documentのkey-valueのPath
authzType: uri の場合
  value: https://Ops Iホスト名/対象Path または
  value: "https://{{.System.domain}}/対象Path"
authzType: object の場合
  value: /api/v1/API
  APIで指定可能な値はAPIリファレンスを参照。
  graphqlQuery: No GraphQLのObject名またはMutation Field名
valueのAPIがGraphQLの場合に指定する。
  format: wildcard No valueの形式
以下が使用できる。
  • wildcard
  • regex
  value: Yes GraphQLのObject名(参照の場合)またはMutation Field名(作成・削除・更新の場合)を識別するための値を指定する。
形式に応じて、ワイルドカードと正規表現を使用できる。
  type: table No データソースのタイプを指定する。
以下が使用できる。
  • table
  • view
  effect: allow Yes Statementのeffect
以下が使用できる。
  • allow
  • deny
  conditions: No conditionsは認可の条件を示す。
複数の条件を記述することができ、第1階層のリストはORを表す。
第2階層はANDとして複数の条件を記述できる。
このフィールドは、以下のauthzTypeで使用できる。
  • object
このフィールドを省略した場合は、全条件を満たすことになる。
- No
- operator: Yes オペレータ
以下が使用できる。
  • eq、ne(==、!=)
  • gt、ge(>、>=)
  • lt、le(<、<=)
  • in、notIn(リストにおける共通項の有無判定とリスト内の要素との一致の判定ができる。)、notAnyIn(比較するリスト内の要素が1つも一致しない判定ができる。)
  • wildcard、regex
  firstOperand: Yes 第1オペランド
値またはパラメータが指定されていること。使用できるパラメータについては「(表)使用可能なパラメータ」を参照。
パラメータの使用可能な値はobjectによって異なる。objectは新しく作成される"New"とOps I上既存としての"Recorded"がある。評価する"New"レコードの値は"New.Object.*"で、Recordedレコードの値は"Recorded.Object.*"で表記する。
例){{ .GetValue ".New.Object.createBy" }}
第1オペランドは以下の形式をサポートする。
  • string(operator: eq, ne, gt, ge, lt, le)
  • list(operator: in, notIn, notAnyIn)
  • wildcard(operator: wildcard), regex(operator: regex)
  • Dynamic field(operator: any)
例){{ .GetValue ".Requester.GroupNames" }}
  secondOperand: Yes 第2オペランド
"firstOperand"と"operator"が指定されていること。
値またはパラメータが指定されていること。使用できるパラメータについては「(表)使用可能なパラメータ」を参照。
パラメータが使用可能な値はobjectによって異なる。objectは新しく作成される"New"とOps I上既存としての"Recorded"がある。評価する"New"レコードの値は"New.Object.*"で、Recordedレコードの値は"Recorded.Object.*"で表記する。
例){{ .GetValue ".New.Object.createBy" }}
第2オペランドは以下の形式をサポートする。
  • string(operator: eq, ne, gt, ge, lt, le, wildcard, regex)
  • list(operator: in, notIn, notAnyIn)
  • Dynamic field(operator: any)
例){{ .GetValue ".Requester.GroupNames" }}
  fields: No 評価するフィールドのリスト
以下のauthzTypeで使用できる。
  • object
使用可能な値はリソースのデータモデルによって異なる。この条件を省略した場合は、全フィールドが条件を満たすことになる。
- format: wildcard No Valueの形式
以下が使用できる。
  • wildcard
  • regex
  value: Yes リソースを識別するための値
authzTypeに一致するリソースを指定する。形式に応じて、ワイルドカードと正規表現を使用できる。
※入れ子関係にないキーの必須が「No」の場合は、定義が必須ではありません。入れ子関係にあるキーの場合は、下層キーの必須は、上層キーを設定している場合に適用されます。

(表)各authzTypeにおけるアクション

authzType ActionValue 説明
uri GET GETリクエスト
uri POST POSTリクエスト
uri PUT PUTリクエスト
uri DELETE DELETEリクエスト
uri PATCH PATCHリクエスト
uri それ以外 指定できない。それ以外のHTTPメソッドはデフォルト動作として許可される。
document read アプリケーションまたはUI要素(タブ、コンポーネント)を表示する。
object read ユーザーによるreadを承認する。
object create ユーザーによるcreateを承認する。
object update ユーザーによるupdateを承認する。
object delete ユーザーによるdeleteを承認する。

(表)使用可能なパラメータ

パラメータ 説明
{{ .GetValue ".Requester.Id" }} リクエストユーザーのID
{{ .GetValue ".Requester.Name" }} リクエストユーザーの名前
{{ .GetValue ".Requester.DisplayName" }} リクエストユーザーの表示名
{{ .GetValue ".Requester.GroupNames" }} ユーザーのグループの名前
リスト形式で返却される。
{{ .GetValue ".Requester.GroupIds" }} ユーザーのグループのID
リスト形式で返却される。
{{ .GetValue ".Requester.RoleNames" }} ユーザーのロールの名前
リスト形式で返却される。
{{ .GetValue ".Requester.RoleIds" }} ユーザーのロールのID
リスト形式で返却される。
{{ .GetValue ".Requester.CustomerName" }} リクエストユーザーの顧客名(ユーザーが顧客ユーザーの場合、顧客情報を含む。)
{{ .GetValue ".Requester.CustomerId" }} リクエストユーザーの顧客ID(ユーザーが顧客ユーザーの場合、顧客情報を含む。)
{{ .GetValue ".New.Object.<FIELD※>" }} 評価のための申請者からの新しいリクエスト
{{ .GetValue ".Recorded.Object.<FIELD※>" }} 評価のためのOps Iに登録されたレコード
{{ .GetValue ".Recorded.Object" | .GetCustomer }}
{{ .GetValue ".New.Object" | .GetCustomer }}
GetCustomerは、入力されたオブジェクトに関連する顧客の名前を取得する。
以下のオブジェクトが利用できる。
  • sys_context
  • sys_schedule
  • ticket
  • article
  • sys_user
  • u CUSTOM_DATA
オブジェクトが顧客に関連していない場合、nullが返される。(例:単一スケジュール)
{{ .GetValue ".Recorded.Object.group" | .GetGroupAncestorsAndSelf }}
{{ .GetValue ".New.Object.group" | .GetGroupAncestorsAndSelf }}
入力されたレコードの所属グループの親グループおよび先祖グループのID
リスト形式で返却される。
{{ .GetValue ".Recorded.Object.group" | .GetGroupDescendantsAndSelf }}
{{ .GetValue ".New.Object.group" | .GetGroupDescendantsAndSelf }}
入力されたレコードの所属グループの子グループおよび子孫グループのID
リスト形式で返却される。
{{ .GetValue ".Recorded.Object.id" | .GetCustomDataRelatedGroups "タイプ名" }}
{{ .GetValue ".New.Object.id" | .GetCustomDataRelatedGroups "タイプ名" }}
入力されたレコードの所属グループの関連グループのID
タイプ名を指定するとそのタイプの関連グループのIDのみリスト形式で返却される。(スペース区切りで複数タイプを指定できる)
関連グループについては「データモデルのレコードのグループ分離」を参照。
※ユーザーが追加したフィールドも指定できます。このとき指定するフィールド名は「フィールドの追加」の②aで「Ops I側のフィールド名」として設定した値です。

<定義例> ACL

apiVersion: 1.0
kind: acl

## Meta data
type: resource
name: acl_infra_default
label: acl_infra_default
description: |
  This is an acl_infra_default acl.
  You can action elements that is specified in statement.
  But you cannot action elements that is not specified in statement.

## Dependencies
includes:
- kind: statement
  name: statement_document_application_management_allow_default

# ACL DATA
statements:
  - statement_document_application_management_allow_default

<定義例> Statement

apiVersion: 1.0
kind: statement

## Meta data
type: resource
name: user_workspace_statement
label: user_workspace
description: workspace hidden
authzType: document
action: read
resources:

  - format: wildcard
    value: application:sys_task:tabs\[0\].**
    effect: deny # added