小さな掲示板を作る状況でロールベースのリソースアクセスコントロールを構成する例でコンソールの使い方を説明します。
/board/v1.0/{boardId}
APIを呼び出すと投稿を返すAPIがあり、このAPIは認証された会員だけが呼び出すことができるとします。
まず、認証された会員というロールを作る必要があります。
curlを使用した例で"{Appkey}"と"{SecretKey}"値は実際のプロジェクト内で有効にしたROLEサービスのアプリケーションキーと秘密鍵に置き換える必要があります。
ロールを作成したら、オペレーションを作成する必要があります。
次は/board/v1.0/{boardId}
をリソースとして登録してみます。
board
, v1.0
, {boardId}
に分けて順番に登録する必要があります。
board
を追加します。
v1.0
を追加します。
{boardId}
を追加します。リソースまで登録したら、ロールがオペレーションを実行できるリソースを指定するため、ロール-リソース
関係を設定する必要があります。
作成したロールに特定の条件のみオペレーション実行権限を付与するため、 ロール-条件属性
関係を設定する必要があります。
条件属性は、条件属性にあらかじめ追加したロールのみ使用できます。条件属性を作成/修正する時、先に作成しておいたロールを条件属性に追加します。
最後に掲示板APIを使うユーザーを追加して、アクセス制御を設定するためにMEMBER
ロールとinstance.name
条件属性を設定します。
userId
のHeaderの'uuid'
に値が渡されたとします。
12345678-1234-5678-1234-567812345678
ユーザーが/board/v1.0/1
APIを呼び出した時、権限をチェックすると下記のようになります。
curl -X POST -H "Content-Type: application/json" -d '{
"resources": [
{
"attributes": {
"attributeId": "instance.name",
"attributeValue": "GPU"
},
"authRequestId": "",
"operationId": "GET",
"resourceId": "",
"resourcePath": "/board/v1.0/1",
"scopeId": "ALL"
}
]
}' "https://role.api.nhncloudservice.com/role/v3.0/appkeys/{Appkey}/users/12345678-1234-5678-1234-567812345678/authorizations/resources"
レスポンス例) アクセス権限がある場合、そのリソース内部にpermission: true
でレスポンスが来ます。
{
"authorizations" : [
{
"attributes" : [
{
"attributeId" : "instance.name",
"attributeValue" : "GPU"
}
],
"operationId" : "GET",
"permission" : true,
"resourceId" : "{boardId}",
"resourcePath" : "/board/v1.0/1",
"scopeId" : "ALL"
}
],
"header" : {
"isSuccessful" : true,
"resultCode" : 0,
"resultMessage" : ""
}
}
ROLEサービスを使用する他のプロジェクトがある場合、データ移行機能を利用して便利にデータを同期させることができます。
データ同期の対象はリソース
、ロール
、オペレーション
であり、スコープ
とユーザー
は同期されません。
管理タブのマイグレーションメニュー領域でデータを移行するプロジェクトもしくはアプリキーを入力して進めることができます。
データを移行するプロジェクトを選択するか、直接アプリケーションキーを入力できます。
クライアントSDKキャッシュの設定を行うことができます。
設定できる属性はTTL
、ID別サイズ
、Path別サイズ
、Tree別サイズ
があります。
リソースパスの最後の '/'
に対して設定できます。
Non Identical Path
に設定すると、'/board/v1.0/{boardId}'
と '/board/v1.0/{boardId}/'
は異なるパスになります。
しかし、Identical Path
に設定した場合、 '/board/v1.0/{boardId}'
と '/board/v1.0/{boardId}/'
は同じパスになります。
クライアントSDKとサーバーのキャッシュのため、変更されたリソースの権限チェック結果がすぐに反映されない場合があります。 その場合、[管理]タブのキャッシュの削除ボタンを使って明示的にキャッシュを削除することで問題を解決することができます。