ベアメタルからクラウドへ:OpenStack Keystone 紹介

從裸機到雲端:OpenStack Keystone 介紹

前回は最も歴史のあるOpenStackコンポーネントであるNovaを紹介しましたが、今回は現在OpenStackの中で最も中核となるコンポーネント、Keystoneを紹介します。

Keystone とは何ですか?

公式ドキュメントでは次のように説明されています:

Keystoneは、OpenStackのIdentity APIを実装することで、APIクライアント認証、サービスディスカバリ (service discovery)、および分散型マルチテナント認可 (distributed multi-tenant authorization) を提供するOpenStackサービスです。

簡単に言えば、OpenStackにおける認証サービスと考えることができ、すべてのOpenStack APIの場所(エンドポイント)を記録しています。

Keystone のアーキテクチャ

Keystoneは複数の異なる内部サービス(internal service)で構成されており、これらのサービスは通常組み合わせて使用されます。例えば、認証リクエストはまずIdentityサービスを通じてユーザーが提供した認証情報(credentials)を検証し、成功するとTokenサービスを通じてユーザーにトークン(token)を発行します。

Keystoneには以下のサービスが含まれています:

  • Identity
  • リソース
  • Assignment
  • Token
  • Catalog

これらのサービスの機能を一つずつ紹介していきます。

Identity

Identityサービスは、ユーザーとグループの認証情報(credential)の検証サービスを提供します。最も基本的なケースでは、これらの認証情報はIdentityサービスによってバックエンドのデータベースに保存されますが、より複雑なケースでは、LDAPなどの異なるバックエンドを利用してサービスを提供することも選択できます。

ユーザー (Users)

ユーザーは基本的に、独立したAPIユーザーを表します。ユーザーは特定のドメイン(domain)に属している必要があり、デフォルトでは「default」になります。すべてのユーザー名はグローバルで一意である必要はありませんが、同じドメイン内では一意である必要があります。

グループ (Groups)

グループはその名の通り、ユーザーの集合体です。同様に、グループもドメインの下にある必要があり、グローバルで一意ではなく、同じドメイン内でのみ一意となります。

リソース (Resource)

リソースサービスは、プロジェクト(project)とドメイン(domain)に関するデータを提供します。

プロジェクト

プロジェクト(Projects)は、OpenStackにおける所有権の基本単位を表します。OpenStack内のすべてのリソースは特定のプロジェクトによって所有される必要があるためです。ユーザーやグループと同様に、プロジェクト自体も特定のドメインに所有される必要があるため、すべてのプロジェクト名はグローバルで一意ではなく、そのドメイン内で一意となります。

ドメイン

ドメイン(Domain)は、プロジェクト、ユーザー、グループの上位コンテナです。前述の各リソースは一つのドメインによって所有されます。各ドメインは名前空間(namespace)を定義し、その中にはAPIから参照可能な名前属性(name attribute)が存在します。Keystoneはデフォルトのドメインとして「Default」を提供しています。Keystoneにおけるほとんどの属性(attributes)は、そのドメイン内でのみ一意となります。

ドメインの概念は少し複雑です。通常、小規模なデプロイメントでは「default」ドメインのみが使用されますが、大規模なデプロイメントでは複数のドメインを使用して権限を区分する場合があります。

Assignment

Assignment サービスは、role(ロール)と role assignments(ロール割り当て)のデータを提供し、OpenStack の RBAC(ロールベースアクセス制御)を実現します。
実際の権限管理は、各 OpenStack コンポーネントの policy.yaml 設定ファイルで行うことができます。

ロール (Roles)

ロールは、ユーザーが取得できる権限レベルを決定します。ロールはドメインまたはプロジェクトレベルで付与できます。ロールはユーザーまたはグループに付与でき、グループ内のユーザーはグループのロールが持つ権限を継承します。

ロールの割り当て

実際のロールとリソースの関係を記録するデータであり、ロール、リソース、およびアイデンティティ(Identity)の 3 つの要素からなるタプル(tuple)です。

Token

ユーザー認証後にトークンが発行され、その後のサービスへのアクセスはトークンを通じて権限検証が行われます。Token サービスは、トークンの管理と検証を行うサービスです。

Catalog

Catalog サービスは、エンドポイント発見(endpoint discovery)のためのエンドポイントレジストリ(registry)を提供します。基本的には、クラスター内のすべての OpenStack サービスのエンドポイントを記録しています。

まとめ

本日は OpenStack サービスの中核である Keystone を紹介しました。Keystone の概念の多くは少し抽象的ですが、実際に使用してみると理解しやすくなります。次回の記事では、ネットワークサービスを提供する OpenStack Neutron について紹介します。


著作権表示:このブログのすべての記事は、特記のない限りCC BY-NC-SA 4.0ライセンスの下で提供されています。

コメントを残す