web-dev-qa-db-ja.com

Terraformが別のアカウントの単一のリソース変更に対して異なるSTSの役割を担うようにするにはどうすればよいですか?

私はすべてのroute53ゾーンを制御するメインアカウントの下に、開発、QA、本番用のAWSサブアカウントを持っています。 Terraformですべてを管理します。そのメインアカウントのSTSAssumeRole Crossアカウントロールを使用して、サブアカウントにアクセスします。 .aws/configファイルでarnのロールを使用し、使用するアカウントのプロファイルを使用するようにawsプロバイダーに指示します。

現在、1つのサブアカウント(stsの役割を想定)のプロファイルを使用して実行しているときに、terraformがその親アカウントでroute53ゾーンを作成または変更できるようにする方法を理解しようとしています。

Route53リソースを適用しようとすると、次のエラーが表示されます: "aws_route53_record.default:AccessDenied:User:arn:aws:sts :: ID-OF-SUB-ACCOUNT:assumed-role/Cross-Production/COMPANYNAME-prod- 01-awsume-sessionには、このリソースのステータスコードへのアクセスが許可されていません:403、リクエストID:BLAHBLAHBLAH "

コマンドラインで--profileを指定したくない場合、awsumeを使用してプロファイルの環境変数をオンザフライでスワップします。

Terraformに別の役割を引き受けるように指示する方法、または現在の役割(メインアカウントの管理ユーザーに戻す)の引き受けを停止する方法を理解する必要があります。どうすればいいのかわからない。助言がありますか?

2
Alex Vanino

Terraformは 複数のプロバイダーをサポートしています

provider.tf

# default provider
provider "aws" {
  access_key = "foo"
  secret_key = "bar"
  region     = "us-east-1"
}

provider "aws" {
     alias  = "aws-assume"
     assume_role {
        role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
        session_name = "SESSION_NAME"
        external_id  = "EXTERNAL_ID"
     }
 }

とリソースの使用

resource "aws_instance" "foo" {
  provider = "aws.aws-assume"

  # ...
}
3
strongjz