OpenStack について学ぶ: アイデンティティー関連コンポーネントの Keystone

この記事では、OpenStack Identity (Keystone) プロジェクトを紹介し、OpenStack のアーキテクチャー全体の中でこのプロジェクトがどのような位置を占めており、どのような機能を実現するのかを説明します。また、このプロジェクトのコンポーネントをインストール、構成、使用する上での要件についても説明します。

John Rhoton, Cloud Computing Strategist, Recursive

Author photoJohn Rhoton は、パブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウド・コンピューティングに焦点を絞り、世界の企業を顧客としたコンサルティングを専門とする技術ストラテジストです。彼はさまざまな業界イベントで、モバイル、ソーシャル・ネットワーキング、仮想化などの新興技術に関する講演を頻繁に行っており、また『Cloud Computing Explained』(2009年)、『Cloud Computing Architected』(2011年) など、6 冊の著作があります。



2014年 2月 06日

この記事で取り上げるのは、他のすべての OpenStack プロジェクトに共通の認証手段を提供する OpenStack Identity です。

マルチユーザー・サービスには、どのユーザーがアプリケーションにアクセスすることができ、どのアクションをそれぞれのユーザーが実行できるかを管理する何らかのメカニズムが必要です。プライベート・クラウドもその例外ではありません。OpenStack では、これらの管理機能を Keystone という独立した 1 つのプロジェクトにまとめることで効率化しています。

Keystone とは OpenStack Identity のプロジェクト名であり、OpenStack Identity は、OpenStack API (アプリケーション・プログラミング・インターフェース) を介してトークン、ポリシー、およびカタログ機能を提供するサービスです。他の OpenStack プロジェクトと同じく、Keystone は抽象化層を表すものであり、実際にユーザー管理機能を実装するわけではありません。代わりにプラグイン・インターフェースを提供することで、組織が現行の認証サービスを利用したり、市場に出ている各種のアイデンティティー管理システムの中から選んだりすることができるようにしています。

Keystone は、認証、ポリシー管理、およびカタログ・サービス関連の OpenStack の機能を統合するものです。これらの機能には、すべてのテナントおよびユーザーの登録、ユーザーの認証と認可用トークンの付与、すべてのユーザーおよびサービスを対象としたポリシーの作成、サービス・エンドポイントのカタログ管理などがあります。アンデンティティー管理システムのコア・オブジェクトはユーザーであり、ユーザーとは OpenStack サービスを使用する個人、システム、またはサービスのデジタル表現です。ユーザーは通常、リソースとアイデンティティー・オブジェクトを分離する「テナント」と呼ばれるコンテナーに割り当てられます。テナントは、顧客、アカウント、あるいは任意の組織単位を表す場合があります。

認証とは、ユーザーの身元を証明するプロセスのことです。Keystone は、機能を呼び出すリクエストが送られてくると、そのリクエストを行っていると主張しているユーザーから送られたものであることを確認します。この検証を行うために、Keystone ではクレデンシャルという形をとる一連の主張をテストします。クレデンシャル・データの顕著な特徴は、クレデンシャル・データには、そのデータを所有するユーザーしかアクセスできないことです。クレデンシャル・データは、そのユーザーしか知らないデータ (ユーザー名とパスワードまたは鍵)、ユーザーが物理的に所有するもの (ハードウェア・トークン)、またはユーザー自身 (虹彩スキャンまたは指紋といった生体認証データ) で構成され得るものです。

OpenStack Identity がユーザーの身元を確認すると、ユーザーにはその身元の裏付けとなるトークンが与えられ、以降のリソース・リクエストにはそのトークンを使用することができます。各トークンには、そのトークンが適用されるリソースの一覧が記載されたスコープが含まれています。トークンが有効な期間は限定されており、特定のユーザーのアクセス権を削除する必要がある場合は、トークンを失効させることもできます。

