*

Keystone認証の利用 ~ Swiftによるオブジェクトストレージシステムの構築(9)

公開日: 最終更新日:2014/07/25  |  By  |  Object Storage, OpenStack, Swift

by You Yamagata 2013.05.13

(Last updated 2013.06.05)

(Swift関連の記事の一覧は インデックス をご覧ください)

Grizlly 版での新機能の説明が途中ですが、社内事情で Keystone を統合した Swift 環境が必要となったため、今回は swift+keystone をサーバ1台にインストール方法について解説します。

1. OpenStack Keystone とは?

OpenStack Keystone は OpenStack のコアプロジェクトの一つであり、認証機能を提供するシステムです。
OpenStackが提供する各サービスは Keystone により認証処理を一元的に行うことができます。
Keystone を使用する場合の Swift の認証処理は以下のようになります。

  1. クライアントが Keystoneサーバに認証処理をリクエストする。
  2. Keystone サーバが認証結果をクライアントに返す。
    認証がOKなら認証トークンとSwiftのStorge-URL を返す。
  3. クライアントはStorage-URLに基づき Swift にアクセスする。この時取得した認証トークンを送る。
  4. Swift の Proxyサーバはクライアントから送られた認証トークンが正しいか Keystone に確認し OK ならクライアントからのリクエストを処理する。
従来 temp_auth の場合は Swift の Proxyサーバが認証処理を兼ねていましたが、その処理が Keystone サーバに移ったと考えると良いと思います。

2. インストール

連載の中ですでにサーバ1台で Swift を構築する手順を紹介しました。
今回はサーバ1台に Swift と Keystone の両方をインストールします。
対象 OSは Ubuntu 12.0.4 です。OpenStack は Grizzly版です。
サーバは仮想環境のもので構いませんがメモリは 1.5GBほど用意してください。
手順は以前に紹介したGrizzly 版 のものとあまり変わりません。
使用する Chefのレシピの違いと最後に Keystone の初期化処理が追加されたというのが主な変更点になります。

2.1. Fabric & git のインストール

$ sudo apt-get install python-pip python-dev gcc
$ sudo pip install fabric  
$ sudo apt-get install git
$ fab --version
Fabric 1.6.0
Paramiko 1.10.1
$ git --version
git version 1.7.9.5   

apt で pip をインストールし、pip を使って Fabric をインストールします。

2.2. chef-solo のインストール

$ git clone https://github.com/yoyama/fabric_misc.git  
$ cd fabric_misc/chef_install/ubuntu/  
$ fab -H localhost -f ./fab_chef.py install_chefsolo  
$ chef-solo -v  
Chef: 10.18.2  
chef-solo インストール用の fabric スクリプトを github より取得し、実行することで chef-client, chef-solo がインストールされます。

2.3. Swift & Keystone のインストール

$ git clone -b release03_grizzly+keystone git://github.com/yoyama/chef-swift-recipes.git  
$ cd chef-swift-recipes  
$ vi solo.rb  
...  
cookbook_path "/home/yoyama/chef-swift-recipes/cookbooks"  
  
$ vi cookbooks/saio_pkg/attributes/default.rb  
...  
  
   
$ sudo chef-solo -c solo.rb -j node.json 2$&1 | tee /tmp/chef.log  
git で keystone用の chef cookbook を取得します。(1行目)
solo.rb を編集して cookbook のパスを正しいパスに変更します(3~6行目)
このレシピではデフォルトで swift/keystone は ローカルからのアクセスのみが可能となっています。ネットワーク経由で接続する場合は 7行目のように default.rb (属性情報) を以下のように編集してください。
 ...  
 default[:swift][:proxy_host]= "<IPaddress>"  
 ...  
 default[:keystone][:ks_auth_host_external] = '<IPaddress>'  
 ...     

準備が出来たら chef-solo を実行してインストールを実行します。(11行目)※ 実行に失敗する場合

下記のように swift, python-swiftclient, keystone, python-keystoneclient パッケージのインストールに失敗する場合 CloudArchive のパッケージがバージョンアップされ該当バージョンがないということが考えられます。

 [Wed, 05 Jun 2013 17:13:24 +0900] FATAL: Stacktrace dumped to /tmp/chef-stacktrace.out  
 [Wed, 05 Jun 2013 17:13:24 +0900] FATAL: Chef::Exceptions::Exec: package[keystone] (saio_pkg::swift_keystone line 20) had an error: Chef::Exceptions::Exec: apt-get -q -y install keystone=1:2013.1-0ubuntu1~cloud0 returned 100, expected 0  

