AzureアカウントをTerraformに連携する方法とは?
Terraformで構築したAzure環境のセキュリティを、Checkovで徹底的に強化したい方向けに、本記事では、AzureとTerraformを連携させ、Checkovを使ってインフラコードのセキュリティチェックを行う方法を2つのステップで詳しく解説します。
前編:Azureアカウントの作成からTerraformの初期設定までの手順を丁寧に解説
後編:Terraformコードを書いて、Checkovでセキュリティスキャンを実行し、安全なインフラ環境を構築する方法を学ぶ
本シリーズを通じて、AzureとTerraformの連携からCheckovを使ったセキュリティ管理まで、実用的な知識を習得できる内容となっていますので、ぜひ最後までご覧ください。
terraformやCheckovの基礎となる概要や利用するメリットについて知りたい方は、以下の記事で解説していますので合わせてご確認ください。
事前準備(今回の解説で使用するツール)
Azureのリソースを作成するために、Azureアカウントが必須です。アカウントの作成がまだの場合は、アカウントを作成し、サブスクリプションの作成まで完了させてください。
さらに、今回の解説を進めるにあたり、以下の3つのツールが必要になります。
- Azure CLI:以下を参照してインストールしてください。
https://learn.microsoft.com/ja-jp/cli/azure/ - VSCode(Visual Studio Code)
https://code.visualstudio.com/download - Terraform
これらのツールがまだインストールされていない場合は、それぞれの公式サイトからインストールを完了させてください。Terraformのインストール手順については、詳しく解説した記事がございますので、以下の記事を参考にしてください。
この3つのツールが準備できたら、次のステップに進み、Azureアカウントとの連携作業に取りかかりましょう。
terraformを利用してAzureのリソースを構築する際の流れ
まずは、全体の流れを把握しましょう。Terraformを使ってAzureリソースを構築する際の基本的な流れは、以下の6つのステップで進行します。
- terraform用のAzureユーザーを作成
- ローカルPCとAzureアカウントの紐づけ
- backendファイル作成(terraformで一番重要なファイル)
- terraform init でワークスペースの初期化
- VScodeでコード執筆
- Azure上にリソースデプロイ
terraform用のAzureユーザーを作成
まず最初のステップでは、Azureポータルの画面上でのユーザー作成です。今回は「グローバル管理者」権限を持ったユーザーを作成して解説します。実環境で利用する場合は、最小権限の原則にのっとった権限を付与してください。
ユーザーは既存のユーザーでも問題ありませんが、Terraformに特化したユーザーを作成することで、権限管理の手間やセキュリティリスクを最小限に抑えられます。
ローカルPCとAzureアカウントの紐づけ
次に、ローカル環境でAzure CLIを使用して、Azureアカウントと接続します。
コマンドプロンプト(Macはターミナル)に、下記コマンドを入力することで接続可能です。
az login |
上記コマンドを実行すると、自動的にWebブラウザが開き、Azureのログイン画面が表示されます。今回利用するアカウントでサインインを行いましょう。
ログイン後、以下の表示が出ていれば、ページを閉じてターミナルを確認します。
ターミナル上でもエラーが出ていなければ、ステップ2 アカウントの紐付け作業は完了です。
backendファイル作成
次のステップが、backendファイルの作成です。backendファイルで、AzureやAWSといったプロバイダー情報やリージョン、JSONコードが記述されたファイルの保管場所などの情報を定義します。
backendファイルの作成手順は以下のとおりです。
- backendファイルを格納するフォルダの作成
- backend.tfファイルを作成
- VSCodeでファイルにコードを記述
今回は、Terraformがデプロイしたインフラの「現在の状態」が保存されたtfstateファイルを、AzureのS3バケット内に配置します。
AzureポータルのS3のページからtfstateファイルを格納するためのバケットを「バケットを作成」から作成してください。
mkdir OpsToday-terraform |
mkdir ”任意の名前” でフォルダを作成。
cd OpsToday-terraform |
cd コマンドで作成したフォルダに移動。
touch backend.tf |
このコマンドを入力しbackend.tf ファイルを作成します。そして、フォルダ内に、backend.tfファイルが作成されていることを確認し、backend.tfファイルをVSCodeで開きます。
先程作成したbackend.tfファイル内に下記のコマンドを記述します。
#Azure Providerの指定 terraform { required_version = “= 1.9.6” #terraformのバージョン backend “azurerm” { resource_group_name = “opstoday-terraform-rg” #ストレージのリソースグループ名を入力 storage_account_name = “opstodaytfstate1128” #Azureポータル上のストレージ名を入力 container_name = “opstodayterraformtfstate” #ストレージ内のtfstateを保存するコンテナー名を入力 key = “opstoday.terraform.tfstate” #オブジェクト名を入力 ない場合は新規作成される } } provider “azurerm” { features {} subscription_id = <> #環境に合わせて変更してください。 } |
このコードを記述する際は、3つの注意するべき点があります。
- 実行環境にインストールされているTerraformバージョンが異なる場合、適切なバージョンに変更してください。
- ストレージ名は全世界で「一意」である必要があります。
- ストレージ内のコンテナ名は一意である必要があります。同じ名前のコンテナがすでに存在する場合は、変更してください。
※ストレージ名やコンテナ名に使える文字や命名規則についてはAzure公式ドキュメントでご確認ください。
コードの記述が終われば、ステップ3 backendファイル作成が完了です。
terraform init でワークスペースの初期化
次は、terraform init でワークスペースの初期化の手順です。
コマンドプロンプト上で、test-terraformフォルダに移動し、下記コマンドを入力します。
terraform init |
init は「initialize(イニシャライズ)」の略で「初期化」を意味します。
ここまでの手順で正しく設定が行われていれば、下記画像のようにSuccessfullyと出力されます。
VScodeでコード執筆
ここまでの手順でローカル環境とterraformの連携は終了ですが、デモとしてterraformでリソースグループを作成する手順を解説します。
まずは、test-terraformフォルダ内に「resouce-group.tfファイル」を作成し、作成したファイルをVSCodeで開きます。作成したresouce-group.tfファイル内に下記のコードを入力しましょう。
# リソースグループの作成 resource “azurerm_resource_group” “OpsToday-terraform-rg” { name = “osptoday-terraform-rg” location = “japaneast” } |
コードが書けたらターミナルで下記コマンドを入力します。
terraform plan |
このコマンドを実行することで、どのリソースが追加・変更・削除されるかを確認できます。
Plan:1 to add →今の環境にリソースが追加される
0 to change →Azure環境内にすでにあるリソースに変更が加わる
0 to destroy →Azure環境内のリソースが削除される
今回はリソースグループを1つ作成する予定なので「1 to add」と記載されていれば成功です。
Azure上にリソースデプロイ
コードを執筆し、terraform planで確認まで行ったら下記のコマンドを実行します。
terraform apply |
このコマンドは、terraform plan で生成された計画(プラン)を基に、実際にインフラに対する変更を適用します。このコマンドが実行されると、指定されたリソースが Azure上に構築または更新されます。
terraform applyの実行後、改めてplan結果が出力されます。問題なければ「yes」と入力しましょう。実行結果として、「complete」 と表示されていれば構築完了です。
作業完了後、Azureポータルにログインして、リソースグループが作成されていることを確認してみましょう。
続けて、指定したストレージのコンテナ内にtfstateファイルが作成されていることを確認しましょう。このファイルをダウンロードして、中身を見ると、JSON形式でリソースの状態が記録されています。
デモで作成したリソースをコマンドで削除する方法
今回デモで作成したリソースグループをterraformのコードで削除する手順を解説します。
リソースを削除するには下記のコマンドを実行します。
terraform destroy |
このコマンドはTerraform で管理しているインフラリソースを全て削除する際に使用します。
plan結果が出力されるため、1 to destroy となっていることを確認し、「yes」と入力します。
「Destroy complete!」と出力されていれば削除完了です。
まとめ
今回の記事では、AzureアカウントをTerraformに連携する方法とは?と題して、terraformをローカル環境と連携し、実際にリソースグループを作成する手順を解説しました。
次回は、本題となるVMやロードバランサーを作成するためのコードをterraform上で記述し、Checovでセキュリティチェックを行うための手順を解説します。
TerraformでAzure環境を構築する際、セキュリティ対策は欠かせません。運用している環境のセキュリティが気になるインフラ担当者はぜひ次回もご覧ください!