セキュリティー・ポリシーは、ルール・ベースの認可エンジンによって実施されます。ユーザーが認証された後、次のステップとなるのは、認可レベルを決定することです。Keystone は一連の権限と特権を、ロールと呼ばれる概念でカプセル化します。アイデンティティー・サービスが発行するトークンには、認証済みユーザーが担うことのできるロールのリストが含まれています。このユーザー・ロール一式を、リクエストされたリソース操作一式と照らし合わせて、アクセスを許可または拒否するのは、リソース・サービスの仕事です。

Keystone にはエンドポイントのディスカバリーに使用されるサービス・カタログ・サービスも追加されています。このカタログは、使用可能なサービスとそれぞれの API エンドポイントの一覧を提供します。エンドポイントとは、ユーザーがサービスを使用するためにネットワークでアクセスできるアドレス (URL など) です。OpenStack Compute (Nova) と OpenStack Object Storage (Swift) を含むすべての OpenStack サービスは、ユーザーがリソースをリクエストして操作を行うために使用できるエンドポイントを Keystone に提供します。

アーキテクチャー

アーキテクチャーの点では、Keystone はシンプルです。Keystone はすべての API リクエストを処理して、アイデンティティー、トークン、カタログ、およびポリシーの各サービスを提供します。Keystone は、API ネットワークを介して公開されたフロントエンド・サービスのグループとして編成されています。

  • アイデンティティー・サービスは、認証クレデンシャルを検証し、関連するすべてのメタデータを提供します。
  • トークン・サービスは、ユーザーのクレデンシャルが検証された後の認証リクエストに使用されるトークンの検証および管理を行います。
  • カタログ・サービスは、エンドポイントのディスカバリーに利用できるサービス・レジストリーを提供します。
  • ポリシー・サービスは、ルール・ベースの認可エンジンを公開します。

Keystone の各機能は、異機種混合環境に統合したり、多様な機能を公開したりするためのバックエンド・プラグインをサポートしています。よく使用されているバックエンドの一例を以下に挙げます。

  • キー・バリュー・ストア: インメモリー辞書など、主キーのルックアップをサポートするインターフェースです。
  • memcached: 分散型メモリー・キャッシュ・システムです。
  • SQL (Structured Query Language): データを永続的に保管するために、SQLAlchemy (Python SQL ツールキットおよびオブジェクト・リレーショナル・マッパー) を使用します。
  • PAM (Pluggable Authentication Module): ローカル・システムの PAM サービスを使用して認証を行います。
  • LDAP (Lightweight Directory Access Protocol): LDAP を使用して Active Directory などのバックエンド・ディレクトリーに接続し、ユーザーを認証してロール情報を取得します。

セットアップ

OpenStack のコンポーネントを実際にインストールする手順は、ディストリビューションによっても OpenStack のリリースによっても大きく異なります。通常、OpenStack のコンポーネントはディストリビューションの一部として提供されますが、これらのコンポーネントを使用するには、基本的な作業を完了しておかなければなりません。このセクションでは、必要となる作業の概要を説明します。

システム要件

OpenStack は 64 ビット x86 アーキテクチャーを利用します。それ以外の点では、一般商品化されたハードウェア用に設計されているため、最小システム要件は厳しいものではありません。8GB の RAM を搭載した単一システムがあれば、一連の OpenStack プロジェクトのすべてを実行することができます。やや大規模なインストールでは、Keystone サービスを他のプロジェクト (例えば Nova コントローラー) と同じ場所に配置することができます。ただし、高いスケーラビリティーを持つ実装にするには、アイデンティティー管理専用のシステムを使用するのが賢明です。単純なシステムにする場合は、クアッド・コア CPU、32GB の RAM、2 つのギガビット・ネットワーク・アダプターを用意できれば出発点としては十分です。

インストール

インストール手順はディストリビューションによって異なります。さらに具体的に言うと、どのパッケージ管理ユーティリティーを選択するかによって変わってきます。ほとんどの場合に共通して必要となるのは、リポジトリーの宣言です。例えば、Zypper の場合には、zypper ar を使用して libzypp を宣言します。

