Keystoneとは
Keystoneは、OpenStackのエンドポイント管理および認証を司るサービスです。OpenStackを利用するのであれば、大体の場合keyStoneを使うことになります。
OpenStackを利用するソフトウェアは、「どこにアクセスすればサービスを利用できるのか」をKeystoneに問い合わせて知ります。このアクセスポイントの情報をエンドポイントと呼びます。OpenStackのサービスはそれぞれにエンドポイントを持ちます。しかし、OpenStackで作られたクラウドサービスのどこがエンドポイントなのかは、Keystoneだけが知っています
OpenStackの全てのサービスは、ユーザーからのリクエストを受け取ると、そのリクエストに返答すべきか否かをKeystoneに問い合わせます。Keystoneは要求に従い、認証するか否かの情報と認可に使う情報を、問い合わせてきた各サービスに返答します。
本稿ではKeystoneの次の3要素について、OpenStackがMSAであることで生まれる利点や考慮すべき点について確認していきます。
- エンドポイントの管理
- 認証
- 認可
エンドポイントの管理
Keystoneによるエンドポイント提供の手順
OpenStackで作ったクラウドの管理者は、Keystoneに各サービスのエンドポイントの情報を登録します。登録するのは次の情報です。
- サービスの名前
- サービスの役割
- サービスにアクセスするためのURL
- サービスの所属するリージョン
リージョンとは、クラウドで使っているサーバーの物理的な所在地です。複数の場所に置かれたサーバーを用いて1つのクラウドサービスを構築している場合、複数のリージョンに同じサービスがあることが考えられます。例えば、東京本社と福岡支社にクラウドサービスのためのサーバーがある場合、「東京リージョン」と「福岡リージョン」とに分けることになります。
Keystoneは各クライアントの要求に応じ、エンドポイントの情報を認証情報とともにクライアントに送信します。
また、サービスが変化した場合は、その変化に合わせてKeystoneに登録された情報を更新します。
エンドポイントを書きかえることでMSA特有の頻繁な変化に対応
MSAは各々のサービスを変化させやすいのが大きな利点です。サービスを移動させたり、新しいサービスを追加したりすることが容易です。しかし、その変更をどのようにして他サービスやクライアントに通知すればよいでしょうか。
Keystoneは、サービスが追加されたら、そのサービスのエンドポイントをKeystoneが管理するエンドポイントリストに追加します。逆に、サービスが削除されたら、そのサービスのエンドポイントをエンドポイントリストから取り除きます。こうしてKeystoneはサービスの増減に対応し、次回の認証を機会としてユーザーに変更されたエンドポイントの情報が伝えられます。
万が一、各サービスが提供するエンドポイントがバージョンアップなどで変化したとしても、Keystoneが管理しているエンドポイントを書き換えれば、ユーザーには次の認証の際に知らされます。あるいは、利用可能なバージョンのエンドポイントを複数個併記しておくことで、古いバージョンを使っているユーザーは「今使っているバージョンも利用できるが、いずれは新しいものに移行しなければならない」ことを認識できます。
また、サービスが移動してURLが変わったとしても、Keystoneに登録されたエンドポイントの情報を更新するだけで、他のサービスはサービスの移動先を把握できます。
Keystoneは他のサービスのエンドポイントを1か所で管理し、エンドポイントの情報を認証の際に共有します。この設計はMSAの柔軟さを活かし、サービスの変化・拡大を鈍化させないための方法として有力な方法といえるでしょう。
Keystoneがエンドポイントについて扱う情報
Keystoneにエンドポイントの情報を要求した場合、次のような返り値が得られます。エンドポイントに関して実際に実装する際に参考にしてみてください。
{
"endpoints": [
{
"adminURL": "http://nova.privatenetwork.exampla.com:8774/v2/c7e5e14e38e9438da15ea276c1a04798",
"id": "411289be7d7e44e3aaec71666cadea0e",
"internalURL": "http://nova.servicenetwork.exampla.com:8774/v2/c7e5e14e38e9438da15ea276c1a04798",
"publicURL": "http://nova.publicnetwork.exampla.com:8774/v2/c7e5e14e38e9438da15ea276c1a04798",
"region": "SampleRegion"
}
],
"endpoints_links": [],
"name": "nova",
"type": "compute"
}
| 項目 | 説明 |
|---|---|
| endpoints | エンドポイントのURL。endpointではなくendpoint”s”なのは、単一のOpenStackで作られたクラウドコンピューティングサービスに複数の同じサービスが存在する場合、エンドポイントも複数個あるため |
| region | そのエンドポイントを持つサービスが存在するリージョン |
| id | そのサービスのID |
| adminURL | 管理用のエンドポイント。サービスを管理するために用いられる一部の操作はこのエンドポイントからしかアクセスを認められない |
| internalURL | 各サービスが互いに通信するために用いるエンドポイント |
| publicURL | クラウドサービスを利用するユーザーがアクセスするために用いるエンドポイント |
| endpoints_links | エンドポイントの一覧を取得しきれなかった場合、残りを取得するためのアクセスポイントが記述される |
| name | サービスの名前。novaやneutronといった名前が入る |
| type | どのようなサービスであるかを示す。novaであればcomputeといった具合 |
また、Keystoneの持つデータベースにはエンドポイントについて次のような情報が格納されています。
| 項目 | 説明 |
|---|---|
| id | エンドポイントを一意に識別するID |
| interface | エンドポイントがadminURLなのかinternalURLなのかpublicURLなのかを示す |
| service_id | エンドポイントでアクセスできるサービスの指定 |
| url | エンドポイントのURL |
| enabled | エンドポイントの有効・無効を示す |
| region_id | 所属するリージョンを示す |
