[アップデート]Terraform CloudがValutやAWS,Azure,Google Cloudに対してOIDCで動的なクレデンシャル生成に対応
「Terraform CloudもGithub ActionsみたいにOIDCを使ってAWS認証とかできたら最高だな」
と思ったことはありません?
そんな方に朗報です。Terraform CloudがValutとクラウドプロパイダー(AWS,Azure,GCP)に対してOIDCで動的なクレデンシャル生成に対応しました。(beta版 2023/1/31時点 2023/4/9 GAになりました)
Terraform Cloud Adds Dynamic Provider Credentials for Vault and Official Cloud Providers
今回はAWSでこのアップデートの内容を試してみました。
アップデート概要
これまでは、Terraform CloudでAWS,Azure,GCPなどにリソースをデプロイする際に、静的なクレデンシャル(AWSだったら、IAMアクセスキー)が必要でした。
静的なクレデンシャルの手動ローテーションは、運用負荷やセキュリティ的なリスクがあります。
今回のアップデートでOIDCを使って、動的なクレデンシャルを生成できるようになりました。
凄くざっくりいうと、「Terraform CloudでAWS認証にIAMアクセスキーを使っていた部分を、IAMロールに置き換えられるようになった」ということです。
ちなみに、OpenID Connectの仕組みは以下の記事がわかりやすかったです。
一番分かりやすい OpenID Connect の説明 - Qiita
やってみた
以下のチュートリアルをやってみました。
Authenticate Providers with Dynamic Credentials | Terraform | HashiCorp Developer
OIDC用のIAM関連リソース作成
IDプロパイダーやIAMロールもTerraformで作成します。
コードについては、チュートリアルやGithubで見てもらった方がわかりやすいと思うので省略します。
作成されるリソースは以下です。
- Terarform Cloud用のIDプロパイダー
- Terarform Cloudのワークスペースで使用するIAMロール
Terraform CloudがIAMロールを引き受けれるように、信頼関係を設定します。 (大文字部分は各自の環境に置き換える必要があります)
その際に、SITE_ADDRESS:sub
の部分でどのWorkspace・Projectで許可するという設定もできます。(最近追加されたProjectも対象になってて嬉しい)
RUN_PHASE
の部分では、plan・applyといったフェーズでも許可を設定できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "OIDC_PROVIDER_ARN" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "SITE_ADDRESS:aud": "AUDIENCE_VALUE", "SITE_ADDRESS:sub": "organization:ORG_NAME:project:PROJECT_NAME:workspace:WORKSPACE_NAME:run_phase:RUN_PHASE" } } } ] }
Workspaceの作成
前の手順でTerraform Cloud用のIAMロールを作成できました。
作成したIAMロールを使って Terraform Cloud上からAWSリソースを作成できるか確認するために、Workspaceを作成します。
以下設定でWorkspaceを作成します。
チュートリアルの手順をやっている場合は、Terraform Working Directory
をaws/infra
に設定するのを忘れないようにしましょう。
- Project: Default Project
- Workspace: learn-terraform-dynamic-credentials
IAMアクセスキーを使う方法では、Workspaceの環境変数にアクセスキーとシークレットアクセスキーを登録しました。
今回はIAMロールを使って動的クレデンシャル生成するため、IAMロールのARNを登録します。
ちなみに、ApplyとPlanで異なるロールを使うこともできます。
Applyを実行してみる
Applyも問題なく成功しています。
Tips: TerraformでWorkspaceと一緒にOIDC用のリソースを作成
「OIDC用のIAMリソース作成・Workspaceに環境変数として設定」を毎回行うのは少し面倒なので、一連の作業をTerraformで自動化したくなるとお思います。
そんな時には、以下のサンプルコードが参考になります。
サンプルコードには、以下の内容が含まれています。
- OIDC用のリソース作成
- Terraform CloudのWorkspace作成
- Workspaceの環境変数に認証に必要な値を設定
おわりに
Terraform Cloudで動的なクレデンシャル作成が可能になったアップデートでした。
永続的なクレデンシャル管理の必要がなくなって、Terraform Cloudの運用負荷が下がる嬉しいアップデートでした。
以上、AWS事業本部の佐藤(@chari7311)でした。