2017-02-18 3 views
4

多くのIAMユーザーがおり、すべてTerraformを使用してEC2上にセルフサービスインフラストラクチャを作成しています。ユーザーはインスタンスのキーを必ずしも設定しないので、インスタンスを特定のユーザーに結びつけるのは難しいです。どのユーザーがインスタンスを作成しているかをCloudTrailで調べることができますが、現行のIAMユーザー名でインスタンスにタグを付ける方が簡単なようです。terraformでのIAMユーザー名の取得

Terraformはこれを公開していないようです - aws_caller_identityまたはaws_canonical_user_idを使用できますが、どちらも特定のIAMユーザー名ではなく組織アカウントを返すように見えます。 Terraformにインスタンスを作成するIAMユーザーを返すデータソースがありますか?

答えて

2

aws_caller_identitydoesn't actually callSTS GetCallerId endpointのように、必要な情報、具体的にはコマンドを実行しているユーザーのユーザーIDとユーザーIDを指定することができます。

代わりに、より簡単なオプションが使用され、AWSクライアントがすでに定義しているaccountidを単に使用し、単にそれを返します。

ここには2つのオプションがあります。 aws_caller_identityデータソースがSTS GetCallerIdエンドポイントを実際に呼び出すようにプルリクエストを発生させるか、ローカルプロビジョナを使用してシェルを外してリソースにタグを付けることができます。

明らかに、Terraformが提供している生のリソースを直接使用するためにTerraformを作成しているのであれば、タグ付けされていないものを殺す以外に他の人のUserIdまたはArn。

あなたは、人々は、ソースが、あなたはEC2インスタンスを作成したモジュールで、このような醜い何かができる代わりに、それらを使用するモジュールの束を持っている代わりに、場合:

resource "aws_instance" "instance" { 
    ami = "ami-123456" 
    instance_type = "t2.micro" 
    tags { 
     Name = "HelloWorld" 
    } 
    lifecycle { 
     ignore_changes = [ "tags.Owner" ] 
    } 
    provisioner "local-exec" { 
     command = <<EOF 
owner=`aws sts get-caller-identity --output text --query 'Arn' | cut -d"/" -f2` 
aws ec2 create-tags --resources ${aws_instance.instance.id} --tags Key=Owner,Value=$${owner} 
EOF 
    } 
} 

上記のテラフォームが作成されます。 EC2インスタンスを正常にした後、 "Owner"タグを無視します。インスタンスを作成すると、ユーザーのIAMアカウント名/ロールをフェッチし、その値を使用してインスタンスの「所有者」タグを作成するローカルシェルスクリプトが実行されます。

+1

私を正しい軌道に乗せてくれてありがとう!私は 'aws_caller_identity'がアカウントに加えてARNのリソース部分を公開するようにPRを受けようとしています。それは私のユースケースには十分です。 – alanctgardner

関連する問題