こんにちは!!こんにちは!! インフラエンジニアの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さん
- カスタマーサポート
- hogehogeさん
これを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のコンソールを開いたら、「スタックの作成」をクリックします。
「スタックの作成」フォームが出てくるので、「テンプレートのアップロード」を選択して、上記テンプレートのYAMLファイルをアップロードして「次へ」をクリックします。
「スタックの名前」には他とかぶらないわかりやすい名前をつけます。わかりにくい名前だと、スタック更新や削除などのときに間違えてしまうので要注意です。
「スタックオプションの設定」については現状そのままにしておきます。
確認画面ではフォーム下部にあるチェックボックスを入れないとエラーになります。チェックを入れて「スタックを作成」をクリックします。
するとYAMLに記述したリソースをモリモリと自動的に作成してくれます。
スタック作成後、IAMの管理画面で見ると、グループやユーザーが作られていることがわかります。
また、指定した権限設定も反映されていますね。
今まで作ったものをすべてまるっと削除する場合は、スタック詳細画面で「削除する」をクリックします。
するとYAMLで作成されたリソースがサクサク削除されていき、スタックを作成する前の状態に戻ります。
さいごに
いかがでしょうか?こうやって見ると、CloudFormationって意外と簡単で便利ですよね。
コードとして残りますし、巻き戻しも簡単。コンソールでポチポチリソースを作成するより圧倒的に使いやすいと思います。
CloudFormationオススメですよ!
アクトインディではAWSを愛するインフラエンジニアを募集中です!
ぜひお問い合わせください!