アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

AWS CloudFormation入門編:IAMユーザーを管理してみる

こんにちは!!こんにちは!! インフラエンジニアのyamamotoです。

AWSのCloudFormation、使ってますか?
すでに当ブログでも記事になっていますが、布教のために改めて題材にしたいと思います。

これが驚くほど便利なので、だまされたと思って一度使ってみてください!

CloudFormationのスゴイメリット

CloudFormationには、主に下記のようなメリットがあります。
1. インフラのコード化
2. 変更の場合は差分のみ更新される
3. 実行時に不具合があったらロールバックしてくれる
4. まるっと削除できる

1.については最近のトレンドですね。AWSのリソースを用意するのにYAMLやJSONで設定(テンプレートといいます)を書いておけるので、Gitなどにコードとして残しておけます。また、同じ環境や似た環境を作るのもコードから起こすので、コンソールの操作と違って楽にできますね。
2.はCloudFormationの方で、自動的に設定の差分だけを反映してリソースを追加・削除してくれるので、変更しない部分に影響を与えずにうまいこと更新することができます。
3.もCloudFormationがよきにはからってくれる点で、リソースの追加・削除の際にコンフリクトなどの問題が発生したら、作業する前の状態まで自動的に環境を戻してくれます。
最後に4.は、CloudFormationで作ったリソース群は「スタック」という単位で管理されていて、スタックで追加したリソースだけをまるっと削除できるので、他の環境に影響を与えずにスクラップアンドビルドが簡単にできます。

CloudFormationでIAMのユーザー管理をしてみる

前述のような特長から、CloudFormationを使うのに一番メリットがあるのは、IAMのユーザー管理だと(勝手に)思っています。
ユーザーの追加や削除、グループの変更や権限設定は頻繁に行われるので、CloudFormationのメリットが生かされるのではないでしょうか。

ということで今回はCloudFormationのお試しで、ユーザー管理を取り扱ってみます。
すでにmorishitaがAWS CDKでIAMユーザーを作成するネタを披露していますが、こちらはプレーンなCloudFormationなので比較材料になると思います。

ここでは、簡単に下記のようなユーザー環境を構築してみたいと思います。

  • グループは以下の通り
    • デザイナー
      • AWSのコンソールにはアクセスできない
      • 作業環境構築のため、ECRのリポジトリにだけアクセスできる
    • カスタマーサポート
      • AWSのコンソールにアクセスできる
      • ユーザーサポートのため、Athenaにだけアクセスできる
  • ユーザーは以下の通り
    • hogehogeさん
      • デザイナー
    • fugafugaさん
      • カスタマーサポート

これをCloudFormationの設定にすると、下記のようになります。

Resources:
  # グループdesigner:デザイナー
  # 権限:AWSコンソールアクセス不可。ECRのイメージダウンロード権限
  GroupDesigner:
    Type: "AWS::IAM::Group"
    Properties:
      GroupName: "designer"
      Path: "/"
      Policies:
        - PolicyName: "ECRRepository"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: "Allow"
                Action:
                  - "ecr:GetAuthorizationToken"
                  - "ecr:BatchCheckLayerAvailability"
                  - "ecr:GetDownloadUrlForLayer"
                  - "ecr:DescribeImages"
                  - "ecr:BatchGetImage"
                Resource:
                  - "*"

  # グループcustomersupport:ユーザーサポート
  # 権限:AWSコンソールアクセス、Athenaの操作権限
  GroupCustomerSupport:
    Type: "AWS::IAM::Group"
    Properties:
      GroupName: "customersupport"
      Path: "/"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonAthenaFullAccess"

  # ユーザーhogehoge氏
  # 権限:designerグループ。コンソールアクセス不可。要キー作成
  UserHogehoge:
    Type: "AWS::IAM::User"
    Properties:
      Path: "/"
      UserName: "hogehoge"
      Groups:
        - "designer"

  # ユーザーfugafuga氏
  # 権限:custemersupportグループ。コンソールアクセス可
  UserFugafuga:
    Type: "AWS::IAM::User"
    Properties:
      Path: "/"
      UserName: "fugafuga"
      Groups:
        - "customersupport"
      LoginProfile:
        Password: "initialpassword"
        PasswordResetRequired: true

各設定項目などはマニュアルなどで調べてみてください。ただ、マニュアルは2000ページ以上あってけっこう大変です…… https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-ug.pdf

CloudFormationのコンソールを触ってみる

そして、これをCloudFormationのコンソールに登録します。 もちろんCLIにも対応していますが、コンソールでも簡単に作業することができます。

CloudFormationのコンソールを開いたら、「スタックの作成」をクリックします。
f:id:yamamoto-kazuyasu:20190813122746p:plain

「スタックの作成」フォームが出てくるので、「テンプレートのアップロード」を選択して、上記テンプレートのYAMLファイルをアップロードして「次へ」をクリックします。
f:id:yamamoto-kazuyasu:20190813122846p:plain

「スタックの名前」には他とかぶらないわかりやすい名前をつけます。わかりにくい名前だと、スタック更新や削除などのときに間違えてしまうので要注意です。
f:id:yamamoto-kazuyasu:20190813122929p:plain

「スタックオプションの設定」については現状そのままにしておきます。
f:id:yamamoto-kazuyasu:20190813122946p:plain

確認画面ではフォーム下部にあるチェックボックスを入れないとエラーになります。チェックを入れて「スタックを作成」をクリックします。
f:id:yamamoto-kazuyasu:20190813122956p:plain

するとYAMLに記述したリソースをモリモリと自動的に作成してくれます。
f:id:yamamoto-kazuyasu:20190813123013p:plain

スタック作成後、IAMの管理画面で見ると、グループやユーザーが作られていることがわかります。
f:id:yamamoto-kazuyasu:20190813123033p:plain f:id:yamamoto-kazuyasu:20190813123107p:plain

また、指定した権限設定も反映されていますね。
f:id:yamamoto-kazuyasu:20190813123131p:plain f:id:yamamoto-kazuyasu:20190813123048p:plain

今まで作ったものをすべてまるっと削除する場合は、スタック詳細画面で「削除する」をクリックします。
するとYAMLで作成されたリソースがサクサク削除されていき、スタックを作成する前の状態に戻ります。
f:id:yamamoto-kazuyasu:20190813123147p:plain

さいごに

いかがでしょうか?こうやって見ると、CloudFormationって意外と簡単で便利ですよね。
コードとして残りますし、巻き戻しも簡単。コンソールでポチポチリソースを作成するより圧倒的に使いやすいと思います。
CloudFormationオススメですよ!

アクトインディではAWSを愛するインフラエンジニアを募集中です!
ぜひお問い合わせください!