AssumeRole
権限を移譲するための仕組みのようです。
参考
概要
今回は、アカウントAのAWSリソースを、アカウントBが使うというケースをAssumeRoleでやります
例として、以下のアカウントIDだとします。
- アカウントA
210987654321
- アカウントB
123456789012
つまり、アカウントAが権限を付与する方で、アカウントBが権限を要求する立場です。
権限を付与するアカウント(210987654321)での作業
ロールを作るだけ
AWSのコンソールからIAMを選択
ロールを作成します
そのロール作成の際に、「別のAWSアカウント」を選びます
次に権限の画面になりますが、任意の権限を選びます
今回アドミン権限にしますが、本来は用途に絞った権限を選択すべきです
ロールの名前を決めて保存します。
今回はAssumeRoleSample
としました
権限を以来するアカウント(123456789012)での作業
任意のユーザーを作ります
権限はデフォルトの状態でOKです
任意のグループを作ります。
権限はとりあえずデフォルトの状態でOKです
今回はこの作成したグループにAssumeRoleの権限を付与します
ポリシーの作成
アカウントAに対して権限を移譲してほしいと依頼するわけですが、
その「移譲を依頼する」という権限をつけないといけないぽいです
ポリシーの作成から
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789012:role/AssumeRoleSample" } ] }
"arn:aws:iam::123456789012:role/AssumeRoleSample"
これがキモです。
アカウントAのIDと、ロール名称を指定します。
そしてこのポリシーを保存。
(AssumeRoleSampleという名前でポリシーを保存.名前は任意です)
そしてこのポリシーをグループにアタッチ
これで準備完了。
terraform
terraformで実験
terraform { required_version = "0.12.24" } variable "assume_role" { } provider "aws" { region = "ap-northeast-1" assume_role { role_arn = var.assume_role } } resource "aws_vpc" "main" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true enable_dns_support = true tags = { Name = "vpc for test" } } resource "aws_internet_gateway" "igw" { vpc_id = aws_vpc.main.id tags = { Name = "igw for test" } }
さらに、環境変数を注入して実行します
terraform.tfvars
assume_role = "arn:aws:iam::123456789012:role/AssumeRoleSample"
アクセスキーとIDの環境変数への登録(上記tsvarsでやってもいいけど)
export AWS_ACCESS_KEY_ID=access id export AWS_SECRET_ACCESS_KEY=access key
このアクセスIDとKEYはアカウントBの情報です。
アカウントBとしてログインしてアカウントAに移譲を依頼。
terraform plan -var-file="terraform.tfvars"
問題なければ
terraform apply -var-file="terraform.tfvars"
これで実行するとAWSリソースができているはず。
アカウントAのコンソールにログインしてVPCができていることを確認。
お片付け
terraform destroy -var-file="terraform.tfvars"