ちょっと話題の記事

【アップデート】Systems Managerがインフラテストツール「InSpec」に対応しました!

2018.03.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

森永です。

Systems Manager(SSM)使ってますか。いいですよねSSM。

今回SSMにアップデートがあり、インフラストラクチャのテストツール「InSpec」に対応しました!!

AWS Systems Manager Adds Support for InSpec by Chef

InSpecとは

「InSpec」とはサーバ設定の自動化ツールを提供しているChef社がOSSで公開しているインフラストラクチャのテストツールです。

InSpec - Audit and Automated Testing Framework
chef/inspec: InSpec: Auditing and Testing Framework

インフラストラクチャのテストツールというとServerspecを想像される方も多いかと思いますが、InSpecはServerspecにインスパイヤされて作成されたもののようです。

InSpec is inspired by the wonderful Serverspec project. Kudos to mizzy and all contributors!

Serverspec同様、RubyのDSLでテストを記述して、文法もかなりにているためServerspecを使っていた人であればすぐにテストを書けると思います。
今回始めて触るよ、という方もサンプルのテストコードがGitHub上で公開されていますので、まずはこちらで試してみるのが良さそうです。

また、よく使う内容はPredefined profileとしてGitHubにまとめられていますので、こちらを自分用に修正して利用するのもよいかと思います。

詳しいInSpecの使用方法はのちほどまとめたいと思います。

Systems Managerでのサポート

「AWS-RunInSpecChecks」というSSMドキュメントが追加されて、SSMエージェントが入っているEC2インスタンスであれば簡単にInSpecでのテストが出来るようになりました。

試してみる

適当にテスト対象となるEC2インスタンスを立ち上げます。
SSMエージェントを導入し、SSMを実行できるロールを付与することを忘れずやりましょう。

次に「RunCommand」からコマンドを実行します。
「AWS-RunInSpecChecks」というドキュメントが増えていますね。

先ほど起動したインスタンスを選択し、InSpecのテストコードの場所を指定します。
S3とGitHub上から選べますが、今回はGitHubにあるサンプルを使用してみます。
サンプルの内容は、ssh/rdpのListen Addressが0.0.0.0でListenしていないかというものです。

「Source Info」の箇所には以下のようなjsonを記述します。

{"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
項目 内容 補足
owner GitHubリポジトリのオーナー名
repository リポジトリ名
path inspec.ymlのあるディレクトリへのパス
getOptions その他オプション branchを指定することも出来ます

InSpecのディレクトリ構造は以下を参照してください。
About InSpec Profiles

設定はこれだけです。実行してみます。
出力が3つでてますね!

runInSpecLinuxの出力を確認してみます。

Installing Chef Development Kit
Executing InSpec tests
Completed InSpec checks and put 1 compliant (1 critical, 0 high, 0 low) and 1 non-compliant (1 critical, 0 high, 0 low) items
Uninstalling Chef Development Kit

----------ERROR-------
[DEPRECATED] The option --format is being is being deprecated and will be removed in inspec 3.0. Please use --reporter

一つクリティカルな問題があるとでています。
ログを見るに、Chef Development Kitをインストールして、テストを行ってから、アンインストールを行ってくれていますね。便利。

今回はAmazon Linuxに対して実行したため、Windowsのものはスキップされています。

Step execution skipped due to incompatible platform. Step name: runInSpecWindows

結果は「Configuration Compliance」からも確認できます。

sshd_configを変更して、Listen AddressをEC2のローカルIPのみにしぼります。(これをやるべきかは今回は置いておきます。)

$ curl http://169.254.169.254/latest/meta-data/local-ipv4
10.0.0.50

$ sudo vi /etc/ssh/sshd_config
...
#ListenAddress 0.0.0.0
#ListenAddress ::
ListenAddress 10.0.0.50
...

$ sudo service sshd reload

再度、実行してみると。。。

COMPLIANTになってますね!!

最後に

サーバへのInspecのインストール、テスト、アンインストールまで勝手にやってくれるので非常に便利ですね!
テスト用のコードも多数公開されていますので、是非試してみてください!

楽してセキュアな環境を作りましょう!!