0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TFC Dynamic Credentialsの検証

Posted at

この記事はAWS前提のものです

TFC Dynamic Credentialsとは

  • Terraform Cloud(以下TFC)に実装されたCredentialを動的に発行する仕組み
  • Terraformで何かしらデプロイする際はデプロイ先にアクセスできるCredentialが必要となる
  • AWSなどであれば、専用のIAMでAPIキー周りを発行して利用するような形がシンプル
  • セキュリティ的にはできれば上記のAPIキーはローテーションするのが望ましいが運用コストがかかる(めっちゃ面倒)
  • Dynamic Credentialsを設定すると動的にCredentialを発行することができ、セキュリティリスクと運用コストを減らせてハッピー

参考ドキュメント

Hashicorp - Authenticate providers with dynamic credentials
Hashicorp - Dynamic Credentials with the AWS Provider

実装時の流れ

  • デプロイ先のAWS上でOIDC IDプロバイダとそれに付与するIAMロールを作成する
  • TFCのワークスペースに変数を追加する

事前準備

  • あらかじめ必要な設定値
名前 説明
SITE_ADDRESS Terraform Cloud のアドレス(app.terraform.io を設定)
AUDIENCE_VALUE aws.workload.identity を設定
ORG_NAME TFC上のORG NAME
PROJECT_NAME ポリシーを適用するTFC上のプロジェクト名
WORKSPACE_NAME ポリシーを適用するTFC上のワークスペース名

手順

AWS上でOIDC IDプロバイダを作成する

デプロイ先のAWSアカウントでOIDC IDプロバイダを作成

  • IAM > ID プロバイダ > プロバイダを追加を選択
    image.png

下記の設定値を入力する

  • OpenID Connectを選択
  • プロバイダのURL:https://app.terraform.io
    • サムプリントを取得を押下する
  • 対象者:aws.workload.identity を入力

IDプロバイダが作成されたことを確認する

image.png

AWS上でOIDC IDプロバイダに付与するIAMロールを作成する

下記ではterraform planとterraform applyで同一のロールを付与する前提の記載にしています。
planとapplyで別々の権限が必要である場合はロールを分ける形になるので、参考ドキュメントを参照して記述を適切に修正して下さい

  • IAMロール作成画面まで遷移
  • カスタム信頼ポリシーを選択し、下記の設定を任意の値を差し替えて入力する
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "先ほど作成したOIDC IDプロバイダのARNを入力"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "app.terraform.io:aud": "{AUDIENCE_VALUE}"
                },
                "StringLike": {
                    "app.terraform.io:sub": "organization:{ORG_NAME}:project:{PROJECT_NAME}:workspace:{WORKSPACE_NAME}:run_phase:*"
                }
            }
        }
    ]
}
  • 許可ポリシーはデプロイ内容に合わせて適切なものを設定
  • 作成したIAMロールのARNを控えておく

TFC上のワークスペースに変数を追加する

  • TFCの目的のワークスペースに移動し、Variables画面に遷移する
  • Workspace Variables に下記の設定値を入力する( 必須 )
    • TFC_AWS_PROVIDER_AUTH(Environment variable):true
    • TFC_AWS_RUN_ROLE_ARN(Environment variable):OIDC IDプロバイダに付与したIAMロールのARN
  • 必要に応じてオプションの変数の追加も検討する
    • (terraform コード内でregionを指定していない場合に設定)AWS_REGION:ap-northeast-1 など
    • (IDトークンをデフォルト(aws.workload.identity)から変更する場合の指定)TFC_AWS_WORKLOAD_IDENTITY_AUDIENCE:任意の値
    • (planとapplyでroleを分離する場合)TFC_AWS_PLAN_ROLE_ARN:planで利用するIAMロールのARN
    • (planとapplyでroleを分離する場合)TFC_AWS_APPLY_ROLE_ARN:applyで利用するIAMロールのARN

これでplan , apply 時に動的なCredentialが発行、利用されるようになるのでterraform plan などを実行して正常に動作するか確認して下さい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?