API でのロールの作成

このトピックでは、Management API でカスタムのロールを作成してユーザーに割り当てる方法を説明します。また、API でロールの割り当てをテストする方法も示します(カスタムのロールの概要については、UI でのカスタムのロールの作成をご覧ください)。

権限の設定について

ロールの権限は Management API の URI に対して設定されます(管理 UI の URI ではありません)。たとえば、Edge 組織内のアプリ デベロッパー エンティティに対して PUT、GET、DELETE 権限を設定する場合は、/developers リソースに対して権限を設定します。これは、デベロッパーの Management API のパスが https://api.enterprise.apigee.com/v1/organizations/{org_name}/developers だからです。このトピックの Management API 呼び出しで説明しているように、権限のスコープは特定の組織に設定されているため、権限を定義するときに、パスに組織の部分を含める必要はありません。

特定のエンティティに対して権限を設定することもできます。次に例を示します。

  • ある 1 人のデベロッパーに権限を設定する場合は、/developers/steve@example.com に権限を設定します。
  • 特定の API プロダクト(free-api-product など)の場合は、/apiproducts/free-api-product に権限を設定します。
  • 特定の環境の Key-Value マップの場合は、たとえば /environments/test/keyvaluemaps/fooMap に権限を設定します。テスト環境のすべての Key-Value マップの場合は、/environments/test/keyvaluemaps/* に権限を設定します。

API を使用して設定する権限:

  • カスタムロールを持つユーザーは、与えられた権限に従って Management API 呼び出しを行うことができます。たとえば、すべての API プロキシに対する読み取り専用アクセスが許可されたロールを持つユーザーは、API プロキシの一覧表示 API は使用できますが、API プロキシの作成 API は使用できません。
  • カスタムロールを持つユーザーが管理 UI で何を表示でき、どの操作を行えるかを決定します。たとえば、API プロキシに対する読み取り専用アクセス権を持つユーザーは、[API Proxies] ページの [+API Proxy] ボタンと [Delete] ボタンを使用できません。

権限を設定できるリソースとパスを確認するには、Management API リファレンスでリソースの URL を探します。

ロール管理の詳細については、ユーザーロール API をご覧ください。

構文と優先順位

権限設定でアスタリスクのワイルドカード(*)を使用して、「これ以降のすべて」を示すことができます。ただし、親リソース(/developers など)にのみ権限を設定し、より詳細な権限(/developers/* など)を設定していない場合は、親リソースの権限が /developers より下位のすべてのものに適用されます。

権限では、PUT は POST としても機能します。

全般的な権限とより詳細な権限の両方をリソースに設定できます。権限の重複がある場合は、より細かい設定が優先されます。たとえば、次の権限を developeradmin ロールに設定したとします。

  • /developers に対する PUT
  • /developers/* に対する GET

この場合、developeradmin には次の操作が許可されます。

  • デベロッパーの作成はできますが、特定のデベロッパーやサブエンティティの更新はできません(このパスでは GET 権限の方が細かいため)。
  • 任意のデベロッパーまたはサブエンティティを取得できますが、すべてのデベロッパーのリストは取得できません。

API で設定できる権限の一覧については、権限のリファレンスをご覧ください。

development という新しいカスタムロールを作成する

development ロールを作成して、デベロッパーに API プロキシの表示、作成、更新を許可します。

$ curl -u email:password https://api.enterprise.apigee.com/v1/o/{org_name}/userroles -H "Content-type:application/json" -X POST -d'{ "role" : [ { "name" : "development" } ] }'

development ロールに権限を追加する

Edge アーティファクトのグループ全体(すべての /apps、/apis、/apiproducts など)や個々のアーティファクト(特定のアプリ、API プロキシ、API プロダクトなど)には、GET、PUT、DELETE の権限を設定できます。

GET を使用すると、ユーザーは任意の API(API プロキシ構成ファイル、関連するポリシー、JavaScript、XSLT ファイルなども含む)を表示できます。API に対する PUT 権限を使用すると、デベロッパーは API プロキシの作成、変更、インポート、エクスポート、デプロイ、デプロイ解除を行うことができます。

path 属性には、権限を設定するアーティファクトを指定します。たとえば、/applications、/apps、/apiproducts、/developers、/reports などを指定します。

curl -u email:password https://api.enterprise.apigee.com/v1/o/{org_name}/userroles/development/permissions -H "Content-type:application/json" -X POST -d'{"path" : "/applications","permissions" : [ "put", "get" ]}'

testing ロールを作成する

品質エンジニアに API プロキシとそのコンテンツ(ポリシーを含む)の表示を許可するために、「testing」というロールを作成します。

$ curl -u email:password https://api.enterprise.apigee.com/v1/o/{org_name}/userroles -H "Content-type:application/json" -X POST -d'{ "role" : [ { "name" : "testing" } ] }'

testing ロールに権限を追加する

GET を使用すると、ユーザーは任意の API(API 構成ファイルや関連するポリシー、JavaScript、XSLT ファイルなども含む)を表示できます。この権限を testing ロールに追加すると、品質エンジニアはテスト対象の API のコンテンツを表示できるようになります。ただし、このロールを持つユーザーは、API プロキシの作成、変更、インポート、エクスポート、デプロイ、デプロイ解除はできません。

$ curl -u email:password https://api.enterprise.apigee.com/v1/o/{org_name}/userroles/testing/permissions -H "Content-type:application/json" -X POST -d'{"path" : "/applications","permissions" : [ "get" ]}'

Edge のオンプレミス インストールの場合、ユーザーに Edge UI へのログインを許可するために最低限必要な権限セットは次のとおりです。

{"path" : "/","permissions" : [ "get" ]}
{"path" : "/*","permissions" : [ ]}
{"path" : "/environments","permissions" : [ "get" ]}
{"path" : "/userroles","permissions" : [ "get" ]}

次の cURL コマンドを使用して、これらの権限を設定します。

curl -H "Content-Type:application/json" -u email:password \
-X POST \
http://<ms-IP>:8080/v1/organizations/{org_name}/userroles/testing/resourcepermissions  \
-d '{
 "resourcePermission" : [
   {
    "path" : "/",
    "permissions" : [ "get" ]
   },
{
    "path" : "/*",
    "permissions" : []
   },
{
    "path" : "/environments",
    "permissions" : [ "get" ]
   },
   {
    "path" : "/userroles",
    "permissions" : [ "get"]
   }
  ]
}'

ここで、<ms-IP> は Edge Management Server の IP アドレスまたは DNS 名です。

testing ロールにユーザーを追加する

ユーザーロールを持つユーザーをプロビジョニングします。

$ curl -u email:password https://api.enterprise.apigee.com/v1/o/{org_name}/users/justauser@apigee.com/userroles -H "Content-type:application/json" -X POST -d'{"role" : [ {"name" : "testing"} ] }'

ユーザーとして API を表示する

上記のユーザーとして、API プロキシの表示リクエストを API サービスに送信します。このユーザーには、API とそのコンテンツの表示権限が必要です。
$ curl -u justauser@apigee.com:secret https://api.enterprise.apigee.com/v1/o/{org_name}/apis
$ curl -u justauser@apigee.com:secret https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/policies

testing ロールを持つユーザーとして API を作成する

上記のユーザーとして、API プロキシの作成リクエストを API サービスに送信します。testing ロールには API の作成が許可されていないため、このリクエストは API サービスによって拒否されます。

$ curl -u justauser@apigee.com:secret -H "Content-Type: application/json" https://api.enterprise.apigee.com/v1/o/{org_name}/apis -X POST -d'{"name" : "rbacTestApi"}'

development ロールにユーザーを追加する

次に、development ロールを持つユーザーをプロビジョニングします。

$ curl -u email:password https://api.enterprise.apigee.com/v1/o/{org_name}/users/justauser@apigee.com/userroles -H "Content-type:application/json" -X POST -d'{"role" : [ {"name" : "development"} ] }'

development ロールを持つユーザーとして API を作成する

上記のユーザーとして、API プロキシの作成リクエストを API Platform に繰り返し送信します。development ロールには API の作成が許可されているため、このリクエストは成功します。

$ curl -u justauser@apigee.com:secret -H "Content-Type: application/json" https://api.enterprise.apigee.com/v1/o/{org_name}/apis -X POST -d'{"name" : "rbacTestApi"}'

ユーザーのユーザーロールを取得する

組織管理者は、すべての組織のユーザーのユーザーロールをいつでも確認できます。

$ curl -u email:password -X GET https://api.enterprise.apigee.com/v1/users/justauser@apigee.com/userroles