keystoneのtoken
KeysoneのTokenには、Project Scoped Token, Domain Scoped Token, Unscoped Tokenがあります。(System scoped tokenは除外します)
各Tokenにどういう用途があるのか、まとめました。
Project Scoped Token
これは、管理者よりユーザが一番使うであろうTokenです。
使いたいProjectのTokenなので、Project内の操作はこのTokenを使って行います。
該当ProjectへのUserの追加やInstanceの生成が可能です。
(※赤い部分が操作可能な範囲です)
Domain Scoped Token
次に、Domain Scoped Tokenです。
このTokenは、Domain内のUserやRoleやProjectのQuotaなどの操作(Create, Update, Delete)を行うことができます。
(※赤い部分が操作可能な範囲です)
Unscoped Token
最後にUnScoped Tokenですが、SSOなどの外部認証を使う時に最初に発行されるTokenです。 Unscoped Token は、Project Scoped Tokenに交換するためのTokenになります。
Domain Scoped Tokenと同じようなことができそうですが、追加や更新といった操作はできません。 UserやProjectの一覧が見れるぐらいしかできないです。 (※赤い部分が操作可能な範囲です)
APIでtokenを取得する
今回は多分一番使われるであろうProject Scoped Tokenの取り方をcurlで簡単に紹介
curl -i -X POST -H "Content-Type: application/json" -d ' { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "<user name>", "domain": { "name": "<domain name>" }, "password": "<password>" } } }, "scope": { "project": { "domain": { "name": "<domain name>" }, "name": "<project name>" } } } }' https://<endpoint>/v3/auth/tokens
と、簡単にとれます。 keystone clientというpythonのライブラリもあるので、
pythonを使う場合はclientを使うのも一つの手です。
user idも、project idもわかるのなら、idに置き換えることも可能です。
curl -i -X POST -H "Content-Type: application/json" -d ' { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "id": "<user id>", "password": "<password>" } } }, "scope": { "project": { "id": "<user id>" } } } }' https://<endpoint>/v3/auth/tokens