[InSpec]Terraformで構築したGCPリソースのテストをする

公開日:2019-01-14
最終更新:2019-01-14

2018年6月の勉強会で InSpec で Terraform から構築したインフラのテストが
できると聞いていたのをふと思い出して試したところいい感じでできたので投稿

参照した資料

準備・前提

  • GCP のインフラ環境を Terraform で apply
    • Credential の設定ができている
  • RubyGem の インストール (for install InSpec)
  • InSpec のインストール
    • 自分の今回の場合、 gem install inspec に6分超かかりました
      • なお、PCは macOS Mojave 10.14.2 の Macbook Air
  • InSpec GCP Resource Pack のインストール

実施前の調整

  • 以下のような構成が自動生成される

      ├── controls  
      │   └── example.rb  
      ├── inspec.yml  
      └── attributes.yml
    
    • attributes.yml の調整
      • 適宜、 gcp_project_id の調整を
    • inspec.yml の調整
      • 変更しないでもよいのですが、 maintainer , copyright , copyright_email を自分は変えました
    • example.rb の調整
      • 中身を全てコメントアウトするか、
      • コピーして dns.rb のようなファイルを作成
  • テストファイルの記述(dns.rb)

    
      title 'DNS Section'  
    
      gcp_project_id = attribute('gcp_project_id')  
    
      control 'gcp-[project-name]-dns-0.5' do  
        impact 0.5  
        title 'Check gcp [project-name] dns'  
        describe google_dns_managed_zone(project: gcp_project_id,  zone: '[your_dns_zone_name]') do  
          it { should exist }  
          its('dns_name') { should match '[your_dns_name]' }  
        end  
      end
    

テストの実行

❯ inspec exec . -t gcp:// --attrs attributes.yml  

Profile: GCP InSpec Profile ([project_name])  
Version: 0.1.0  
Target:  gcp://[service_account_id]@[project_name].iam.gserviceaccount.com  

  ✔  gcp-[project_name]-dns-0.5: Check gcp [project_name] dns  
     ✔  DNS Managed Zone  should exist  
     ✔  DNS Managed Zone  dns_name should match "[your_dns_name]"  

Profile: Google Cloud Platform Resource Pack (inspec-gcp)  
Version: 0.8.0  
Target:  gcp://[service_account_id]@[project_name].iam.gserviceaccount.com  

     No tests executed.  

Profile Summary: 1 successful controls, 0 control failures, 0 controls skipped  
Test Summary: 2 successful, 0 failures, 0 skipped

今後の展開

  • https://github.com/inspec/inspec-gcp#create-a-new-profile-for-gcp にも多くの記述があり期待が大きいのですが、以下のようなリソースのテストができそうです
    • google_compute_firewall
    • google_compute_instance
    • google_compute_network
    • google_compute_subnetwork
    • google_storage_bucket
    • ・・・
  • Terraform で作成したリソースに限らず、Serverspec 的な使い方もできそうなので、それもやっていきたい気がしている

その他

  • 実は firewall のテストの実装もやってみたのですが、 icmp のテストをどう定義すればいいかわかってないです…
    • TCP 8080 ポートは it { should allow_port_protocol("8080", "tcp") } みたいな感じでいけるのだが・・・
記事が少しでもいいなと思ったらクラップを送ってみよう!
0
+1
@sogaohの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする