fbpx

[和訳] TerraformからInSpec Controls を自動生成する #getchef #InSpec #Terraform

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿はAutomatically Generating InSpec Controls from Terraform 2018/5/23 の和訳です。

InSpec-Iggy、略して“Iggy”は InSpec向けの新しいプラグインで、InSpec のコンプライアンスプロファイルをTerraform tfstate ファイル(および、最終的には AWS CloudFormation と Azure Resource Manager テンプレート)から生成します。Iggy はもともとChristoph Hartmann氏の inspec-verify-provisionリポジトリと、Terraform と InSpecのテスト関連のブログ記事にインスパイアを受けたものでした。InSpec 2.0のリリースと、AWSとAzure サポートの追加によって、Controls の自動生成はさらに実現化に近づきました。その手順の簡単なデモをお見せします:

inspec で terraform generate

これは現在、InSpec リソースと Terraform のマッピングに基づいて一連の InSpec Controls を生成します。出力は (ie. “test.rb“) ファイルとしてキャプチャし、コマンドラインからInSpecを使用することができます。デモでは Terraform の Basic Two-Tier AWS Architecture および次のコマンドを使用します:

terraform apply
inspec terraform generate > test.rb
inspec exec test.rb -t aws://us-west-1

現在のバージョンであるInSpec-Iggy (0.2.0) および InSpec (2.1.83) では次の出力が得られます:

$ inspec exec test.rb -t aws://us-west-1

Profile: tests from test.rb (tests from test.rb)
Version: (not specified)
Target:  aws://us-west-1

  ✔  aws_ec2_instance::i-0ed224373e440f72b: Iggy terraform.tfstate aws_ec2_instance::i-0ed224373e440f72b
     ✔  EC2 Instance i-0ed224373e440f72b should exist
     ✔  EC2 Instance i-0ed224373e440f72b id should cmp == "i-0ed224373e440f72b"
     ✔  EC2 Instance i-0ed224373e440f72b instance_type should cmp == "t2.micro"
     ✔  EC2 Instance i-0ed224373e440f72b key_name should cmp == "mattray-tf"
     ✔  EC2 Instance i-0ed224373e440f72b subnet_id should cmp == "subnet-fbc7f29c"
  ✔  aws_security_group::sg-7770ba0f: Iggy terraform.tfstate aws_security_group::sg-7770ba0f
     ✔  EC2 Security Group sg-7770ba0f should exist
     ✔  EC2 Security Group sg-7770ba0f description should cmp == "Used in the terraform"
     ✔  EC2 Security Group sg-7770ba0f vpc_id should cmp == "vpc-0eacdb69"
  ✔  aws_security_group::sg-0a70ba72: Iggy terraform.tfstate aws_security_group::sg-0a70ba72
     ✔  EC2 Security Group sg-0a70ba72 should exist
     ✔  EC2 Security Group sg-0a70ba72 description should cmp == "Used in the terraform"
     ✔  EC2 Security Group sg-0a70ba72 vpc_id should cmp == "vpc-0eacdb69"
  ✔  aws_subnet::subnet-fbc7f29c: Iggy terraform.tfstate aws_subnet::subnet-fbc7f29c
     ✔  VPC Subnet subnet-fbc7f29c should exist
     ✔  VPC Subnet subnet-fbc7f29c availability_zone should cmp == "us-west-1a"
     ✔  VPC Subnet subnet-fbc7f29c cidr_block should cmp == "10.0.1.0/24"
     ✔  VPC Subnet subnet-fbc7f29c vpc_id should cmp == "vpc-0eacdb69"
  ✔  aws_vpc::vpc-0eacdb69: Iggy terraform.tfstate aws_vpc::vpc-0eacdb69
     ✔  VPC vpc-0eacdb69 should exist
     ✔  VPC vpc-0eacdb69 cidr_block should cmp == "10.0.0.0/16"
     ✔  VPC vpc-0eacdb69 dhcp_options_id should cmp == "dopt-d76783b2"
     ✔  VPC vpc-0eacdb69 instance_tenancy should cmp == "default"

Profile Summary: 5 successful controls, 0 control failures, 0 controls skipped
Test Summary: 19 successful, 0 failures, 0 skipped

Inspec で terraform extract

これは現在 terraform.tfstate ファイルを読み込み、タグ付けされたリソースを探してマシンに対して実行するためのコマンドを抽出するものです。現在開発中の機能ですが、デモでは次のものを使用します。

$ inspec terraform extract -t terraform.tfstate
inspec exec https://github.com/dev-sec/apache-baseline -t ssh://54.183.205.70 -i mattray-tf
inspec exec https://github.com/dev-sec/linux-baseline -t ssh://54.183.205.70 -i mattray-tf
inspec exec https://github.com/mattray/hong-kong-compliance -t aws://us-west-2

これにはちょっとした“ひねり”が必要ですが、有効です。

inspec exec https://github.com/dev-sec/apache-baseline -t ssh://ubuntu@54.183.205.70 -i mattray-tf
...
Profile Summary: 5 successful controls, 8 control failures, 1 control skipped
Test Summary: 103 successful, 14 failures, 1 skipped

InSpec-Iggy を使ってみよう

InSpec-Iggy はRubygemsからご利用いただけます。gem install inspec-iggy して今すぐ始めましょう。開発に興味のある方は、GitHubで詳細な情報をご確認ください。

InSpec プラグインを書いてみよう

InSpec プラグインを書くための機能はまだドキュメント化されていないため、私が InSpec プラグインの一例を書き、Rubygems と GitHub にプッシュしましたので、もっと学びたい方はご参照ください。

Iggyの未来

Chefは時代の先端を行くグローバルな銀行グループと協同で、シンガポールおよび香港向けのクラウドコンプライアンスの自動化に取り組んできました。私たちはInSpec と Terraform の統合事例と要件について情報収集をしています。皆さまからのフィードバックもお待ちしております。InSpec-Iggy はオープンソースでApacheライセンスです。Iggy はまだ1.0にも達しておりませんが、より多くのTerraformリソース向けの、より強力なサポートを構築し、より良いInspecterraform extract体験をユーザにお届けしたいと考えています。AWS CloudFormation もまた活発な開発段階にあり、Azure Resource Manager テンプレートも同様に開発が進む予定です。ユーザのインフラストラクチャとリソースすべてにおけるInSpecのカバー範囲を拡張するために、皆様からのインプットやテスト結果とパッチ適用状況などの情報をご提供くださることを楽しみにしております。

新規CTA