AWS初心者が0円で本番環境を作れるようになるまで #1【IAM編】ルートユーザーを卒業して作業用IAMユーザーを作る
はじめに
AWSの資格(CLF / SAA / SOA)は取ったものの、マネジメントコンソール(以下「マネコン」)はほとんど触ったことがない……ということで、実際に手を動かしながらAWSを学び直すシリーズを始めます。
「AWS初心者講座」として、IAM → S3 → DynamoDB → Lambda …と、サービスごとに1つずつ進めていく予定です。
シリーズのゴール
このシリーズのゴールは、お金を一切かけずに(無料枠の範囲だけで)、ログイン付きのサーバーレスWebアプリを、本番運用レベルの構成で作れるようになること です。
| 役割 | 使うサービス |
|---|---|
| 画面 | S3 + CloudFront |
| ログイン | Cognito |
| API・処理 | Lambda(+ API Gateway) |
| データ保存 | DynamoDB |
| 非同期処理・通知・定期実行 | SQS / SNS / EventBridge / Step Functions |
| 監視 | CloudWatch / X-Ray |
| 権限 | IAM |
| 構築の自動化 | CloudFormation |
EC2やRDSのように「置いておくだけでお金がかかる」サービスは使いません。各回の作業が、最終的にこのアプリのどこかの部品になるように進めていきます。
第1回は IAM です。AWSアカウントを作った直後の「ルートユーザー」での作業をやめて、普段使う作業用の IAMユーザー を作ります。
途中で 「管理者権限を付けたのに、請求画面が『アクセス拒否』になる」 というハマりどころにも遭遇したので、その原因と解決方法もまとめています。
この記事でやること
- アカウントエイリアスを設定する
- 管理者用のグループを作る
- 作業用のIAMユーザーを作る
- IAMユーザーでログインする
- 【ハマりどころ】請求画面が「アクセス拒否」になる問題を解決する
前提
- AWSアカウントを作成済みで、ルートユーザーでログインできること
- ルートユーザーにMFA(多要素認証)を設定済みであること
- IAMは無料のサービスなので、この記事の手順で料金はかかりません
そもそも、なぜルートユーザーを使い続けてはいけないのか
AWSアカウントを作ったときに登録したメールアドレスでログインするユーザーを ルートユーザー と呼びます。
ルートユーザーは アカウントのすべての操作ができ、権限を制限することもできません。万が一パスワードが漏れたら、アカウントを丸ごと乗っ取られてしまいます。
そのため、AWSでは次のような運用が推奨されています。
- ルートユーザーは、ルートユーザーにしかできない作業(後ほど出てきます)のときだけ使う
- 普段の作業は、必要な権限だけを与えたIAMユーザーで行う
登場する用語
| 用語 | 説明 |
|---|---|
| IAMユーザー | AWSを操作する「人」ごとに作るアカウント |
| IAMグループ | IAMユーザーをまとめる入れ物。部署のようなもの |
| ポリシー | 「何をしてよいか」を書いた許可証。グループやユーザーに付ける |
ポイントは、ポリシーはユーザーに直接付けずに、グループに付けることです。
こうしておくと、「グループに入れる・外す」だけで権限を管理できます。
手順1:アカウントエイリアスを設定する
IAMユーザーは、ルートユーザーとは別のログイン用URLからサインインします。
このURLには最初は12桁のアカウントIDが入っていて覚えにくいので、好きな名前(エイリアス)に変えておきます。
- マネコン上部の検索バーに
IAMと入力し、「IAM」を開きます - IAMダッシュボードの右側にある 「AWS アカウント」 の枠を探します
- 「アカウントエイリアス」の 「作成」 をクリックします
- 好きな名前を入力して 「変更を保存」 をクリックします
エイリアスに使えるのは 英小文字・数字・ハイフン だけです。また、世界中のAWSアカウントで重複できないので、ほかの人が使っている名前は登録できません。
設定すると、IAMユーザー用のサインインURLが次の形に変わります。
https://(エイリアス).signin.aws.amazon.com/console
IAMは グローバルサービス です。IAMの画面を開くと、右上のリージョン表示が「グローバル」になります。ここで作ったユーザーやグループは、すべてのリージョンで共通です。
手順2:管理者用のグループを作る
次に、管理者用のグループ Admin を作り、管理者権限のポリシーを付けます。
- IAMの左メニューから 「ユーザーグループ」 をクリックします
- 右上の 「グループを作成」 をクリックします
- 「ユーザーグループ名」に
Adminと入力します - 「グループにユーザーを追加」は、ユーザーがまだいないので何もしません
- 「許可ポリシーを添付」の検索ボックスに
AdministratorAccessと入力し、ちょうどその名前のポリシーにチェックを入れます - 「グループを作成」 をクリックします
検索すると AdministratorAccess-Amplify など、似た名前のポリシーがいくつも出てきます。名前が 完全に AdministratorAccess のものを選んでください。
AdministratorAccess は、AWSがあらかじめ用意している AWS管理ポリシー の1つで、ほぼすべての操作が許可されています。
作成できると、グループ一覧に Admin が表示されます。
ユーザー数の欄に「⚠ 0」と出ていますが、まだユーザーがいないという意味なので問題ありません。
手順3:作業用のIAMユーザーを作る
いよいよ、普段の作業に使うIAMユーザーを作ります。
- IAMの左メニューから 「ユーザー」 をクリックし、「ユーザーの作成」 をクリックします
-
ステップ1「ユーザーの詳細を指定」
- 「ユーザー名」に好きな名前を入力します(例:
yourname-admin) - 「AWS マネジメントコンソールへのユーザーアクセスを提供する」 にチェックを入れます
- 「コンソールパスワード」で 「カスタムパスワード」 を選び、パスワードを入力します
- 自分で使うユーザーなので、「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります」のチェックは外します
- 「ユーザー名」に好きな名前を入力します(例:
-
ステップ2「許可を設定」
-
「ユーザーをグループに追加」 を選び、手順2で作った
Adminにチェックを入れます
-
「ユーザーをグループに追加」 を選び、手順2で作った
- ステップ3「確認して作成」 で内容を確認し、「ユーザーの作成」 をクリックします
ユーザーを作成した直後の画面には、サインインURL・ユーザー名・パスワードが表示されます。この画面を閉じると、パスワードは二度と表示されません。 また、パスワードが写るのでスクリーンショットを撮って公開しないようにしましょう。
ステップ2には「ポリシーを直接アタッチする」という選択肢もありますが、前に書いたとおり グループに入れて権限を付ける のが基本です。
手順4:IAMユーザーでログインする
作ったIAMユーザーでログインし直します。
- ブラウザで シークレットウィンドウ を開きます(Chrome / Edge なら
Ctrl+Shift+N)- ルートユーザーのログインを残したまま、別のユーザーで作業できます
- 手順1で確認したサインインURLを開きます
- 「アカウントID またはエイリアス」には、エイリアスが最初から入っています
- 「IAM ユーザー名」と「パスワード」を入力し、「サインイン」 をクリックします
ルートユーザーのログイン画面ではメールアドレスとパスワードを入力しますが、IAMユーザーは 「アカウント」「ユーザー名」「パスワード」の3つ を入力するのが違いです。
ログインできると、画面右上に ユーザー名 @ エイリアス の形で表示されます。
手順5:【ハマりどころ】管理者なのに請求画面が「アクセス拒否」になる
IAMユーザーでログインできたので、料金を確認しようと 「請求とコスト管理」 を開いてみます。
- 画面右上のユーザー名をクリックし、メニューから 「請求とコスト管理」 をクリックします
- 検索バーで探す場合は、日本語表示なら
請求と入力すると見つかります
- 検索バーで探す場合は、日本語表示なら
すると……
金額がすべて「アクセス拒否」になってしまいました。
AdministratorAccess というほぼすべてが許可されたポリシーを付けているのに、なぜでしょうか。
原因:アカウント側の設定が無効になっている
IAMユーザーが請求情報を見るためには、次の2つの条件が両方そろっている必要があります。
| # | 条件 | 今回の状態 |
|---|---|---|
| 1 | アカウント設定の「IAM ユーザーおよびロールによる請求情報へのアクセス」が有効になっている | ❌ 無効だった |
| 2 | IAMユーザーに、請求情報を見る権限を持つポリシーが付いている | ✅ AdministratorAccess で OK |
ポリシー(条件2)が足りていても、アカウント全体の設定(条件1)が無効だと見られません。
そしてこの設定は、ルートユーザーにしか変更できません。
解決:ルートユーザーで設定を有効にする
- ルートユーザーでログインしているほうのウィンドウ に戻ります
- 画面右上のアカウント名をクリックし、「アカウント」 をクリックします
- 下にスクロールして、「IAM ユーザーおよびロールによる請求情報へのアクセス」 の欄を探します。「無効化済み」になっています
- 「編集」 をクリックし、「IAM アクセスをアクティブ化」 にチェックを入れて 「更新」 をクリックします
「アカウント」画面の上のほうには、住所・電話番号・メールアドレスなどの個人情報が表示されています。スクリーンショットを撮るときは注意しましょう。
- IAMユーザーのウィンドウに戻り、請求画面を再読み込み(
F5)します
「アクセス拒否」だったところに、金額が表示されるようになりました 🎉
まとめ
- ルートユーザーは権限を制限できないので、普段の作業には使わない
- 作業用の IAMユーザー を作り、権限は グループ経由 で付ける
- IAMユーザーは、エイリアス付きの 専用サインインURL からログインする
- IAMユーザーが請求情報を見るには、ポリシー だけでなく アカウント設定(ルートユーザーのみ変更可能) も必要
「管理者権限を付けたのに見られない」という今回のハマりどころは、AWSの権限が IAMポリシーだけで決まるわけではない ことを実感できるよい例でした。
次回予告
次回は IAM編 #2 として、権限の違うグループ(PowerUserAccess / ReadOnlyAccess)を作ります。ユーザーをグループ間で移動すると、できることがどう変わるのかを試し、アクセスアドバイザー で「どのサービスが使われたか」を確認するところまでやる予定です。







