fbpx

CL LAB

HOME > Chef > CL LAB > knife bootstrapにおけるvalidatorなしでのブートストラップ #getchef

knife bootstrapにおけるvalidatorなしでのブートストラップ #getchef

 ★ 8

Chef Client 12.1.0にて、knife bootstrapコマンドがvalidatorなしのブートストラップをサポートしました。本稿ではこれが一体どういうことなのか、実際に試してみます。

おさらい: validatorとは

そもそもvalidatorとは何でしょうか。簡単に言えば、NodeをChef Serverに登録する際に使う秘密鍵です。NodeがChef Serverに登録できたら、後はNodeごとに生成されたClientキーによって認証を行うため、そのNodeではvalidatorは必要なくなります。validatorをそのままにしておくと万が一Nodeから流出した際にChef Serverへの不正なアクセスが可能になってしまうので、validatorを削除するためのchef-client::delete_validation Recipeもあります。

validatorありでのブートストラップ

まず、これまで通り、validatorありでのブートストラップを行ってみます。

d-higuchi@ws:~/chef-repo$ knife bootstrap node1.example.jp -x ubuntu -P ubuntu --sudo
Doing old-style registration with the validation key at /home/d-higuchi/chef-repo/.chef/creationline-validator.pem...
Delete your validation key in order to use your user credentials instead

Connecting to node1.example.jp
    :
    (省略)
    :

「Doing old-style registration with the validation key」というメッセージが出ています。また、どうするべきかの手順も示されていますが、通常通りにブートストラップが進んでいきます。

validatorなしでのブートストラップ

では、実際にvalidatorなしでのブートストラップを行ってみます。.chef/knife.rb設定ファイルは次のようになっているとします。Chef Starter Kitそのままです。

d-higuchi@ws:~/chef-repo$ cat .chef/knife.rb
# See https://docs.getchef.com/config_rb_knife.html for more information on knife configuration options

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "d-higuchi"
client_key               "#{current_dir}/d-higuchi.pem"
validation_client_name   "creationline-validator"
validation_key           "#{current_dir}/creationline-validator.pem"
chef_server_url          "https://chef-server.example.jp/organizations/creationline"
cookbook_path            ["#{current_dir}/../cookbooks"]
d-higuchi@ws:~/chef-repo$

Chef Client 12.1.0リリース記事によると、

validationキーを削除することで有効になります。validationキーが存在しないと、knife bootstrapはブートストラップするNodeのClientを作成するためにUserのキーを利用します。

とのことなので、.chef/ディレクトリからvalidator秘密鍵ファイルを削除します。ここではvalidator秘密鍵ファイルcreationline-validator.pemをホームディレクトリに移動しています。

d-higuchi@ws:~/chef-repo$ mv .chef/creationline-validator.pem ~
d-higuchi@ws:~/chef-repo$

そして、通常通りにknife bootstrapコマンドでブートストラップしてみます。

d-higuchi@ws:~/chef-repo$ knife bootstrap node1.example.jp -x ubuntu -P ubuntu --sudo
Creating new client for node1.example.jp
Creating new node for node1.example.jp
Connecting to node1.example.jp
node1.example.jp
node1.example.jp Installing Chef Client...
    :
    (省略)
    :
node1.example.jp Thank you for installing Chef!
node1.example.jp Starting first Chef Client run...
node1.example.jp Starting Chef Client, version 12.2.1
node1.example.jp resolving cookbooks for run list: []
node1.example.jp Synchronizing Cookbooks:
node1.example.jp Compiling Cookbooks...
node1.example.jp [2015-04-13T11:57:12+09:00] WARN: Node node1.example.jp has an empty run list.
node1.example.jp Converging 0 resources
node1.example.jp
node1.example.jp Running handlers:
node1.example.jp Running handlers complete
node1.example.jp Chef Client finished, 0/0 resources updated in 1.677529776 seconds
d-higuchi@ws:~/chef-repo$