リスティングを見るにはここをクリック

# zypper ar -f http://download.opensuse.org/repositories/Cloud:/OpenStack:/Grizzly/SLE_11_SP3/Cloud:OpenStack:Grizzly.repo

次に、必要な Keystone パッケージをインストールします。すべての依存関係は、パッケージ管理ユーティリティーによって自動的にインストールされるはずです。完全なインストール手順は、目的とする構成と OpenStack の当該リースによって異なるため、正式な手順については、必ずインストール・ガイドを調べてください。例として、以下に Debian (例えば Ubuntu)、Red Hat (Red Had Enterprise Linux、CentOS、Fedora)、および openSUSE の場合に使用する主要なコマンドを記載します。

  • Debian: Keystone を Debian ベースのシステム (例えば Ubuntu) にインストールするには、以下のコマンドを使用します。
    sudo apt-get install keystone
    sudo apt-get install python-keystone
    sudo apt-get install python-keystoneclient
  • Red Hat: Red Hat のシステムでは、以下のコマンドを使用します。
    sudo yum install openstack-keystone
    sudo yum install python-keystone
    sudo yum install python-keystoneclient
  • openSUSE: openSUSE のシステムでは、以下のコマンドを使用します。
    sudo zypper install openstack-keystone
    sudo zypper install python-keystoneclient

構成

最も重要な Keystone 構成ファイルは、/etc/keystone/ に置かれている keystone.conf です。Keystone は、[auth] セクションに以下の要素で指定されたすべての認証プラグインを識別します。

  • methods: すべての認証プラグインの名前を一覧にします。
  • <plugin name>: 認証方式それぞれのクラスを指定します。

例:

[auth]
methods = password,token,oauth1
password = keystone.auth.plugins.password.Password
token = keystone.auth.plugins.token.Token
oauth1 = keystone.auth.plugins.oauth1.OAuth

プラグインが独自の構成オプションを登録するための標準メカニズムはありませんが、通常は、構成ファイル内にプラグイン固有のセクションが設けられます。

証明書

公開鍵基盤 (PKI) はスケーラビリティーの高い標準ベースのテクノロジーであることから、多くの組織が PKI に移行するようになっています。PKI の利点の 1 つは、信頼の委任が可能であることです。信頼の委任は、ID 連携に不可欠であるだけでなく、一般に認められた信頼できる認証局 (CA) へ改ざんが防止された方法でリンクすることによって、真正性を証明しなければならないことも意味します。

実際面でこれが意味するのは、公開鍵に CA 認定の X.509 証明書による署名が必要であるということです。完全に内部だけの実装では、keystone-manage を使用して自己署名証明書を生成することができますが、連携環境の場合、外部 CA からの証明書が必要になることがあります。

外部 CA によって発行された証明書をインストールするには、以下の作業が必要です。

  • 外部 CA に署名付き証明書を要求します。
  • 証明書と秘密鍵の両方を PEM (Privacy Enhanced Email) フォーマットに変換します。
  • .pem ファイルを証明書ディレクトリーにコピーすることによって、外部で署名された証明書をインストールします。

使用シナリオ

アイデンティティー管理はサポート機能であり、その役目は、他の大部分の OpenStack プロジェクトほど明白ではありません。アイデンティティー管理については、サービスのディスカバリーを単純化するとともに、セキュリティー・ポリシー施行のための統一手段を提供する、イネーブラーとして見なすべきです。

Keystone がどのように使用されるかを明らかにするには、使用シナリオを 2 つの部分に分けるのがおそらく最も簡単な方法でしょう。Keystone の管理機能は、ユーザーとプロジェクトを定義して、適切な認可を与えます。環境の構成が完了すると、プロジェクトやアプリケーションは Keystone とインターフェースをとって、照会を行ったり、アクセス制御を検証したりすることができるようになります。

管理

