2
2

terraform でIAMユーザを作成して簡易的に追加できるようにした

Last updated at Posted at 2024-08-29

開発経緯

チームに新しい人が加わった時に、いちいちAWSのユーザ登録をし、その情報を新規メンバーに送るのが面倒であるため、簡略化したい

概要

Teraaform上のコマンドの実行のみでAWS上にIAMユーザを追加できるようにする
作成したIAMユーザの情報をテキストファイルとして格納し、スラックで通知することでログイン情報を自動取得する

アーキテクチャ図

スクリーンショット 2024-09-10 23.51.46.png

ディレクトリ構成


├── README.md
├── backend.tf                           # teraformのStateやVersionを管理
├── iam_user.tf                          # 新規ユーザを作成し、ログイン情報をファイル形式へ変換
├── output.tf                            # アウトプット状況に基づいて、ログインに必要なパスワードを生成
├── provider.tf                          # providerを設定
└── s3.tf                                # 新たに作成されたyユーザのログイン情報を{ユーザ名}.txtとして格納

S3にユーザ情報が保存されるまでの思考過程

ユーザを追記したら、そのログイン情報が勝手にS3にアップロードされる必要がある
情報を管理するために、S3に保存するためには、一旦ファイル形式で格納しておくことが必要

  • localfileでファイル名とコンテントを記入することで、指定フォルダにファイルが可能になる
  • また今回はファイルの形式も指定しているが、他にもCSV形式などで指定することも可能
    今回は以下の情報をIAMから撮ってきてlocalfileに格納した
    resource "local_file" "user_info" {
      for_each = aws_iam_user.test_new_user
      filename = "${pathexpand("./")}/${each.value.name}_user_info.txt"
      content  = <<EOF
        IAM User Name: ${each.value.name}
        Password: ${aws_iam_user_login_profile.test-login-profile[each.key].password}
        Login URL: <https://wevox-login.signin.aws.amazon.com/console>
    EOF
    }
    
    

Lamdaによるアップロードを検知する

  • lambdaに関して
    • イベント発生時に、コードを実行し、リソースを自動的に管理するもの
    • なんらかのイベントの発生に伴い、あらかじめ設定した処理が行われるもの
      file_key = record['s3']['object']['key']
              response = s3.get_object(Bucket=bucket_name, Key=file_key)
              content = response['Body'].read().decode('utf-8')
              message = f"新しいIAMユーザ '{file_key}' が追加されました。\\n\\nログイン情報:\\n{content}"
      

Slackへのログイン情報通知

参考文献

以下の記事を参考にさせていただきました。
・ https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_user_group_membership

https://qiita.com/hiyanger/items/8f925e21166461a5ddb1

2
2
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
2
2