はじめに
Terraformはインフラを宣言的なコードで定義・管理するためのIaCツールです。しかし、Terraformをインストールしただけでは、AWS、GCP、AzureなどといったProviderへアクセスすることはできません。Terraformがクラウド上のリソースを作成・変更・削除するためには、各Providerに対するCredentials(認証情報)の設定が必要です。これが、TerraformとProviderの間を繋ぐ「鍵」の役割を果たします。
本記事では、AWSリソースをTerraformで管理するための、認証情報の設定について紹介します。
Terraformの認証プロセス
TerraformがAWS、GCP、Azureなどのプロバイダーと通信する際の認証プロセスは、以下の図のようになります:
※ 青色の線はリクエストやデータ処理の流れ、黄色の線はレスポンス処理を表しています。
1. Core ⇒ Provider Plugin
Coreは.tfファイル(設計図)を解析し、Provider Pluginへ「どのようなリソースを構築したいか」という指示を出します。例えば、「EC2インスタンスを1台作成」といった命令がこの段階で行われます。
2. Provider Plugin ⇒ Credentials
Provider Pluginは、ProvideのAPIにアクセスするためのCredentialsを取得します。
認証情報は以下の方法から読み込まれます:
- 環境変数
- 認証ファイル
- Providerブロックに直接記述する
3. Credentials ⇒ API Gateway
取得した認証情報を使用して、ProviderのAPI Gatewayにアクセス権を証明します。この証明により、APIへのリクエスト許可を取ることができます。
図書館の貸出システムに例えると:
- 学生証や図書館利用カード = 認証情報
- 「誰が」「どんな権限」を持っているかが記載されています
- 図書館の貸出システム = API Gateway
- カードをかざすと情報を読み取り、利用者の権限を確認
このメカニズムにより、クラウドサービスは利用者の正確な権限を確認し、適切にリソースへのアクセスを提供します。まるで、図書館が適切な利用者にのみに本の貸し出しを許可することと同じなのです。
4. API Gateway ⇒ Core
認証に成功すると、APIからレスポンスが返され、Coreに結果が通知されます。
このレスポンスには、作成されたリソースのID、ステータス、メタデータなどが含まれます。
これらのデータはTerraformにおけるState(状態管理)の基盤となり、インフラの一貫性と再現性を確保する重要な役割を果たします。
認証フローを理解することで、クラウドで何が起こっているのか、誰がどのようにリソースにアクセスできるのかを明確に把握できるようになります。それぞれのProviderには固有の認証メカニズムはありますが、「APIへのアクセス権を安全に証明する」という基本的な考え方は共通しています。
Providerの認証情報を設定する
事前準備
- IAMユーザーを作成し、適切なポリシーを付与する
- アクセスキーとシークレットアクセスキーを取得する
1. 環境変数による認証情報の設定
Terraformは、事前に設定した環境変数からAWS認証情報を自動的に読み取ります。
これにより、安全かつ簡単にAWSリソースにアクセスできます。
mac/Linuxの場合
export AWS_ACCESS_KEY_ID="アクセスキー"
export AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
Windowsの場合
SET AWS_ACCESS_KEY_ID="アクセスキー"
SET AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
# Windows(PowerShell)の場合
$Env:AWS_ACCESS_KEY_ID="アクセスキー"
$Env:AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
2.認証情報ファイルによる設定
~/.aws/credentials
ファイルはAWS CLI、AWS SDK、TerraformなどのツールがAWSに接続する際に使用する認証情報を保存するためのファイルです。
AWS CLIでaws configure
コマンドを実行すると、このファイルが自動的に生成されます。
[default]
aws_access_key_id = "アクセスキー"
aws_secret_access_key = "シークレットアクセスキー"
region = ap-northeast-1
3.Providerブロックによる設定
Terraformの設定ファイル内で直接AWSの認証情報を指定する方法です。
このProviderブロックでは、使用するProviderと、その接続に必要な情報を定義します。
provider "aws" {
region = "ap-northeast-1"
access_key = "アクセスキー"
secret_key = "シークレットアクセスキー"
}
この設定方法は非推奨です。
認証情報をコード内で記述すると、その情報は平文で保存されます。
万が一、GitHubなどのバージョン管理システムにアップロードしてしまった場合、認証情報が第三者に漏洩する危険性があります。
まとめ
TerraformでProviderのリソースを操作するためには、認証情報の設定が必須です。
これは、TerraformがクラウドAPIにアクセスするための「鍵」のような役割を果たします。
インフラをコード化する前に認証のメカニズムとセキュリティの基本を理解することが重要です。