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?

Terraform Cloud上でIAM RoleからIAM RoleにSwitch Roleしてみた

Last updated at Posted at 2024-05-27

はじめに

AWSでは、IAM Roleを使用することでユーザーにアクセス権限を直接紐付けずに操作を許可することができます。
その際は、ユーザーが対象のIAM RoleにSwitch Role操作を行うことで、IAM Roleの権限を利用します。(以下のイメージ)

image.png

またユースケースは限られてきますが、一度IAM RoleにSwitch Roleした後、もう一度別のIAM RoleにSwitch Roleする方法も可能です。(参考URL)

上記参考URLでも説明されてますが、以下のようなイメージです。
image.png

本記事では、上記のようなIAM RoleからIAM Roleへの多段Switch Roleを、Terraform Cloud上で実施する方法を試してみました。

以下のようなイメージになります。
image.png

前提
Terraform Cloud上のWorkspaceとAWSアカウントは、IAM Roleでデプロイされるように設定されているものとします。

結論

aws providerでAssumeRole用の設定を追記して、resource側のproviderパラメータでaliasを指定することで自動的に多段SwitchRoleされます。

provider.tf
provider "aws" {
  alias = "default"
  region = "ap-northeast-1"
}

provider "aws" {
  alias = "assume_role"
  region = "ap-northeast-1"
  assume_role {
    role_arn = "arn:aws:iam::123456789123:role/role-b"
    session_name = "assume-role-b"
  }
}
s3.tf
resource "aws_s3_bucket" "main" {
  bucket = "test-default-bucket-123456789132"
  force_destroy = true
}

resource "aws_s3_bucket" "sub" {
  provider = aws.assume_role
  bucket = "test-assume-bucket-123456789132"
  force_destroy = true
}

実施例

事前設定

Terraform Cloud設定

Terraform CloudのWorkspaceにはVariable setsで「terraform-deproy-role」ロールが設定されています。
image.png

AWSアカウント設定

IAMロールの信頼関係ではTerraformの特定のOrganizationからのAssumeRoleを許可しています。
image.png

IAMコンソールのIDプロバイダーでもTerraformとの紐付け設定を実施しています。
image.png

冒頭のTerraform図でいうところのSwitch Role先アカウントの"Role B"のIAM Roleも事前に作成しておきます。(「terraform-assume-role」ロール)
信頼関係のPrincipalではTerraform Cloudと紐付けてるIAM RoleのARNを直接指定しておきます。
image.png

Terraform実行

Terraformを実装してApplyします。
今回はS3バケットを2つ作成するように実装し、片方のS3バケットはSwitchRoleしたIAM Roleでデプロイされるようにしています。
image.png

Terraform initなどのコマンドは省略しますが、Applyを実行するとエラーなく成功し、2 addedと表示されました。
image.png

CloudTrailからCreateBucketイベントを確認してみます。

以下は多段SwitchRoleせずに作成したS3バケットのイベントですが、arnパラメータにWorkspaceで指定したIAM RoleのARNが設定されていることがわかります。
image.png

以下は多段SwitchRoleして作成したS3バケットのイベントです。arnパラメータにprovider.tfで指定したIAM RoleのARNが設定されていることがわかります。
image.png

以上のことから、リソースごとにデプロイで利用するIAM Roleを使い分けできることがわかりました。

おわりに

必要になったので調べてみたら情報がほとんどなかったので、自分で試してみました。
(単純にそのような使われ方をするケースが少ないだけな気もしますね...)

この記事がどなたかの参考になれば幸いです。

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?