[和訳] ちょっとしたヒント: プロビジョナNodeの作成 #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Quick Tip: Create a Provisioner Node (2015/02/10) の和訳です。
本記事(訳注:元記事)は jtimberman’s Code Blog です。
本稿は、Chef Serverクラスタを構築するためのChef ProvisioningについてのChefConfのプレゼンの下準備となります。これは以前のブログ記事を基にしています。以前はChef Serverとしてchef-zeroを用いていましたが、今回はHosted Chefを用いていきます。
Chef ProvisioningのためのRecipeが動作するためには、プロビジョニングNode (chef-clientを実行するNode)がChef Server上のオブジェクトを管理するための適切な権限を持っている必要があります。これはACLがまったくないchef-zeroでは簡単です。しかし、Hosted Chefでは、普通のChef Serverと同じように、ACLによりNodeのAPI Clientが他のNodeやAPI Clientを変更することを認めていません。
幸運にも、knife-aclプラグインによって、knifeを用いる必要のあるすべての作業を行うことができます。本稿では、プロビジョニングNodeのためのGroupを作成し、マシンのNodeとClientを作成するChef ProvisioningのRecipeのための適切な権限をGroupに与えます。
まず初めに、ChefDKとそれのRuby環境を用いて、Gemをインストールします。
chef gem knife-acl
次に、新しいGroupを作成するknife groupサブコマンドを用います。GroupはUserとAPI Clientの集まりです。デフォルトでは、Hosted ChefのOrganizationはadmins、billing-admins、clients、usersを持ちます。ではprovisionersを作成しましょう。
knife group create provisioners
Chef Serverのロールベースアクセスコントロール(RBAC)システムが、Organizationの各種オブジェクトに対する、読み込み、作成、更新、認可、削除の権限を割り当てます。
Containersはオブジェクトの他の形式のための特殊な入れ物で、この場合はClientとNode Containersのために権限を追加する必要があります。これにより、Chef ProvisioningのRecipeのmachine ResourceにChefにオブジェクトを作成させることができるようになります。
for i in read create update grant delete
do
knife acl add containers clients $i group provisioners
done
for i in read create update grant delete
do
knife acl add containers nodes $i group provisioners
done
次に、Chef Serverと認証するために、Chef ProvisioningのNodeによって使われるAPI Clientが必要です。またNodeも同じように作成する必要があります。デフォルトではClientは、同じ名前を持つNode Objectに対する権限を自動的に持ちます。
knife client create -d chefconf-provisioner > ~/.chef/chefconf-provisioner.pem
knife node create -d chefconf-provisioner
最後に、先に作成したprovisioners Groupに、新しいAPI Clientを追加する必要があります。まず、Organization内の動作者のひもづけをする必要があります。その後、GroupにClientを追加できます。
knife actor map
knife group add actor provisioners chefconf-provisioner
knife actor mapコマンドは次のようなYAMLファイルを生成します。
---
:user_map
:users:
jtimberman: 12345678901234567890123456780123
:usags:
12345678901234567890123456780123: jtimberman
:clients:
chefconf-provisioner: chefconf-provisioner
jtimberman-chefconf-validator: jtimberman-chefconf-validator
これはUserとUSAG (User Specific Association Group)をひもづけし、Clientのリストを格納しています。詳しい情報はknife-acl READMEを参照してください。
この時点で、Chef Provisioningのmachine Resourceを用いるためのChef Serverで用いられる秘密鍵を~/.chefに持つNodeを持ちました。Node Objectに必要な追加作業を行うこともできます。例えば、Chef Vaultの要素として秘密情報を作成するなどです。
knife vault create secrets dnsimple -M client -J data_bags/secrets/dnsimple.json -A jtimberman -S 'name:chefconf-provisioner'
ここまでの全コマンドは次のようになります。
chef gem knife-acl
knife group create provisioners
for i in read create update grant delete
do
knife acl add containers clients $i group provisioners
done
for i in read create update grant delete
do
knife acl add containers nodes $i group provisioners
done
knife client create -d chefconf-provisioner > ~/.chef/chefconf-provisioner.pem
knife node create -d chefconf-provisioner
knife actor map
knife group add actor provisioners chefconf-provisioner
knife vault create secrets dnsimple -M client -J data_bags/secrets/dnsimple.json -A jtimberman -S 'name:chefconf-provisioner'
zeroでないChef Serverを用いてChef Provisioningを用いる一助となれば幸いです。何か質問があれば、ChefConfにてお問い合わせください!