その場合上記の default.rb から以下の行を確認しバージョンを変更してください。

 default[:swift][:pkg_version] = "1.8.0-0ubuntu1~cloud0"  
 default[:swift][:client_pkg_version] = "1:1.3.0-0ubuntu1~cloud0"  
   
 default[:keystone][:pkg_version] = "1:2013.1-0ubuntu1.1~cloud0"  
 default[:keystone][:client_pkg_version] = "1:0.2.3-0ubuntu2~cloud0"  
   
各パッケージのバージョンは apt-cache show "パッケージ名"  で確認することができます。

複数のバージョンが表示されますが一番新しいものを確認して上記の値を変えて再度 chef-solo を実行してください。

 

2.4 Keystone の初期化・起動

上記のchef-solo によるプログラムのインストールが成功したら次は Keystone のDB(mysql) を構築します。
root ユーザのホームディレクトリに keystone_init というディレクトリが出来ています。
root になって初期化用のスクリプトを実行します。
 $ sudo su -  
 # cd keystone_init  
 # ./init_keystonedb.sh  
 # ./init_data.sh  

エラーなく実行できたら keystone CLI でアクセスを試みます。
# . .keystone_rc  
# keystone user-list  
+----------------------------------+--------+---------+-------+  
|        id                        | name   | enabled | email |  
+----------------------------------+--------+---------+-------+  
| d4323669c1f9460ba8252a69385803ce | admin  |  True   |       |  
| 640856716ab24b2f85ad455e928f03c9 | ec2    |  True   |       |  
| ccd0224f501040e58d534025a11b65cc | glance |  True   |       |  
| a05b73e5bb5a40959cab52e827e3962c | nova   |  True   |       |  
| 3b0f7c35bca24a55bb4934ae8ca39a2e | swift  |  True   |       |  
+----------------------------------+--------+---------+-------+  
  
# keystone tenant-list  
+----------------------------------+---------+---------+  
|        id                        |  name   | enabled |  
+----------------------------------+---------+---------+  
| a7708511f2fc40909634ce1c176600c2 |  demo   |  True   |  
| 0db29431e401447fa8d9cea982dc4341 | service |  True   |  
+----------------------------------+---------+---------+  
問題が無ければ実際に認証処理を試します。
# ./get_token.sh  
...  
{  
  "access": {  
    ....  
    "serviceCatalog": [  
      ....  
      {  
        "endpoints": [  
           {  
             "adminURL": "http://10.10.10.193:8080/v1",  
             "id": "7c0db41a35e449caa26ec52d584adb5f",  
             "internalURL": "http://10.10.10.193:8080/v1/AUTH_a7708511f2fc40909634ce1c176600c2",  
             "publicURL": "http://10.10.10.193:8080/v1/AUTH_a7708511f2fc40909634ce1c176600c2",  
             "region": "RegionOne"  
           }  
         ],  
         "endpoints_links": [],  
         "name": "swift",  
         "type": "object-store"  
       },  
       ....  
     ],  
     "token": {  
       "expires": "2013-05-03T07:41:24Z",  
       "id": "f85a3ab610124dcc84666d8bb2360112",  
       "issued_at": "2013-05-02T07:41:24.921769",  
       "tenant": {  
         "description": "Default Tenant",  
         "enabled": true,  
         "id": "a7708511f2fc40909634ce1c176600c2",  
         "name": "demo"  
       }  
     },  
     "user": {  
       "id": "d4323669c1f9460ba8252a69385803ce",  
       "name": "admin",  
       "roles": [  
         {  
           "name": "admin"  
         }  
       ],  
       "roles_links": [],  
       "username": "admin"  
     }  
   }  
 }                      
   
上記のようにJSON形式で正しくデータが取得できればKeystone の設定は完了です。

2.5 Swift の起動・動作確認

それでは Swift のシステムを起動して swift CLI でアクセスします。
 $ sudo /usr/bin/swift-init all restart  
   ...
 $ swift -V 2.0 -A http://10.10.10.193:5000/v2.0 -U demo:admin -K abcd01234 stat  
   Account: AUTH_a7708511f2fc40909634ce1c176600c2  
 Containers: 0  
   Objects: 0  
    Bytes: 0  
   
