1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【新人教育に最適!】CLIを使用してIdentity Centerユーザー作成方法~aws login&AssumeRolを使って払い出し~

  • このエントリーをはてなブックマークに追加

この記事のポイント

新人エンジニアがAWSの権限管理を深く理解するために、AWS CLIの「aws login」と「AssumeRole」を活用して、自分自身のIAM Identity Centerユーザーを払い出す実践的な教育手順を解説します。単なる権限付与ではなく、認証と認可の仕組みを体感できる構成になっています。

  • セキュリティに配慮した最新のCLI操作:
    アクセスキー不要でブラウザ認証を利用する「aws login」を採用。AWS CLI v2.32.0以上の環境を前提とし、一時的な認証情報によるセキュアな操作環境を構築します。
  • 最小権限の原則と管理ポリシーの活用:
    「SignInLocalDevelopmentAccess」などのAWS管理ポリシーと、Identity Center操作に必要な最小限のアクションを定義したカスタムポリシーを組み合わせた、実務に即した権限設計を提示します。
  • 独自の実践教育ワークフロー:
    「管理者の準備」と「新人の実施事項」を明確に分離。筆者の視点から、AssumeRole(ロールの引き受け)を通じて、IAMユーザー、ロール、ポリシーの相関関係を論理的に学べるフローを独自にまとめています。

はじめに

こんにちは。DXソリューション営業本部の岡田です。
皆さんの組織では、新人にアカウントを渡すとき、どのようにしていますか?
「管理者がadmin権限、または任意の権限を付けたユーザーを作ってそのまま渡す」というケースが多いのではないでしょうか。
しかし、これでは新人はIAMの仕組みを理解しないまま作業を始めることになります。
そこで今回は、新人自身がCLIを使ってIAM Identity Centerユーザーを払い出す手順を用意し、その過程でロールとポリシーの違いを体感してもらう手順をご紹介します。

従来のやり方 今回のアプローチ
管理者が権限付きユーザーを作成して渡す 新人が自分でIdentity Centerユーザーを作成する
新人はIAMの仕組みを理解しない ロール・ポリシーの違いを実践で学べる
アクセスキーの管理が必要 aws loginでアクセスキー不要

前提条件

・AWS CLI v2.32.0 以上がインストールされていること

以下から公式インストーラーをダウンロードできます。


・管理者がIAMおよびIdentity Centerの管理権限を持っていること
・Identity Centerが有効化済みであること

前提知識:ロールを引き受ける(AssumeRole)とは

今回の手順で大事になるのは「AssumeRole(ロールを引き受ける)」です。

IAMユーザーは「自分に付いている権限」しか使えません。
AWSには「一時的に別の権限セットを借りる」仕組みがあり、これを「ロールを引き受ける(AssumeRole)」と呼びます。


なぜこの仕組みを使うのでしょうか?

  • IAMユーザーに直接admin権限を付けると、漏洩時に何でもできてしまう
  • ロール経由なら一時的な認証情報しか発行されないため漏洩リスクが低い
  • 「誰が」「いつ」「どのロールを引き受けたか」がCloudTrailに記録される
  • 必要な権限だけをロールに持たせることで最小権限の原則を守れる

ちなみに、マネジメントコンソール(ブラウザ)では「スイッチロール」と呼ばれますが、裏でやっていることはAssumeRoleと同じです。
今回はこのAssumeRoleを使用して、実践していきたいと思います。

今回の手順では、以下のような権限構成を作ります。

IAMユーザー(ログインとAssumeRoleのみ)
├── SignInLocalDevelopmentAccess  → aws loginを許可
├── インラインポリシー             → ロールへのAssumeRoleを許可
└── IAMUserChangePassword        → パスワード変更を許可

        ↓ AssumeRole

IAMロール(Identity Center操作の最小権限)
└── 権限ポリシー → Identity Center操作を許可
    ├── identitystore:CreateUser / DescribeUser / ListUsers
    ├── sso:CreateAccountAssignment / DescribeAccountAssignmentCreationStatus
    ├── sso:ListPermissionSets
    └── sso:ListInstances / DescribeInstance

管理者の事前準備:IAMユーザーの作成

まず、新人が利用する、Identity Center作成のためだけのIAMユーザーを作成します。
このユーザーには「ログインとAssumeRoleのみ」の権限を付与します。

  1. IAMコンソールを開く
  2. 左メニューの「ユーザー」→「ユーザーを作成」をクリック
  3. ユーザー名(任意)を入力
  4. 「AWSマネジメントコンソールへのユーザーアクセスを提供する」にチェックを入れる
    • パスワード: 自動生成またはカスタムパスワードを設定
    • 「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります」にチェック
  5. 「次へ」→ 許可の設定画面で「ポリシーを直接アタッチする」を選択
  6. 検索欄で「SignInLocalDevelopmentAccess」を検索してチェックを入れる

