今日を知り、明日を変えるシステム運用メディア

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つのステップで進行します。

  1. terarform用のAWSユーザーを作成
  2. ローカルPCとAWSアカウントの紐づけ
  3. backendファイル作成(terraformで一番重要なファイル)
  4. terraform init でワークスペースの初期化
  5. VScodeでコード執筆
  6. AWS上にリソースデプロイ

ステップ1〜3までは一度設定を行えば、2回目からは不要となります。

事前準備(今回の解説で使用するツール)

今回の解説を進めるにあたり、以下の3つのツールが必要になります:

これらのツールがまだインストールされていない場合は、まずそれぞれの公式サイトやリソースからインストールを完了させてください。特に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ユーザー)を選択してください。

「IAM」→「ユーザー」のページを開く

続いて、アクセスキーを作成を選択します。

アクセスキーを作成を選択

今回は、ユースケース「ローカルコード」を選択のうえ、アクセスキーの作成をクリックし作成を行います。

ユースケース「ローカルコード」を選択

アクセスキーの作成が完了すると、クレデンシャル情報の入力時に必要な下記2つの情報が表示されます。

  • AWS Access Key ID 
  • AWS Secret Access Key 

この2つの情報をコピー、もしくは.csvファイルをダウンロードしてください。AWS Secret Access Keyは紛失または失念した場合、再確認ができません。万が一、コピーし忘れた場合は再度アクセスキーの作成を行ってください。

クレデンシャル情報の入力時に必要なAWS Access Key IDと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ファイルの作成手順は以下のとおりです。

  1. backendファイルを格納するフォルダの作成
  2. backend.tfファイルを作成
  3. VSCodeでファイルにコードを記述

今回は、Terraformがデプロイしたインフラの「現在の状態」が保存されたtfstateファイルをAWSのS3バケット内に配置します。

AWSマネージメントコンソールのS3のページからtfstateファイルを格納するためのバケットを「バケットを作成」から作成してください。

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つの注意するべき点があります。

  1. 実行環境にインストールされているTerraformバージョンが異なる場合、適切なバージョンに変更してください。
  1. 別の AWS アカウントが同じ名前の S3 バケットを所有している場合は、バケットを作成する際にエラーが表示されるため、S3 バケット名は全世界で「一意」である必要があります。
  1. S3バケット内のオブジェクト名は一意である必要があります。

※バケット名やオブジェクト名に使える文字や命名規則についてはAWS公式ドキュメントでご確認ください。

コードの記述が終われば、backendファイル作成が完了です。

terraform init でワークスペースの初期化

次は、terraform init でワークスペースの初期化の手順です。
コマンドプロンプト上で、test-terraformフォルダに移動し、下記コマンドを入力します。

terraform init

init は「initialize(イニシャライズ)」の略で「初期化」を意味します。
ここまでの手順で正しく設定が行われていれば、下記画像のようにSuccessfullyと出力されます。

正しく設定が行われていれば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上に構築または更新されます。

コマンドが実行されると、指定されたリソースが AWS上に構築または更新される

terraform applyの実行後、改めてplan結果が出力されます。問題なければ「yes」と入力しましょう。実行結果として、「complete」 と表示されていれば構築完了です。

作成したユーザーIDでAWSマネージドコンソールにサインインして、VPCが作成されていることを確認してみましょう。

作成したユーザーIDでAWSマネージドコンソールにサインインして、VPCが作成されていることを確認する

そして、S3バケット内に、オブジェクトが作成されていることも確認しましょう。

S3バケット内に、オブジェクトが作成されていることを確認

デモで作成したVPCをコマンドで削除する方法

今回デモで作成したVPCをterraformのコードで削除する手順を解説します。リソースを削除するには下記のコマンドを実行します。

terraform destroy

このコマンドはTerraform で管理しているインフラリソースを全て削除する際に使用します。
plan結果が出力されるため、1 to destroy となっていることを確認し、「yes」と入力します。「Destroy complete!」と出力されていれば削除完了です。

Terraform で管理しているインフラリソースを全て削除する際に使用するコマンド

まとめ

今回の記事では、前編として、terraformをローカル環境と連携し、実際にVPCを作成する手順を解説しました。

terraformでのコード管理の基礎として重要な部分のみを解説しましたので、この記事の内容はしっかりとおさえておきましょう。

次回は、本題となるEC2やロードバランサーを作成するためのコードをterraform上で記述し、Checovでセキュリティチェックを行うための手順を解説します。

現在クラウドエンジニアとして勤務。AWS(SAP、DOP)とAzure(AZ-305)の資格を保有しており、ネットワークやセキュリティに関する業務を主に行っています。

この記事を含む特集

terraformで書いたコードをCheckovでセキュリティチェックしてみよう!

terraformで書いたコードをCheckovでセキュリティチェックしてみよう!

人気の記事

最新情報をお届けします!

最新のITトレンドやセキュリティ対策の情報を、メルマガでいち早く受け取りませんか?ぜひご登録ください

メルマガ登録