swift CLI の実行は認証システムが Keystone に変わったため 若干引数が変更されています。
まず -V 2.0 により認証が Keystone であることを指定します。
Keystone は 5000番port で listen しています。また URL は /v2.0 を指定します。
-U <Account>:<User>  -K <Key> は従来通りです。Keystone におけるテナント(プロジェクト)が Swift のアカウントになります。

3. Keystone の操作

keystone の詳細については省略します。ここでは temp_auth で使用していたアカウント:ユーザ test:tesr を使えるようにテナント、ユーザの追加、並びに role の設定について説明します。
まず keystone CLI を使えるように2.4 の場合と同様に root になり .keystone_rc により環境変数を設定します。
 $ sudo su -  
 $ cd keystone_init  
 $ . .keystone_rc  
テナント test を作成します。

ユーザ tester を作成します。
 # keystone tenant-create --name test  
 +-------------+----------------------------------+  
 |  Property   |       Value                      |  
 +-------------+----------------------------------+  
 | description |                                  |  
 |  enabled    |        True                      |  
 |   id        | 7cc79d03d9f542a9ab7090a0dc59ec6f |  
 |   name      |        test                      |  
 +-------------+----------------------------------+  
ロール Member を作成します。
 # keystone role-create --name=Member  
 +----------+----------------------------------+  
 | Property |       Value                      |  
 +----------+----------------------------------+  
 |  id      | 395d239cce5c4a18a3ed9f757834b9ed |  
 |  name    |       Member                     |  
 +----------+----------------------------------+  
最後に tester:test にロール Member を割り当てます。
–user/–role/–tenant の指定は id で行います。
 # keystone user-role-add --user 9925613736f041e59e9c978bef4c0c21 --role 395d239cce5c4a18a3ed9f757834b9ed --tenant 7cc79d03d9f542a9ab7090a0dc59ec6f  
実際にアクセスして確認します。
 $ swift -V 2.0 -A http://10.10.10.193:5000/v2.0 -U test:tester -K testing stat  
   Account: AUTH_7cc79d03d9f542a9ab7090a0dc59ec6f  
 Containers: 0  
   Objects: 0  
    Bytes: 0  
上記のように test:tester で swift にアクセスできるようになりました。
注意点として アカウント名が temp_auth の時の AUTH_test ではなく AUTH_<tenant_id> に
なっています。
なお、これ以後にアカウントを追加する場合は Member ロールの作成は必要ありません。
user-role-add を呼ぶときに既存のMemberロールのIDを指定してください。
以上簡単ですが Swift + Keystone の構築について説明しました。

関連記事

blog-ocata

Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプロイして触ってみたいです。 前

記事を読む

image

OpenStack Summit Portland Quick レポート

by hasegawa 2013.04.172013年4月15日〜18日にかけて米国のオレゴン州ポー

記事を読む

no image

Ceilometer によるメータリング機能の導入 ~ Swiftによるオブジェクトストレージシステムの構築(11)

by You Yamagata 2013.10.18 (Swift関連の記事の一覧は 

記事を読む

tokyo2

OpenStack Summit in Paris (Day2)

by Ikuo Kumagai (@kumagai19o) 引き続き、OpenStack Su

記事を読む

affinity_swift-get-node

Swift のグローバルクラスタ(2) affinity の設定

Swift のグローバルクラスタ(2) affinity 山縣です。Havana 版(1.10.0)

記事を読む

no image

Nova Availability Zone と Cinder Availability Zone

OpenStack 担当 石川です。 実際に自分が使うか使わないかは置いておき、気になったオプ

記事を読む

no image

INDEX: OpenStack Swift

by You Yamagata 2014.4.15Swiftによるオブジェクトストレージシステムの構

記事を読む

no image

LVM上にインスタンスを作成する

OpenStack 担当 石川です。 実際に自分が使うか使わないかは置いておき、気になったオプ

記事を読む

no image

CLIによるSwiftへのアクセス(前編) ~ Swiftによるオブジェクトストレージシステムの構築(3)

by yamagata 2013/1/30(Swift関連の記事の一覧はこちらをご覧ください)(2/

記事を読む

ODT2015logo

OpenStack Days Tokyo 2015

来る2月3日,4日にはOpenStack Days Tokyo 2015が開催されます。 日本国内

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