7.「次へ」→「ユーザーの作成」をクリック

注意:ユーザー作成時にダウンロードしたCSV(パスワード情報)は、安全な方法で新人に共有してください。


aws loginはブラウザ認証をCLIに持ち込む方式のため、CLI側でパスワードを直接扱うことはありません。ブラウザで一度ログインできればOKです。

SignInLocalDevelopmentAccessは、aws loginでブラウザ認証をCLIに持ち込むために必要なAWS管理ポリシーです。これがないとaws loginでエラーになります。AssumeRoleのインラインポリシーは、次の手順でロールを作成した後に設定します。

管理者の事前準備:IAMロールの作成

次に、Identity Centerを操作するための権限を持つIAMロールを作成します。

1. 権限ポリシーを作成する

  1. IAMコンソールを開く
  2. 左メニューの「ポリシー」→「ポリシーの作成」をクリック
  3. JSONタブを選択し、以下を貼り付ける
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowIdentityCenterUserProvisioning",
      "Effect": "Allow",
      "Action": [
        "identitystore:CreateUser",
        "identitystore:DescribeUser",
        "identitystore:ListUsers"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowAccountAssignment",
      "Effect": "Allow",
      "Action": [
        "sso:CreateAccountAssignment",
        "sso:DescribeAccountAssignmentCreationStatus",
        "sso:ListPermissionSets"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowIdentityCenterReadOnly",
      "Effect": "Allow",
      "Action": [
        "sso:DescribeInstance",
        "sso:ListInstances"
      ],
      "Resource": "*"
    }
  ]
}

各権限の解説は以下の通りです。

権限 必須 説明
identitystore:CreateUser 必須 Identity Centerユーザーの作成
identitystore:DescribeUser / ListUsers   作成したユーザーの確認・重複チェック
sso:CreateAccountAssignment 必須 ユーザーにAWSアカウントと権限セットを紐付ける
sso:DescribeAccountAssignmentCreationStatus   紐付け処理の完了状態を確認する
sso:ListPermissionSets   利用可能な権限セットの一覧を取得する
sso:DescribeInstance / ListInstances   Identity Store IDの取得に必要

Resource: "*"としていますが、Identity Storeは現時点でリソースレベルのポリシーに対応していないためです。

4. ポリシー名(任意)を入力して作成

2. ロールを作成し、ポリシーをアタッチする

  1. IAMコンソールを開く
  2. 左メニューの「ロール」→「ロールを作成」をクリック
  3. 信頼されたエンティティタイプ →「AWSアカウント」を選択
  4. 「このアカウント」を選択して「次へ」
  5. 許可ポリシーの画面で、前の手順で作成したポリシー名を検索してチェックを入れて「次へ」


  1. ロール名(任意)と説明を入力して作成
  2. 作成後、ロールを開いて「信頼関係」タブ →「信頼ポリシーを編集」をクリック
  3. 以下に書き換えて保存
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AWSアカウントID>:user/<前の手順で作成したIAMユーザー名>"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

重要:信頼ポリシーにIAMユーザーを指定する際、そのユーザーが存在していないとエラーになります。必ずIAMユーザーを先に作成してからロールの信頼ポリシーを設定してください。

管理者の事前準備:AssumeRoleポリシーの追加

ロールが作成できたので、最初に作成したIAMユーザーにAssumeRole権限を追加します。

  1. IAMコンソールを開く
  2. 左メニューの「ユーザー」→ 作成したユーザーを選択
  3. 「許可を追加」→「インラインポリシーを作成」をクリック
  4. JSONタブを選択し、以下を貼り付ける
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "<作成したロールのARN>"
    }
  ]
}

ロールのARNはIAMコンソールの「ロール」→ 作成したロールを選択 → 概要欄の「ARN」からコピーできます。

5. ポリシー名(任意)を入力して作成

