LoginSignup
4
3

More than 5 years have passed since last update.

既存のIAM Userをterraformの管理下へ

Last updated at Posted at 2018-02-06

TL;DR

  • 既存AWSアカウントに複数のIAM Userがいるのでterraformの管理下におきたい(という話を聞いたので書いた)
  • terraform import でちまちまやるとtf戻しもめんどくさい(そりゃそうですね)
  • terraforming 万歳

作業

alias terraforming='docker run --rm --name terraforming -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY -e AWS_REGION=$AWS_DEFAULT_REGION quay.io/dtan4/terraforming:latest terraforming'
  • 走らせる前に環境変数をエクスポートしておきましょう
  • セキュリティが気になるなら専用のROロールを用意するとか、環境変数に依存しないやりかたを考えるとかしてください
export AWS_DEFAULT_REGION=
export AWS_SECRET_ACCESS_KEY=
export AWS_ACCESS_KEY_ID=
  • お試し
$ terraforming iamu
resource "aws_iam_user" "terraform" {
    name = "terraform"
    path = "/"
}

resource "aws_iam_user" "test01" {
    name = "test01"
    path = "/"
}
  • リダイレクトで適当なファイルに送ればOK
  • iam系のコマンドをそれぞれファイルに吐けばそれだけでいったん管理は出来る、はず
  • あとは分割するなりディレクトリわけるなり、目的に応じた管理単位にすればいいと思います

蛇足

元々はユーザ名でリソース管理するのは大変って話だったので、簡素化するための案を1つ書いておきます。

前述のとおり、terraforming で出力した tf データは値は正しいのですが、terraform で実際にリソースを管理するための参照形式にはなっていません。なので、どのみち手を入れることになります。というわけで。

$ tree iam
iam
|-- test01
|   `-- iam.tf
`-- test02
    `-- iam.tf

こんな感じで1ユーザ1ディレクトリ1tfファイル、リソースの名前(nameじゃなくてリソースタイプの次のところの)はthisとかに固定すると楽かなって。

iam/test01/iam.tf
resource "aws_iam_user" "this" {
  name = "test01"
  path = "/"
}

resource "aws_iam_user_policy_attachment" "test-attach" {
    user       = "${aws_iam_user.this.name}"
    policy_arn = "${aws_iam_policy.policy.arn}"
}

// その他関連リソース

前述のように管理体として、iam ディレクトリ、ユーザ名ディレクトリ、にしておいて、こんな感じのコマンドでぶん回せば、管理しやすいのではないか、と思いました。

4
3
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
4
3