ブートストラップできました。NodeとClientがChef Serverに登録されています。

d-higuchi@ws:~/chef-repo$ knife node list
d-higuchi
node1.example.jp
d-higuchi@ws:~/chef-repo$ knife client list
creationline-validator
node1.example.jp
d-higuchi@ws:~/chef-repo$

Nodeにはvalidator秘密鍵ファイルは存在していません。

d-higuchi@node1:~$ ls -la /etc/chef/
合計 24
drwxr-xr-x  3 root root 4096  413 11:57 .
drwxr-xr-x 90 root root 4096  413 11:57 ..
-rw-------  1 root root 1676  413 11:57 client.pem
-rw-r--r--  1 root root  223  413 11:57 client.rb
-rw-r--r--  1 root root   16  413 11:57 first-boot.json
drwxr-xr-x  2 root root 4096  413 11:57 trusted_certs
d-higuchi@node1:~$

Chef Client 12.1より以前なら、validator秘密鍵が存在してなければ、

d-higuchi@ws:~/chef-repo$ knife bootstrap node1.example.jp -x ubuntu -P ubuntu --sudo
Connecting to node1.example.jp
ERROR: Errno::ENOENT: No such file or directory @ rb_sysopen - /home/d-higuchi/chef-repo/.chef/creationline-validator.pem
d-higuchi@ws:~/chef-repo$

というエラーとなります。

一応、Organizationに所属していないbob Userでブートストラップできないことを確認してみましょう。

d-higuchi@ws:~/chef-repo$ knife user list
alice
d-higuchi
d-higuchi@ws:~/chef-repo$
bob@ws:~/chef-repo$ ls -la .chef/
合計 20
drwxr-xr-x 3 bob bob 4096  413 12:23 .
drwxrwxr-x 5 bob bob 4096  410 11:15 ..
-rw-r--r-- 1 bob bob 1679  410 11:16 bob.pem
-rw-r--r-- 1 bob bob  578  410 11:30 knife.rb
drwxrwxr-x 2 bob bob 4096  4月  9 15:31 trusted_certs
bob@ws:~/chef-repo$

次のように、そもそもOrganizationに所属していないため失敗しました。

bob@ws:~/chef-repo$ knife bootstrap node1.example.jp -x ubuntu -P ubuntu --sudo
ERROR: You authenticated successfully to https://chef-server.example.jp/organizations/creationline as bob but you are not authorized for this action
Response:  'bob' not associated with organization 'creationline'
bob@ws:~/chef-repo$

さらに、Organizationに所属しているalice Userの秘密鍵を壊してみて、ブートストラップできないことを確認してみましょう。

alice@ws:~/chef-repo$ cp ~bob/chef-repo/.chef/bob.pem .chef/alice.pem
alice@ws:~/chef-repo$

次のように、そもそも鍵が合わないため失敗しました。

alice@ws:~/chef-repo$ knife bootstrap node1.example.jp -x ubuntu -P ubuntu --sudo
ERROR: Failed to authenticate to https://chef-server.example.jp/organizations/creationline as alice with key /home/alice/chef-repo/.chef/alice.pem
Response:  Invalid signature for user or client 'alice'
alice@ws:~/chef-repo$

このように、validator秘密鍵なしであっても、適当にブートストラップできているわけではないことがわかりました。

まとめ

validatorなしでのブートストラップがどのようなものか、実際に試してみました。わざわざvalidator秘密鍵を準備したり配布したりする必要がなく、後で削除する必要もなくなり、手間の軽減と安全性の向上が図られています。Chef Client 12.1.0以降を利用しているのなら、validatorなしでのブートストラップに移行してしまうといいでしょう。もしくはChef Client 12.1.0以降への移行を検討してください。

CL LAB Mail Magazine

CL LABの情報を逃さずチェックしよう!

メールアドレスを登録すると記事が投稿されるとメールで通知します。

メールアドレス: 登録

※登録後メールに記載しているリンクをクリックして認証してください。

Related post