ユーザーの「許可」タブで以下の3つがアタッチされていれば管理者の準備は完了です。

  • インラインポリシー(sts:AssumeRole
  • SignInLocalDevelopmentAccess(AWS管理ポリシー)
  • IAMUserChangePassword(AWS管理ポリシー)

新人が実施:aws loginでブラウザ認証

ここからは新人が実施する手順です。新人にIAMユーザー名・パスワード・ロールARN・Identity Store IDを共有してください。

aws login

aws loginについては下記ブログを参考にしてください。


初回実行時はリージョンの指定を求められます。使用するリージョン(例: ap-northeast-1)を入力してください。この設定は初回のみで、2回目以降は聞かれません。

実行すると以下のようなメッセージが表示されます。

Attempting to open your default browser.
If the browser does not open, open the following URL:
https://ap-northeast-1.signin.aws.amazon.com/...

ブラウザが自動で開かない場合は、表示されたURLをコピーしてブラウザに貼り付けてください。
また、既にプロファイルが設定されている場合は上書き確認が表示されます。yを入力してEnterを押してください。
ブラウザが開いたら、すでにAWSにログインしている場合は対象のアカウントをクリックします。



ログインしていない場合は「Continue with Root or IAM user」をクリックし、AWSアカウントID・IAMユーザー名・パスワードを入力してログインしてください。

aws loginはブラウザの認証情報をCLIに持ち込む仕組みです。アクセスキーを発行せずにCLIが使えるようになるため、キー漏洩のリスクがありません。

新人が実施:プロファイル設定とロールの動作確認

コマンド実行時に自動でロールへ切り替わるよう設定しておきます。この設定は一度だけ実施すればOKです。

aws configure set profile.idc-worker.role_arn "<管理者から受け取ったロールARN>"
aws configure set profile.idc-worker.source_profile "default"

これにより、--profile idc-workerを付けてコマンドを実行すると、自動的にAssumeRoleが行われます。手動で一時認証情報をコピー&ペーストする手間がなくなります。

設定後、正しくロールに切り替わっているか確認します。

aws sts get-caller-identity --profile idc-worker

以下のように、管理者から伝えられたロール名がArnに含まれていればOKです。

{
  "UserId": "AROA...:botocore-session-xxxx",
  "Account": "<AWSアカウントID>",
  "Arn": "arn:aws:sts::<AWSアカウントID>:assumed-role/<ロール名>/botocore-session-xxxx"
}

以降のコマンドには必ず --profile idc-worker を付けてください。

新人が実施:Identity Centerユーザーの作成

いよいよ自分のIdentity Centerユーザーを作成します。

注意:Windowsのコマンドプロンプトでは、コマンドを1行で入力してください。改行するとエラーになります。

Identity Store IDの確認方法:Identity Centerコンソール →「設定」→「アイデンティティソース」タブの右側に表示されているd-で始まる値です。管理者から共有されます。

aws identitystore create-user --identity-store-id "<Identity Store ID>" --user-name "<自分のユーザー名>" --name "{\"FamilyName\":\"<姓>\",\"GivenName\":\"<名>\"}" --display-name "<表示名>" --emails "[{\"Value\":\"<メールアドレス>\",\"Type\":\"Work\",\"Primary\":true}]" --profile idc-worker

入力例:

aws identitystore create-user --identity-store-id "d-1234567890" --user-name "taro.yamada" --name "{\"FamilyName\":\"山田\",\"GivenName\":\"太郎\"}" --display-name "山田 太郎" --emails "[{\"Value\":\"taro.yamada@example.com\",\"Type\":\"Work\",\"Primary\":true}]" --profile idc-worker

成功すると以下のようなレスポンスが返ります。

{
  "IdentityStoreId": "d-1234567890",
  "UserId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Identity Centerコンソールを開き、左メニューの「ユーザー」を選択して、作成した自分のユーザーが一覧に表示されていれば作成成功です。

作業が完了したらaws logoutでログアウトしてください。


CLI経由でAWS上のリソースにアクセスするための手順については下記ブログをご覧ください。


まとめ

今回は、新人教育の一環としてIdentity Centerユーザーのセルフ払い出しを行う手順をご紹介しました。

この手順を通じて、新人には以下のことを理解してもらえます。

IAMユーザー(認証) ─── IAMポリシー(権限) ────────IAMロール(認可)
       │                      │                                │
  「誰であるか」        「何が許可されるか」             「その権限を束ねた役割」
       └─────────── AssumeRole(引き受け) ─────┘
  • IAMユーザーは「認証(本人確認)」のためのもの
  • IAMロールは「認可(権限付与)」のためのもの
  • IAMポリシーは「権限の定義」そのもの
  • ロールを引き受けることで、必要な時に必要な権限だけを一時的に取得できる


「権限付与して終わり」ではなく、権限管理についてぜひ新人教育に取り入れてみてください!



もし「このサービスについて知りたい」「AWS環境の構築、移行」などのリクエストがございましたら、弊社お問合せフォームまでお気軽にご連絡ください。 複雑な内容に関するお問い合わせの場合には直接営業からご連絡を差し上げます。 また、よろしければ以下のリンクもご覧ください!
<QES関連ソリューション/ブログ>

<QESが参画しているAWSのセキュリティ推進コンソーシアムがホワイトペーパーを公開しました>

※Amazon Web Services、”Powered by Amazon Web Services”ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード