よく使われるパーミッション構文のサンプルをご紹介します。SAM の詳細は 開発者向け Web サイト をご参照ください。
- 以下のパーミッション構文はあくまでサンプルです。実際にお使いになる際は事前にテストを実施くださいますようお願いいたします。
(サンプル 1)「SIM 管理」「課金情報」参照のみ許可するパーミッション構文
{
"statements": [
{
"api": [
"Subscriber:list*",
"Billing:*",
"Payment:get*",
"Payment:list*",
"Payment:exportPaymentStatement",
"Stats:*",
"Files:*",
"Query:searchSubscribers"
],
"effect": "allow"
}
]
}
ユーザーコンソールの検索機能強化にともない、以前に公開していた構文に加えて "Query:searchSubscribers" が追加されています。
(サンプル 2)SIM 管理画面の参照、監視情報の参照・更新のみ許可するパーミッション構文
{
"statements": [
{
"api": [
"EventHandler:*",
"Sim:listSims",
"Subscriber:listSubscribers",
"Query:searchSims",
"Query:searchSubscribers",
"Group:listGroups",
"CellLocation:*"
],
"effect": "allow"
}
]
}
ユーザーコンソールの検索機能強化にともない、以前に公開していた構文に加えて "Query:searchSubscribers" が追加されています。
(サンプル 3)Harvest のデータの参照のみ許可するパーミッション構文
{
"statements": [
{
"api": [
"Sim:getDataFromSim",
"Subscriber:getDataFromSubscriber",
"LoraDevice:getDataFromLoraDevice",
"SigfoxDevice:getDataFromSigfoxDevice",
"DataEntry:getDataEntries",
"DataEntry:getDataEntry"
],
"effect": "allow"
}
]
}
(サンプル 4)サポート問い合わせのみ不可・他の API は全て許可するパーミッション構文
この設定を実施した場合も、ユーザーコンソールのお問い合わせメニュー項目は表示されたままとなります。メニューをクリックした際にサポートサイトへログインするためのトークンの生成が拒否されますので「サポートサイトにリダイレクトしています」の画面で停止します。
{
"statements": [
{
"api": "*",
"effect": "allow"
},
{
"api": [
"Operator:generateSupportToken"
],
"effect": "deny"
}
]
}
(サンプル 5)全ての API を許可するパーミッション構文
{
"statements": [
{
"api": "*",
"effect": "allow"
}
]
}
(サンプル 6)SAM ユーザーが自分自身のパスワードのみを変更することを許可するパーミッション構文
{
"statements": [
{
"effect": "allow",
"api": "User:updateUserPassword",
"condition": "pathVariable('user_name') == samUserName"
}
]
}
(サンプル 7)特定の IMSI に対する使用開始、休止へのステータス変更とセッション切断を許可、また SIM 管理画面の参照、SIM の検索を許可するパーミッション構文
{
"statements":[
{
"api":[
"Sim:activateSim",
"Sim:deactivateSim",
"Sim:deleteSimSession",
"Sim:getSim"
],
"effect":"allow",
"condition":"pathVariable('sim_id') == 'Input your SIM ID'"
},
{
"api":[
"Sim:listSims",
"Group:listGroups",
"Query:searchSims",
"CellLocation:*"
],
"effect":"allow"
}
]
}
現在の SAM の機能では以下のようなアクセス制御は実現できません。
- SIM グループやデバイスグループ単位で閲覧の可否を制御する
- 一部の SIM のみ SIM 管理画面へ表示する
これは、一覧の取得に使用する API Subscriber:listSubscribers / Device:listDevices といった API のパスに {user_name} や {group_id}、{imsi} といったプレースホルダーが含まれないためです。したがって、一覧系 API はすべて有効か無効かの選択のみとなります。また、SIM グループをユーザーコンソールで編集する場合は画面表示の際に使用するため Group:listGroups の許可が必要です。
以下のようにパスにプレースホルダーが含まれる API は pathVariable() 関数を使用して細かな制御ができます。
- Subscriber:getSubscriber /subscribers/{imsi}
- Device:getDevice /device/{device_id}
- Device:executeDeviceResource /devices/{device_id}/{object}/{instance}/{resource}/execute
(サンプル 8)アカウント削除、発注、SIM の解約、SIM の登録以外を許可する状態のパーミッション構文
{
"statements": [
{
"api": "*",
"effect": "allow"
},
{
"api": [
"Billing:*",
"Operator:*",
"Order:*",
"Payment:*",
"PortMapping:*",
"Role:*",
"Subscriber:registerSubscriber",
"Subscriber:deactivateSubscriber",
"Subscriber:enableTermination",
"Subscriber:setImeiLock",
"Subscriber:setSubscriberToStandby",
"Subscriber:suspendSubscriber",
"Subscriber:terminateSubscriber",
"Subscriber:setExpiryTime",
"User:*",
"VirtualPrivateGateway:*"
],
"effect": "deny"
}
]
}
(サンプル 9)SORACOM Harvest Files の特定のパス以下の閲覧・ダウンロード・アップロードを許可
{
"statements": [
{
"effect": "allow",
"api": "FileEntry:listFiles",
"condition": "pathVariable('path') matches 'firmware/versions'"
},
{
"effect": "allow",
"api": "FileEntry:getFile",
"condition": "pathVariable('path') matches 'firmware/versions/.*'"
},
{
"effect": "allow",
"api": "FileEntry:putFile",
"condition": "pathVariable('path') matches 'logs/:imsi/.*'"
}
]
}