この記事は公開されてから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のインストール、テスト、アンインストールまで勝手にやってくれるので非常に便利ですね!
テスト用のコードも多数公開されていますので、是非試してみてください!
楽してセキュアな環境を作りましょう!!