AWSアカウントをTerraformに連携する方法とは?
今回から、以下の2部構成で「Terraformで書いたコードをCheckovでセキュリティチェックする方法」を徹底解説します。
【前編】AWSの自分のアカウントをterraformに連携する方法とは?
【後編】terraformにコードを書いて、Checkovでセキュリティチェックする手順を解説
まず、前編となる今回では、AWSアカウントとローカル環境のterraformを連携させるために、AWSアカウントの作成からTerraformのインストール、そして「terraform init」コマンドを使ってワークスペースを初期化する流れを解説します。
後編は、Terraformで記述したインフラコードに対して、Checkovを使ってセキュリティチェックを実施する方法の紹介です。Checkovによるセキュリティチェックを組み込むことで、開発の早い段階でセキュリティのリスクを検出し、信頼性の高いインフラを構築できるようになります。
本シリーズを通じて、AWSとTerraformの連携からCheckovを使ったセキュリティ管理まで、実用的な知識を習得できる内容となっていますので、ぜひ最後までご覧ください。
また、terraformやCheckovの基礎となる概要や利用するメリットについて知りたい方は、以下の記事で解説していますので合わせてご確認ください。
terraformを利用してAWSのリソースを構築する際の流れ
まずは、全体の流れを把握しましょう。Terraformを使ってAWSリソースを構築する際の基本的な流れは、以下の6つのステップで進行します。
- terarform用のAWSユーザーを作成
- ローカルPCとAWSアカウントの紐づけ
- backendファイル作成(terraformで一番重要なファイル)
- terraform init でワークスペースの初期化
- VScodeでコード執筆
- AWS上にリソースデプロイ
ステップ1〜3までは一度設定を行えば、2回目からは不要となります。
事前準備(今回の解説で使用するツール)
今回の解説を進めるにあたり、以下の3つのツールが必要になります:
- AWS CLI
AWS公式が公開しているインストール手順はこちら - VSCode(Visual Studio Code)
VSCodeのインストールはこちらから - Terraform
これらのツールがまだインストールされていない場合は、まずそれぞれの公式サイトやリソースからインストールを完了させてください。特にTerraformのインストール手順については、詳しく解説した記事がございますので、こちらを参考にスムーズに導入いただけます。
terraformインストール Windows編はこちら
terraformインストール Mac編はこちら
この3つのツールが準備できましたら、次のステップに進み、AWSアカウントとの連携作業に取りかかりましょう。
terarform用のAWSユーザーを作成
まず最初のステップではAWSのコンソール画面上でのIAMユーザーの作成です。今回はAdministratorAccess権限を持ったユーザーを作成して解説します。
ユーザーは既存のユーザーでも問題ありませんが、Terraformに特化したユーザーを作成することで、権限管理やセキュリティリスクを最小限に抑えられます。
ローカルPCとAWSアカウントの紐づけ
次に、ローカル環境でAWS CLIを使用して、AWSアカウントと接続します。
コマンドプロンプト(Macはターミナル)に、下記コマンドを入力してクレデンシャル情報(認証情報)を入力します。
aws configure |
クレデンシャル情報の入力では次の4つの情報の入力が求められます。
AWS Access Key ID : 確認方法は後ほど解説します AWS Secret Access Key : 確認方法は後ほど解説します Default region name : ap-northeast-1(利用するリージョンを入力) Default output format : json(空白でも可) |
AWS Access Key IDとAWS Secret Access Keyの作成・確認方法
クレデンシャル情報の入力時に求められるKey IDとAccess Keyは以下の手順で作成します。
まず、作成したユーザーでAWSマネージドコンソールにサインインを行い、「IAM」→「ユーザー」のページを開きます。そして、作成したユーザー(今回使用するIAMユーザー)を選択してください。
続いて、アクセスキーを作成を選択します。
今回は、ユースケース「ローカルコード」を選択のうえ、アクセスキーの作成をクリックし作成を行います。
アクセスキーの作成が完了すると、クレデンシャル情報の入力時に必要な下記2つの情報が表示されます。
- AWS Access Key ID
- AWS Secret Access Key
この2つの情報をコピー、もしくは.csvファイルをダウンロードしてください。AWS Secret Access Keyは紛失または失念した場合、再確認ができません。万が一、コピーし忘れた場合は再度アクセスキーの作成を行ってください。
クレデンシャル情報の入力に必要な情報が揃ったので、コマンドプロンプト(もしくはターミナル)に下記コマンドを入力します。
aws configure |
そして、以下の4つの情報を1つずつ入力します。
AWS Access Key ID : 先ほどコピーしたもの AWS Secret Access Key : 先ほどコピーしたもの Default region name : ap-northeast-1 Default output format : json |
ここまで入力が完了すれば、ステップ2「ローカルPCとAWSアカウントの紐づけ」が完了です。
backendファイル作成
次のステップが、backendファイルの作成です。backendファイルで、AWSやAzureといったプロバイダー情報やリージョン、JSONコードが記述されたファイルの保管場所などの情報を定義します。
backendファイルの作成手順は以下のとおりです。
- backendファイルを格納するフォルダの作成
- backend.tfファイルを作成
- VSCodeでファイルにコードを記述
今回は、Terraformがデプロイしたインフラの「現在の状態」が保存されたtfstateファイルをAWSのS3バケット内に配置します。
AWSマネージメントコンソールのS3のページからtfstateファイルを格納するためのバケットを「バケットを作成」から作成してください。
mkdir OpsToday-terraform |
mkdir ”任意の名前” でフォルダを作成。
cd OpsToday-terraform |
cd コマンドで作成したフォルダに移動。
touch backend.tf |
このコマンドを入力しbackend.tf ファイルを作成します。そして、フォルダ内に、backend.tfファイルが作成されていることを確認し、backend.tfファイルをVSCodeで開きます。
先程作成したbackend.tfファイル内に下記のコマンドを記述します。
# tfstate管理バケット terraform { required_version = “= 1.9.6” #使用しているterraformのバージョンを入力 backend “s3” { bucket = “opstoday-tfstate” #AWSコンソール上のバケット名を入力 key = “opstoday-terrafom-tfstate” #オブジェクト名を入力 ない場合は新規作成される region = “ap-northeast-1” } } # プロバイダー指定 provider “aws” { region = “ap-northeast-1” } |
このコードを記述する際は、3つの注意するべき点があります。
- 実行環境にインストールされているTerraformバージョンが異なる場合、適切なバージョンに変更してください。
- 別の AWS アカウントが同じ名前の S3 バケットを所有している場合は、バケットを作成する際にエラーが表示されるため、S3 バケット名は全世界で「一意」である必要があります。
- S3バケット内のオブジェクト名は一意である必要があります。
※バケット名やオブジェクト名に使える文字や命名規則についてはAWS公式ドキュメントでご確認ください。
コードの記述が終われば、backendファイル作成が完了です。
terraform init でワークスペースの初期化
次は、terraform init でワークスペースの初期化の手順です。
コマンドプロンプト上で、test-terraformフォルダに移動し、下記コマンドを入力します。
terraform init |
init は「initialize(イニシャライズ)」の略で「初期化」を意味します。
ここまでの手順で正しく設定が行われていれば、下記画像のようにSuccessfullyと出力されます。
VScodeでコード執筆
ここまでの手順でローカル環境とterraformの連携は終了ですが、デモとしてVPCを作成手順を解説します。
まずは、test-terraformフォルダ内に「vpc.tfファイル」を作成し、作成したファイルをVSCodeで開きます。作成したvpc.tfファイル内に下記のコードを入力しましょう。
resource “aws_vpc” “OpsToday-test-vpc” { cidr_block = “10.0.0.0/24” tags = { Name = “OpsToday-vpc” #AWS上に作成するリソースの名前を指定 } } |
コードが書けたらターミナルで下記コマンドを入力します。
terraform plan |
このコマンドを実行することで、どのリソースが追加・変更・削除されるかを確認できます。
Plan:1 to add →今の環境にリソースが追加される
0 to change →AWS環境内にすでにあるリソースに変更が加わる
0 to destroy →AWS環境内のリソースが削除される
今回はVPCを1つ作成する予定なので「1 to add」と記載されていれば成功です。
AWS上にリソースデプロイ
コードを執筆し、terraform planで確認まで行ったら下記のコマンドを実行します。
terraform apply |
このコマンドは、terraform plan で生成された計画(プラン)を基に、実際にインフラに対する変更を適用します。このコマンドが実行されると、指定されたリソースが AWS上に構築または更新されます。
terraform applyの実行後、改めてplan結果が出力されます。問題なければ「yes」と入力しましょう。実行結果として、「complete」 と表示されていれば構築完了です。
作成したユーザーIDでAWSマネージドコンソールにサインインして、VPCが作成されていることを確認してみましょう。
そして、S3バケット内に、オブジェクトが作成されていることも確認しましょう。
デモで作成したVPCをコマンドで削除する方法
今回デモで作成したVPCをterraformのコードで削除する手順を解説します。リソースを削除するには下記のコマンドを実行します。
terraform destroy |
このコマンドはTerraform で管理しているインフラリソースを全て削除する際に使用します。
plan結果が出力されるため、1 to destroy となっていることを確認し、「yes」と入力します。「Destroy complete!」と出力されていれば削除完了です。
まとめ
今回の記事では、前編として、terraformをローカル環境と連携し、実際にVPCを作成する手順を解説しました。
terraformでのコード管理の基礎として重要な部分のみを解説しましたので、この記事の内容はしっかりとおさえておきましょう。
次回は、本題となるEC2やロードバランサーを作成するためのコードをterraform上で記述し、Checovでセキュリティチェックを行うための手順を解説します。