Terraform における Assume Role と S3 Backend

Terraform で S3 を Backend に指定してステートファイルを管理したい。これを達成するため .tf ファイルに次のような記述をするとしよう。 terraform { ... required_providers { aws = { source = "hashicorp/aws" version = "3.23.0" } ... } backend "s3" { bucket = "my-bucket-for-tfstate" key = "terraform.tfstate" region = "ap-northeast-1" } } provider "aws" { region = var.region access_key = var.aws_access_key secret_key = var.aws_secret_key assume_role { role_arn = var.aws_role_arn } } 次に S3 に my-buekct-for-tfstate バケットを作成して terraform init をするとしよう。次のようなエラーが表示されるだろう。 $ terraform init Initializing modules. [Read More]

Switch Role して aws コマンドを発行する方法

ある AWS アカウントから別な AWS アカウントに対して操作をするとき、AWS Console では Switch Role して操作できる。 これと同等の操作を AWS CLI で行う設定を紹介する。設定は $HOME/.aws/config と $HOME/.aws/credentials に記述する。 $HOME/.aws/config $HOME/.aws/config に次のような内容を追加する。 [profile another-project] role_arn = arn:aws:iam::012345678901:role/MyRoleToAssume source_profile = my-terraform 012345678901 は操作対象の AWS アカウントで、MyRoleToAssume は操作対象の AWS アカウントから引き受ける IAM ロールである。arn:aws:iam::012345678901:role/MyRoleToAssume は既に操作対象の AWS アカウント内のロールとして存在していると仮定している。 source_profile は AWS CLI のプロファイルである。ここでは my-terraform というプロファイルを使うと仮定する。なお my-terraform というプロファイル名から想像できるように、Terraform 専用の AWS アカウントから他の AWS アカウントの環境をプロビジョンするときなどに、この記事の内容が役に立つ。 $HOME/.aws/credentials $HOME/.aws/credentials には次のような内容を追加する。 [my-terraform] aws_access_key_id = AKIAXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 特に変わったことはない。単に my-terraform が使う ACCESS KEY と SECRET ACCESS KEY を設定しているだけである。なお、前セクションで設定した $HOME/. [Read More]