【初心者向け】MacにTerraform環境を導入してみた

MacへのTerraform環境導入として、tfenvとgit-secretsの設定方法をまとめました。
2021.01.15

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

こんにちは!コンサル部のinomaso(@inomasosan)です。

AWS環境構築でTerraformを入社前から使用していたのですが、改めて新規環境を導入した際に意外と手こずってしまったので、備忘も兼ねてブログに手順を残すことにしました。

環境

  • macOS Catalina 10.15.7
  • Homebrew 2.7.3

tfenv設定

tfenvはTerraformのバージョンマネージャーです。
Terraformは頻繁にアップデートがあるため、バージョンを簡単に切り替えられるようにします。

1. tfenvインストール

Homebrewでtfenvをインストールします。

% brew install tfenv

インストール後に、バージョン確認してみましょう。

% tfenv --version

2. 複数のTerraformバージョンインストール

インストール可能なバージョン一覧を確認します。

% tfenv list-remote

今回は2021年1月時点でGAされている最新の0.14.4と、一つ前の0.13.6をインストールします。

% tfenv install 0.14.4
% tfenv install 0.13.6

このままだと、最後にインストールした0.13.6が選択されてしまいます。
0.14.4を使用したいので、バージョンを切り替えます。

% tfenv use 0.14.4
Switching default version to v0.14.4
Switching completed

バージョン確認コマンドを実行してみましょう。 使用したいバージョンの先頭に「*」が表示されていればOKです。

% tfenv list
* 0.14.4 (set by /usr/local/Cellar/tfenv/2.0.0/version)
  0.13.6

git-secrets設定

Gitでコード管理する場合、AWSの認証情報を誤って公開してしまうと不正アクセスされる危険性があります。 git-secretsを導入しておくと、Gitで認証情報を誤ったコミットを防ぐことができます。

1. Gitインストール

Gitが未インストールであれば、以下のコマンドを実行します。

% brew install git

インストール後に、バージョン確認してみましょう。

% git --version

2. git-secrets設定

git-secretsが未インストールであれば、以下のコマンドを実行します。

% brew install git-secrets

全リポジトリにAWS認証情報のパターンを設定します。

% git secrets --register-aws --global

設定ファイルの内容を確認してみましょう。

% cat ~/.gitconfig
[secrets]
    providers = git secrets --aws-provider
    patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
    patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key
aws_access_key_id = "AKIAIOSFODNN7EXAMPLE"
|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
    patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?
    allowed = AKIAIOSFODNN7EXAMPLE
    allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

allowedはAWS公式ドキュメントのAWS アクセスキーを管理するためのベストプラクティスに記載されている、サンプルキーのようです。

新規リポジトリ作成時に、git-secretsがインストールされるよう設定します。

% git secrets --install ~/.git-templates/secrets
% git config --global init.templatedir '~/.git-templates/secrets'

3. 動作確認

AWS認証情報が記載されていた場合に、Gitのコミットを防ぐことができるのかを確認します。

まずはテスト用のディレクトリを作成し、移動します。

% mkdir aws-secrets-test
% cd aws-secrets-test

Gitの新規リポジトリを作成します。

% git init

テスト用のAWS認証情報は~/.gitconfigallowedのサンプルキーを参考にします。
数字の部分を7から8に変更してmain.tfを作成しましょう。

% echo "aws_access_key_id = \"AKIAIOSFODNN8EXAMPLE\"\naws_secret_access_key = \"wJalrXUtnFEMI/K8MDENG/bPxRfiCYEXAMPLEKEY\"" > main.tf

main.tfをコミット対象にします。

% git add main.tf

Gitにコミットしてエラーになることを確認します。

% git commit -m "secrets test"
main.tf:1:aws_access_key_id = "AKIAIOSFODNN8EXAMPLE"
main.tf:2:aws_secret_access_key = "wJalrXUtnFEMI/K8MDENG/bPxRfiCYEXAMPLEKEY"

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory

まとめ

以上、Terraform環境導入のまとめでした。
この記事が、どなたかのお役に立てば幸いです。それでは!