AssumeRole
権限を移譲するための仕組みのようです。
参考
christina04.hatenablog.com
qiita.com
概要
今回は、アカウント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"