thirose’s blog

openstackやpythonなどなど

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の生成が可能です。 f:id:hirosetakahito:20180823155412p:plain (※赤い部分が操作可能な範囲です)

Domain Scoped Token

次に、Domain Scoped Tokenです。
このTokenは、Domain内のUserやRoleやProjectのQuotaなどの操作(Create, Update, Delete)を行うことができます。
f:id:hirosetakahito:20180823155422p:plain (※赤い部分が操作可能な範囲です)

Unscoped Token

最後にUnScoped Tokenですが、SSOなどの外部認証を使う時に最初に発行されるTokenです。 Unscoped Token は、Project Scoped Tokenに交換するためのTokenになります。

Domain Scoped Tokenと同じようなことができそうですが、追加や更新といった操作はできません。 UserやProjectの一覧が見れるぐらいしかできないです。 f:id:hirosetakahito:20180823155428p:plain (※赤い部分が操作可能な範囲です)

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