まず、使用シナリオの最初の部分から説明します。この部分は Horizon ダッシュボードにマッピングされているため、比較的簡単に理解することができます。シナリオのこの部分では、管理者がプロジェクトとユーザーを作成することができます。また、ユーザーにロールを割り当て、管理しやすいようにグループにまとめることができます。

  1. 通常、最初のステップとなるのは、プロジェクトを作成することです。それにはまず、管理者として OpenStack Dashboard にログインして、ナビゲーション・ペインで、「Identify Panel (アイデンティティー・パネル)」の下に表示されている「Projects (プロジェクト)」 > 「Create Project (プロジェクトの作成)」を順にクリックします。
    図 1. 新規プロジェクトを作成する
    プロジェクトの作成方法を示す「Create Project (プロジェクトの作成)」ウィンドウの画像
  2. この時点で必要なのは、プロジェクトの名前と説明だけです。プロジェックトには少なくとも 1 人のユーザーが必要であるため、続いて「Identify Panel (アイデンティティー・パネル)」の下にある「Users (ユーザー)」 > 「Create User (ユーザーの作成)」を順にクリックします。
    図 2. ユーザーを作成する
    ユーザーの作成方法を示す「Create User (ユーザーの作成)」ウィンドウの画像
  3. プロジェクトを編集するために、「Identify Panel (アイデンティティー・パネル)」の下にある「Projects (プロジェクト)」 > 「Edit Project (プロジェクトの編集)」を順にクリックします。
    図 3. プロジェクトを編集する
    プロジェクトの編集方法を示す画像

    クリックして大きなイメージを見る

    図 3. プロジェクトを編集する

    プロジェクトの編集方法を示す画像
  4. 「Edit Project (プロジェクトの編集)」ウィンドウの「Project Members (プロジェクト・メンバー)」タブで、プロジェクト・メンバーを編集したり、メンバーのロールを変更したりすることができます。
    図 4. プロジェクト・メンバーとメンバーのロールを編集する
    プロジェクト・メンバーとメンバーのロールの編集方法を示す画像
  5. 「Quota (クォータ)」タブでは、プロジェクトに対して制限を指定することもできます。制限の指定は、マルチテナント環境では特に有効であり、1 つのプロジェクトが過剰にリソースを使用してしまい、同じインフラストラクチャーで実行されている他の重要なサービスがリソース不足に陥ってしまう、といったことがないようにすることができます。
    図 5. プロジェクトの制限を指定する
    「Quota (クォータ)」タブの画像

    クリックして大きなイメージを見る

    図 5. プロジェクトの制限を指定する

    「Quota (クォータ)」タブの画像

認証

シナリオのもう 1 つの部分は、実行時のサービスの認証です。例えば、OpenStack Swift をオブジェクト・ストレージとして使用しているアプリケーションがあるとします。このアプリケーションが OpenStack コンピュート・インスタンスの一部として実行されているかどうかに関わらず、認証を行うことが可能でなければなりません。つまり、有効なクレデンシャルにアクセスする必要があるということです。

このアプリケーションに最初に必要なことは、認証サービスに接続して、自身のクレデンシャルを提供することです。これにより、アプリケーションは、すべてのコンテナーおよびオブジェクトの操作のために OpenStack Object Storage に渡すことができる認証トークンを受け取ります。アプリケーションの接続パラメーターのすべてが事前に構成されているとは限りませんが、その場合には接続パラメーターも Keystone から取得することができます。例えば、Keystone に照会してアクセス可能なプロジェクトをディスカバーし、必要なサービスの URL をリクエストすることができます。


まとめ

Horizon ユーザー・インターフェースを使用する限り、ユーザー管理は難しくありません。内部プロセスだけでなく、Active Directory などの他のユーザー・リポジトリーや任意の LDAP ディレクトリーとの必要な統合も、このユーザー・インターフェースの背後に隠されます。

参考文献

学ぶために

製品や技術を入手するために

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, セキュリティ
ArticleID=961180
ArticleTitle=OpenStack について学ぶ: アイデンティティー関連コンポーネントの Keystone
publish-date=02062014