ベストプラクティスに従ったコンソールログイン用のIAM環境をCloudFormationで設定してみた(設置編)

2018.04.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

先日、紹介させていただいたAWSのベストプラクティスに従ったAWSコンソールログイン用設定を CloudFormationテンプレートを利用して、展開する方法について紹介させて頂きます。

AWSコンソールのログイン用アカウントをIAMのベストプラクティスに従って作成してみた(設定編)

事前確認

CloudFormationを利用した設定の前に、CloudTrail設定状況と、IAMユーザのパスワードポリシーについて確認を行います。

CloudTrail設定確認

CloudTrailダッシュボード

  • IAM操作ログの保持のため、バージニア(us-east-1)、Ec2などを利用する(東京:ap-northeast-1)リージョンのCloudTrail設定が有効な事を確認します。
  • 過去90日間の証跡ログはダッシュボードでの確認が可能になりましたが、S3上で一定期間保存される事をおすすめします。

IAM パスワードポリシー

IAMダッシュボード

  • IAMユーザのパスワードポリシーを設定します。
  • 今回はパスワードの強度を保つため、文字数をデフォルトから増やす設定を行いました。
  • 社内規定や総務省のガイドラインなどを元に、適切な設定を行う事をおすすめします。

CloudFormation設定

  • バージニアリージョン(us-east-1) でCloudFormationを実行し、AWSコンソールログイン用のIAM設定を行います。

CloudFormationテンプレート入手

  • 以下の記事の最後に紹介したCloudFormationテンプレートを利用します。

AWSコンソールのログイン用アカウントをIAMのベストプラクティスに従って作成してみた(設定編)

  • ダウンロード例(wget)
    wget https://raw.githubusercontent.com/suzryo/aws/master/CFn/iam-best-practices/iam-user-for-aws-console-login.yaml

  • 不正な改竄などがない事を確認した上で利用する事をおすすめします。

    $ md5sum iam-user-for-aws-console-login.yaml
    031fd3a28cadb1ce8bed983db7e7bb6d  iam-user-for-aws-console-login.yaml

  • AWS CloudFormation Designerを利用し、 テンプレートの設定内容をGUIで確認する事も可能です。

CloudFormationデザイナーをはじめよう

スタックの作成

  • バージニアリージョンでスタックの作成を行います。
  • 今回のテンプレート、バージニアリージョン以外でも設置する事は可能ですが、通知などに制限が生じます。

CloudFormationダッシュボード

  • 先にダウンロードテンプレートファイル(iam-user-for-aws-console-login.yaml )を選択
  • 「テンプレートをS3にアップロード」して利用します。

             

詳細の指定

テンプレートで利用するパラメータなどの設定を実施します。

スタックの名前
  • スタックの名前は任意に付与します。今回はテンプレート名と同じ「iam-user-for-aws-console-login」としました。
AllowCreateAccessKey
  • 今回のテンプレートでは、アクセスキーは利用するシステムごとに発行するものとし、AWSコンソール用のIAMユーザはアクセスキーの発行、利用を禁止としています。
AllowIPrangeAssumeRole
  • 特定拠点やVPNなどの固定IPで、AWSコンソールの接続元IPアドレスを限定出来る場合には、デフォルトの「0.0.0.0/0」から変更します。
  • 複数拠点の許可が必要な場合、当パラメータでの展開はできないため、CloudFormationテンプレート(YAML)の「aws:SourceIp」を修正するなどして対応してください。
            Condition:
              Bool:
                aws:MultiFactorAuthPresent: 'true'
              IpAddress:
                aws:SourceIp:
                - 192.168.0.1/32
                - 192.168.0.2/32
                - 192.168.0.3/32
IamUserAdmin
  • 非常用とする管理者権限を持つIAMユーザ名を指定します。
  • このパラメータで指定されたIAMユーザ、及びrootユーザによるコンソールログインがあった場合、通知対象となります。
NotificationEmailaddress
  • 管理者のコンソール利用を通知するSNSの通知先のメールアドレスを設定します。
  • 変更はSNSのダッシュボードを利用し、CloudFormationのスタック名で始まるトピックをご確認ください。
SampleIamUserEnable
  • IAMユーザの権限設定、グループ設定のサンプルとなるIAMユーザを用意しました。
    • sample-iam-user-admin
    • sample-iam-user-poweruser
    • sample-iam-user-readonly
  • サンプルユーザが不要な場合には「false」とします。

オプション設定

  • オプション設定は今回ありません。デフォルトのままとします。

確認

  • CAPABILITY、IAMリソースが作成される事を承認するチェックを行い「作成」を行います。

作成完了

  • 今回のCloudFormation のテンプレート設置は2分程度で完了、状況が「CREATE_COMPLETE」となります。

リソースの確認

  • 作成されたリソースは「リソース」タブで確認できます。

  • 作成されたIAMリソース(Role、Group、User)、特にスイッチ用のIAMロールについては意図せぬ利用を回避するため、「信頼関係」の設定を確認し、信頼されたエンティティのアカウントが自身のアカウントIDと一致している事を確認する事をおすすめします。

IAMユーザ設定

ユーザ作成

IAM ダッシュボード を利用し、AWSコンソールを利用する担当者用のIAMユーザを作成します。

追加

  • 「ユーザを追加」を指定します。

詳細の設定

  • IAMユーザのユーザ名を指定します。
  • 「別のユーザーの追加」により複数名を一度に登録することも可能です。
  • アクセスの種類は「AWSマネジメントコンソールへのアクセス」を指定します。

  • IAMユーザ名は「所属」+「個人名」など、所属と個人を特定しやすい命名ルールで利用する事をおすすめします。

アクセス権限

  • 作成するIAMユーザを所属させるグループ、先にCloudFromationで作成したグループ(admin,poweruser,readonly)に所属させます。
  • 今回追加するIAMユーザは、作業者用グループ「iam-group-poweruser」に所属させました。

確認と作成

  • 内容を確認し「ユーザの作成」を行います。

  • IAMユーザの作成に成功すると、初期パスワードの確認画面の確認画面に遷移します。

  • AWSコンソールを利用する担当者に、ログインIDとなるユーザ名、初期パスワード、ログイン用のURLが 「CSVのダウンロード」で入手できます。

APIセッションの有効時間設定

スイッチロールでのAWSコンソール利用時の「再ロード」が問題となる場合には、 以下の記事を参考に、IAMロールのCLI/APIセッションの有効時間の延長をお試しください。

IAMロールのセッション期間が1時間から12時間に延長可能になりました

※CloudFormationがCLI/APIセッションの有効時間設定に対応次第、テンプレートは更新予定です。

まとめ

CloudFormationを利用したIAM設定方法を紹介させて頂きました。

次の記事でAWSコンソールを利用する担当者のログイン、初期設定、スイッチロールの手順について紹介させて頂きます。