OktaでKong Gatewayと連携する場合、OktaのGroup名を<KongのWorkspace名>:<KongのRole名>
とすることでGroupに所属するユーザとKongのロールをマッピングすることが出来る。
以下の図だと、Oktaのdefault:super-admin
Groupに所属する2人のユーザはDev、ProdそれぞれにSuper Adminとしてアクセスできる。
しかし、実運用を考えると以下のように環境によってはSuper Adminを渡したくないケースが出てくる。
Prod環境には権限を持たずにアクセスさせたい場合、Oktaのdefault:super-admin
Groupに所属させるとマズいので、こういう場合は別のGroupとRoleを用意してあげる必要がある。
この時、dev-super-admin
のようなカスタムロールを作成するのだが、これが少し面倒でKong ManagerからだとWorkspaceを跨いで利用できるロールが作成できない。
エンドポイントのパーミッションを以下のようにしても基本的に作成したWorkspaceでしか権限を持たないロールとなる。
これを回避するためにはAdmin APIを利用してロールのパーミッションを設定する必要がある。
実際に試してみる。
最初にロールを作成する。
ロールの作成はAPI仕様より/rbac/roles
にPOSTすれば作成できるので、以下のような感じで作成する。
curl -X POST -H "kong-admin-token: kong" \
localhost:8001/rbac/roles \
-H "Content-Type: application/json" \
-d '{
"name": "dev-super-admin",
"comment": null
}'
次にロールのエンドポイントのパーミッションを設定する。
こちらもAPI仕様より/rbac/roles/<ロール名>/endpoints
以下のフォーマットでPOSTすれば設定できることが分かる。
{
"workspace": "string",
"endpoint": "string",
"negative": "string",
"actions": "string",
"comment": "string"
}
仕様に従って以下のように実行する。
curl -X POST -H "kong-admin-token: kong" \
localhost:8001/rbac/roles/dev-super-admin/endpoints \
-H "Content-Type: application/json" \
-d '{
"workspace": "*",
"endpoint": "*",
"negative": false,
"actions": [
"delete",
"create",
"update",
"read"
],
"comment": null
}'
"workspace": "*"
の部分がミソで、ロールに紐づくWorkspaceはUIでは設定出来ないがAdmin APIでは設定できるようになっている。
ここに*
を設定することでWorkspaceをまたいだロールとすることが出来る。
以上で設定は終了となる。
このロールを割り当てたユーザでKong Managerにログインすると、他のWorkspaceが確認できる。
Teams
->Admins
で見ると当該ユーザのWorkspace Access
が*
となっており、Workspaceによる制約がなくなっていることも確認できる。
ということで、Admin APIを使えばWorkspaceを跨いだ権限設定が出来ることが確認できた。