Upload
yukihiko-sawanobori
View
3.284
Download
0
Embed Size (px)
Citation preview
マニアックツール紹介
2015年11月23日 第2回関西ITインフラ系勉強会
@sawanoboly(HiganWorks LLC, Opsrock LLC)
• Knife-Zero(構成管理) • InSpec (テストスイート)
HiganWorks, Opsrockについて
2
アプリケーション/サービスのための プラットフォーム構築や運用の自動化を テーマに活動
ChefやServerspec等、インフラコードを取り扱うソリューションを提供
3
著書など関わった書籍
(最近の)担当範囲•アプリケーションは誰かが用意 • それが動作するプラットフォーム全般 • エンドユーザへの配信関係全般 • あとリポジトリとかCIとかデプロイ
•環境チョイスには節操なし
4
今日の話•Knife-Zero (Chefのプラグイン) •自分で作ってるから
•InSpec •新しいから
5
構成管理ツール Knife-Zero
(Chefのプラグイン)
(一応)Chefについて
7
(一応)Chefについて•米Chef Incが開発している構成管理ツール。 •(主に)OS管理権限があるサーバの情報収集。 •Recipeによる定義ベースの構成変更。
7
(一応)Chefについて•米Chef Incが開発している構成管理ツール。 •(主に)OS管理権限があるサーバの情報収集。 •Recipeによる定義ベースの構成変更。•派生プロジェクトがとても多い。 •最近はエンプラ・IT部門向けに強化中・・?
7
Knife-Zeroの話のまえに 前提知識として
Chefをつかう環境の話を
なんかしらサーバがあります
9
Server
なんかしらサーバがあります
9
Server
原初のChef
なんかしらサーバがあります
9
Server
原初のChef
ローカルを変更
Client/ServerとSoloへ
10
Server
Client/ServerとSoloへ
10
Server
Chef-Server
Client/ServerとSoloへ
10
Server
Chef-Server 情報集約
Client/ServerとSoloへ
10
Server
Chef-Client
Chef-Server 情報集約
Client/ServerとSoloへ
10
Server
Chef-Client
Chef-Server 情報集約
• 情報収集と提供 • 構成の変更
Client/ServerとSoloへ
10
Server
Chef-Client
Chef-Server 俺らの端末情報集約
• 情報収集と提供 • 構成の変更
Client/ServerとSoloへ
10
Server
Chef-Client
Chef-Server 俺らの端末情報集約
一括で管理
• 情報収集と提供 • 構成の変更
Client/ServerとSoloへ
10
Server
Chef-Client
Chef-Server
Server
原初のChef
俺らの端末情報集約
一括で管理
• 情報収集と提供 • 構成の変更
Client/ServerとSoloへ
10
Server
Chef-Client
Chef-Server
Server
原初のChef
俺らの端末情報集約
一括で管理
• 情報収集と提供 • 構成の変更
Chef-Solo
Remote(Solo) => Knife-Solo
11
Server
Chef-Client
Chef-Server
Server
Chef-Solo
俺らの端末
Remote(Solo) => Knife-Solo
11
Server
Chef-Client
Chef-Server
Server
Chef-Solo
俺らの端末リモートで Soloしよう
Remote(Solo) => Knife-Solo
11
Server
Chef-Client
Chef-Server
Server
Chef-Solo
俺らの端末Knife-Solo
リモートで Soloしよう
Remote(Solo) => Knife-Solo
11
Server
Chef-Client
Chef-Server
Server
Chef-Solo
俺らの端末Knife-Solo
リモートで Soloしよう
ファイル転送して Chef-Soloを実行 ※プロビジョン特化
Knife-Soloなら 知ってる人?
14
わりと近くにいらっしゃる
話をもどします
Server
C/S環境にローカルモード追加
16
Server
Chef-Client
Chef-Server
Server
C/S環境にローカルモード追加
16
Server
Chef-Client
Chef-Server
Chef-Zero
Server
C/S環境にローカルモード追加
16
Server
Chef-Client
Chef-Server
Chef-Zero
カレントディレクトリ(等)を 使用する簡易Chef-Server。 Client実行中だけ起動。
Server
C/S環境にローカルモード追加
16
Server
Chef-Client
Chef-Server
Chef-Zero
カレントディレクトリ(等)を 使用する簡易Chef-Server。 Client実行中だけ起動。
Chef-Serverと同じように TCP/IP+HTTPで通信
あ、TCPじゃん。
インフラ系の方ならば 身に覚えがあるでしょうが
18
インフラ系の方ならば 身に覚えがあるでしょうが
18
インフラ系の方ならば 身に覚えがあるでしょうが
•TCP Listenしたら、どこまでもトンネルを引っ張っられる。
18
Server
Chef-Zeroを手元で起動してみた
19
Server
Chef-Client
Chef-Server 俺らの端末
Server
Chef-Zeroを手元で起動してみた
19
Server
Chef-Client
Chef-Server 俺らの端末Chef-Zero
Server
Chef-Zeroを手元で起動してみた
19
Server
Chef-Client
Chef-Server 俺らの端末Chef-Zero
SSHでForward
Server
Chef-Zeroを手元で起動してみた
19
Server
Chef-Client
Chef-Server 俺らの端末Chef-Zero
SSHでForward
TCP/IP+HTTPで通信
Server
Chef-Zeroを手元で起動してみた
19
Server
Chef-Client
Chef-Server 俺らの端末Chef-Zero
SSHでForward
Knife-Zero
TCP/IP+HTTPで通信
以上をふまえて Knife-Zeroの話をします
つかいかた
21
つかいかた•bootstrap
21
つかいかた•bootstrap•対象のサーバ(以下Node)にChefをインストール
21
つかいかた•bootstrap•対象のサーバ(以下Node)にChefをインストール•情報を収集してローカルに保存
21
つかいかた•bootstrap•対象のサーバ(以下Node)にChefをインストール•情報を収集してローカルに保存•converge
21
つかいかた•bootstrap•対象のサーバ(以下Node)にChefをインストール•情報を収集してローカルに保存•converge•Chefを実行してくる
21
つかいかた•bootstrap•対象のサーバ(以下Node)にChefをインストール•情報を収集してローカルに保存•converge•Chefを実行してくる•リモートのChefバージョンを上げ下げする
21
Knife-Zeroでよかったこと
22
Knife-Zeroでよかったこと•SSH x 管理権限で触れるサーバの台帳(構成管理)が作れる&コードで管理をしやすくなった。
22
Knife-Zeroでよかったこと•SSH x 管理権限で触れるサーバの台帳(構成管理)が作れる&コードで管理をしやすくなった。•C/S環境向けのレシピが使いやすくなった。
22
Knife-Zeroでよかったこと•SSH x 管理権限で触れるサーバの台帳(構成管理)が作れる&コードで管理をしやすくなった。•C/S環境向けのレシピが使いやすくなった。•ファイルの転送は必要分だけなので、わりと早い。
22
Knife-Zeroでよかったこと•SSH x 管理権限で触れるサーバの台帳(構成管理)が作れる&コードで管理をしやすくなった。•C/S環境向けのレシピが使いやすくなった。•ファイルの転送は必要分だけなので、わりと早い。•(リソースが許す限り)並行に変更や情報収集が実行できる。
22
詳しくはドキュメントへ•knife-zero.github.io •2カ国語サポート (日本語・英語風言語) •Webの紹介記事から全然リンクされないので検索に出てきづらい。 (君らなんで公式あんのにリンク貼らんのさ…)
•Chefの機能としては公式の内容をほぼサポートしてるのでそっちを見て。
23
折角なので 開発サイドの話をします
中の人なので言っとくか①
謎のStargazers
わりと縁もゆかりもないところから☆
27
Lviv, Ukraine Halifax, Canada Munich, Germany Darmstadt Devon, UK Maine Bristol Seattle, Wa Russia Seattle, WA Melbourne, Australia Berlin
Waffles Seattle, WA Toronto, ON, Canada Gent Silver Spring, MD Italy Hopewell, NJ Hamburg, Germany Porto Porto and Madeira, Portugal Rochester, NY Berkeley, CA Altanta, GA
なんか国外多いし
28
28
28
どこで知ったんだろう…
『まあまあ便利』 ってことなんでしょう、きっと。
『まあまあ便利』 ってことなんでしょう、きっと。
>> 地味に開発のモチベに。
中の人なので言っとくか②
自分がそこまで使い込んでない
31
自分がそこまで使い込んでない•生のOSに対して何かするという機会が減ってきているので。。。(PaaSとかがラクで。)
31
自分がそこまで使い込んでない•生のOSに対して何かするという機会が減ってきているので。。。(PaaSとかがラクで。)•『ここはChefかなー』な時に登場。
31
自分がそこまで使い込んでない•生のOSに対して何かするという機会が減ってきているので。。。(PaaSとかがラクで。)•『ここはChefかなー』な時に登場。•※ただ、自分でも意識しないで使っていることがある。
31
自分がそこまで使い込んでない•生のOSに対して何かするという機会が減ってきているので。。。(PaaSとかがラクで。)•『ここはChefかなー』な時に登場。•※ただ、自分でも意識しないで使っていることがある。
•手作業も普通に併用するよ。
31
自分がそこまで使い込んでない•生のOSに対して何かするという機会が減ってきているので。。。(PaaSとかがラクで。)•『ここはChefかなー』な時に登場。•※ただ、自分でも意識しないで使っていることがある。
•手作業も普通に併用するよ。•このへん、次の話につながります。
31
中の人なので言っとくか③
サポートが手厚い
ユーザのフィードバックが頼り(※使い込んでないので)
34
ユーザのフィードバックが頼り(※使い込んでないので)
•Issueの大半は異国から。。。国内向けはこっちから打って出ることが多い。
34
ユーザのフィードバックが頼り(※使い込んでないので)
•Issueの大半は異国から。。。国内向けはこっちから打って出ることが多い。•例:ツイートすると機能追加/バグ修正される。
34
ユーザのフィードバックが頼り(※使い込んでないので)
•Issueの大半は異国から。。。国内向けはこっちから打って出ることが多い。•例:ツイートすると機能追加/バグ修正される。•独り言に絡んでいく。
34
ユーザのフィードバックが頼り(※使い込んでないので)
•Issueの大半は異国から。。。国内向けはこっちから打って出ることが多い。•例:ツイートすると機能追加/バグ修正される。•独り言に絡んでいく。•この手法を個人的に『みなしフィードバック』・『フィードフォワード』と呼んでいます。
34
ユーザのフィードバックが頼り(※使い込んでないので)
•Issueの大半は異国から。。。国内向けはこっちから打って出ることが多い。•例:ツイートすると機能追加/バグ修正される。•独り言に絡んでいく。•この手法を個人的に『みなしフィードバック』・『フィードフォワード』と呼んでいます。
•適当に愚痴を吐いてれば(筋が通ってりゃあ)対応しとくのでよろしく。
34
プラグインでやるより 本体に追加し方がいいんじゃ? って要望もくるじゃない。
本体側に押し付ける方針です
Chefの更新履歴より
中の人なので言っとくか④
常に最新のChefで動く
Chef(masterブランチ)あるある
39
Chef(masterブランチ)あるある•後方非互換の修正 •コード量が多いのでリファクタリングでバグる
39
Chef(masterブランチ)あるある•後方非互換の修正 •コード量が多いのでリファクタリングでバグる•プラグイン壊れることもまあ多い •『Chef更新したらKnife-Zero動かないんだけどー』 => 『えーどこよ。。』が何回もあったので。
39
Chefの更新全部で結合テストしてます•フィードをIFTTTで監視 •=> コミット単位でCircleCI •そして副作用が。
40
‘副作用’ Chefの後方非互換発生(※)を 世界最速で知ってしまううちの
一人に※一部の機能に限ります
良くも悪くも 知ってしまい修正する羽目に
中の人なので言っとくか⑤※ラスト
対象がWindowsの場合 どーすんの?
=> 真面目に対応する気は 無かったが
45
•Windows => WindowsのSSHは目立った問題なし。 •Others => Windowsで入出力がまだ微妙。 •ポートフォワードはちゃんと動いてる。
45
•Windows => WindowsのSSHは目立った問題なし。 •Others => Windowsで入出力がまだ微妙。 •ポートフォワードはちゃんと動いてる。
45
•Windows => WindowsのSSHは目立った問題なし。 •Others => Windowsで入出力がまだ微妙。 •ポートフォワードはちゃんと動いてる。
45
※OpenSSHにこだわらなければ多分使える。
Knife-Zeroの話は以上
新しめのテストスイート InSpec
InSpecって?•米Chef Incがリリースしたテストスイート(今はバージョン0.9.x) •Serverspec(RSpec)的な記述をベースに、監査向けのルールを記述したりシェアしたりしやすくした。
48
自前のテスト、サンプルコード (1)
•これは…!?49
1 describe package('telnetd') do 2 it { should_not be_installed } 3 end 4 5 describe inetd_conf do 6 its("telnet") { should eq nil } 7 end~
自前のテスト、サンプルコード (1)
•これは…!?49
1 describe package('telnetd') do 2 it { should_not be_installed } 3 end 4 5 describe inetd_conf do 6 its("telnet") { should eq nil } 7 end~
サンプル(1)を実行
50
$ inspec exec spec/telnet_spec.rb --backend ssh --host=myhost \ —user=root --key-files ~/.ssh/id_rsa --format=doc
System Package telnetd should not be installed
inetd.conf telnet should eq nil
Finished in 0.20249 seconds (files took 1.78 seconds to load)2 examples, 0 failures
自前のテスト、サンプルコード (2)
51
1 only_if do 2 command('sshd').exist? 3 end 4 5 rule "sshd-11" do 6 impact 1.0 7 title "Server: Set protocol version to SSHv2" 8 desc " 9 Set the SSH protocol version to 2. Don't use legacy 10 insecure SSHv1 connections anymore. 11 " 12 describe sshd_config do 13 its('Protocol') { should eq('2') } 14 end 15 end
自前のテスト、サンプルコード (2)
51
1 only_if do 2 command('sshd').exist? 3 end 4 5 rule "sshd-11" do 6 impact 1.0 7 title "Server: Set protocol version to SSHv2" 8 desc " 9 Set the SSH protocol version to 2. Don't use legacy 10 insecure SSHv1 connections anymore. 11 " 12 describe sshd_config do 13 its('Protocol') { should eq('2') } 14 end 15 end
自前のテスト、サンプルコード (2)
51
1 only_if do 2 command('sshd').exist? 3 end 4 5 rule "sshd-11" do 6 impact 1.0 7 title "Server: Set protocol version to SSHv2" 8 desc " 9 Set the SSH protocol version to 2. Don't use legacy 10 insecure SSHv1 connections anymore. 11 " 12 describe sshd_config do 13 its('Protocol') { should eq('2') } 14 end 15 end
JSONフォーマット出力
52
$ inspec exec {中略} --format=json | jq .{ "version": "3.4.1", "examples": [- - 省略 - - ], "summary": { "duration": 0.217281, "example_count": 2, "failure_count": 0, "pending_count": 0 }, "summary_line": "2 examples, 0 failures"}
監査向けとは?
53
監査向けとは?•Specにスコアを付けて影響度を合算、みたいな結果を出せる。
53
監査向けとは?•Specにスコアを付けて影響度を合算、みたいな結果を出せる。•単品でServerspecのような利用法もできるが、Chef Compliance(※)などの定期実行&集約する使い方をしてね。ということらしい。
53
監査向けとは?•Specにスコアを付けて影響度を合算、みたいな結果を出せる。•単品でServerspecのような利用法もできるが、Chef Compliance(※)などの定期実行&集約する使い方をしてね。ということらしい。
53※ http://qiita.com/sawanoboly/items/db44b2e6d8bfcbc8e990
監査向けとは?•Specにスコアを付けて影響度を合算、みたいな結果を出せる。•単品でServerspecのような利用法もできるが、Chef Compliance(※)などの定期実行&集約する使い方をしてね。ということらしい。•ただ、単品では合算の出力なし。
53※ http://qiita.com/sawanoboly/items/db44b2e6d8bfcbc8e990
シェア済の監査ポリシー例
54
シェア済の監査ポリシー例
54
シェア済の監査ポリシー例
•CISのセキュリティベンチマーク •CIS Ubuntu 14.04 LTS Server Benchmark Level 1 & 2
54
シェア済の監査ポリシー例
•CISのセキュリティベンチマーク •CIS Ubuntu 14.04 LTS Server Benchmark Level 1 & 2
•ほか、Serverspecでは`細かすぎ`とされるリソースもプリセットで用意していた。(コードは泥臭い)
54
Serverspecと(独自視点で)比較
55
Serverspecと(独自視点で)比較•Serverspec
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。•InSpec
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。•InSpec•対象をCLIのオプションでも指定できる。
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。•InSpec•対象をCLIのオプションでも指定できる。•素のRSpecだと思うと『おやっ?』てなる。
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。•InSpec•対象をCLIのオプションでも指定できる。•素のRSpecだと思うと『おやっ?』てなる。•Exitコードは基本0(※)
55
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。•InSpec•対象をCLIのオプションでも指定できる。•素のRSpecだと思うと『おやっ?』てなる。•Exitコードは基本0(※)
55※今後どうなるかは知らない。
Serverspecと(独自視点で)比較•Serverspec•対象はRake, spec_helperなどで調整。•RSpecだと思えばうまくいく。•InSpec•対象をCLIのオプションでも指定できる。•素のRSpecだと思うと『おやっ?』てなる。•Exitコードは基本0(※)•単品の場合、jsonフォーマットでサマリ取得がよい。
55※今後どうなるかは知らない。
`inspec shell`便利かも
56
$ inspec shell --backend ssh --host=以下略Welcome to the interactive Inspec Shell> usage
You can use resources in this environment to test the target machine.For example:
command('uname -a').stdout file('/proc/cpuinfo').content
You are currently running on:
OS family: ubuntu OS release: 14.04
> package('apache2').installed?=> true
> file('/etc/default/ntp').content=> "NTPD_OPTS='-g'\n"
`inspec shell`便利かも
56
$ inspec shell --backend ssh --host=以下略Welcome to the interactive Inspec Shell> usage
You can use resources in this environment to test the target machine.For example:
command('uname -a').stdout file('/proc/cpuinfo').content
You are currently running on:
OS family: ubuntu OS release: 14.04
> package('apache2').installed?=> true
> file('/etc/default/ntp').content=> "NTPD_OPTS='-g'\n"
`inspec shell`便利かも
56
$ inspec shell --backend ssh --host=以下略Welcome to the interactive Inspec Shell> usage
You can use resources in this environment to test the target machine.For example:
command('uname -a').stdout file('/proc/cpuinfo').content
You are currently running on:
OS family: ubuntu OS release: 14.04
> package('apache2').installed?=> true
> file('/etc/default/ntp').content=> "NTPD_OPTS='-g'\n"
InSpecの歩み (1)
57
InSpecの歩み (1)•セキュリティ監査SaaSベンチャーが誕生(Vulcanosec)。
57
InSpecの歩み (1)•セキュリティ監査SaaSベンチャーが誕生(Vulcanosec)。•Serverspecのカスタムルール集だった模様。
57
InSpecの歩み (1)•セキュリティ監査SaaSベンチャーが誕生(Vulcanosec)。•Serverspecのカスタムルール集だった模様。•自社サービス向けの調整で、Specinfraをベースにした vulcanosec という名前のツール&サービスに。
57
InSpecの歩み (1)•セキュリティ監査SaaSベンチャーが誕生(Vulcanosec)。•Serverspecのカスタムルール集だった模様。•自社サービス向けの調整で、Specinfraをベースにした vulcanosec という名前のツール&サービスに。•vulcanosecは定期自動監査SaaS。
57
InSpecの歩み (2)
58
InSpecの歩み (2)•Chefが買う。
58
InSpecの歩み (2)•Chefが買う。•方向性と求める汎用性のギャップがあったようで、Specinfraを卒業。Test-Kitchenから派生して作ったTrainベースに変更。
58
InSpecの歩み (2)•Chefが買う。•方向性と求める汎用性のギャップがあったようで、Specinfraを卒業。Test-Kitchenから派生して作ったTrainベースに変更。•InSpecになる。
58
InSpecの歩み (2)•Chefが買う。•方向性と求める汎用性のギャップがあったようで、Specinfraを卒業。Test-Kitchenから派生して作ったTrainベースに変更。•InSpecになる。•『Serverspecリスペクト&客層ちょっと違うよ!』をわりとアピールしている(と思う)。
58
関連モジュールの比較表
59
- Serverspec (&Specinfra)
InSpec (&Train)
リソース定義 ServerspecInSpec
ディストリビューション 差分吸収
Specinfraローカルorリモート
接続Train
(Test-Kithcn由来)
(※)
(※この境目はまだ揺れ動いています)
まとめっぽい分類
60
まとめっぽい分類•Serverspec •自分がやりたいことを確かめる目的。
60
まとめっぽい分類•Serverspec •自分がやりたいことを確かめる目的。•InSpec •何となく不安、をセキュリティ方面から広く見る目的。
60
Chef Compliance(旧Vulcanosec)
•25ノードまでは特に断りなく使用OK。 •超えるようなら連絡(現状は任意) •Chefが買った時に通知機能とかは一旦無しになってる。
61
InSpecは以上
お知らせ•今日行ったようなツールを •使ってみてフィードバック •質問したい •デモが見たい
63
等、お気軽にご相談OKです。
マニアックツール紹介
2015年11月23日 第2回関西ITインフラ系勉強会
@sawanoboly(HiganWorks LLC, Opsrock LLC)
• Knife-Zero(構成管理) • InSpec (テストスイート)
終