0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS初心者が0円で本番環境を作れるようになるまで #1【IAM編】ルートユーザーを卒業して作業用IAMユーザーを作る

0
Posted at

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ユーザー を作ります。

途中で 「管理者権限を付けたのに、請求画面が『アクセス拒否』になる」 というハマりどころにも遭遇したので、その原因と解決方法もまとめています。

この記事でやること

  1. アカウントエイリアスを設定する
  2. 管理者用のグループを作る
  3. 作業用のIAMユーザーを作る
  4. IAMユーザーでログインする
  5. 【ハマりどころ】請求画面が「アクセス拒否」になる問題を解決する

前提

  • AWSアカウントを作成済みで、ルートユーザーでログインできること
  • ルートユーザーにMFA(多要素認証)を設定済みであること
  • IAMは無料のサービスなので、この記事の手順で料金はかかりません

そもそも、なぜルートユーザーを使い続けてはいけないのか

AWSアカウントを作ったときに登録したメールアドレスでログインするユーザーを ルートユーザー と呼びます。

ルートユーザーは アカウントのすべての操作ができ、権限を制限することもできません。万が一パスワードが漏れたら、アカウントを丸ごと乗っ取られてしまいます。

そのため、AWSでは次のような運用が推奨されています。

  • ルートユーザーは、ルートユーザーにしかできない作業(後ほど出てきます)のときだけ使う
  • 普段の作業は、必要な権限だけを与えたIAMユーザーで行う

登場する用語

用語 説明
IAMユーザー AWSを操作する「人」ごとに作るアカウント
IAMグループ IAMユーザーをまとめる入れ物。部署のようなもの
ポリシー 「何をしてよいか」を書いた許可証。グループやユーザーに付ける

ポイントは、ポリシーはユーザーに直接付けずに、グループに付けることです。
こうしておくと、「グループに入れる・外す」だけで権限を管理できます。


手順1:アカウントエイリアスを設定する

IAMユーザーは、ルートユーザーとは別のログイン用URLからサインインします。
このURLには最初は12桁のアカウントIDが入っていて覚えにくいので、好きな名前(エイリアス)に変えておきます。

  1. マネコン上部の検索バーに IAM と入力し、「IAM」を開きます
  2. IAMダッシュボードの右側にある 「AWS アカウント」 の枠を探します
  3. 「アカウントエイリアス」の 「作成」 をクリックします
  4. 好きな名前を入力して 「変更を保存」 をクリックします

エイリアスに使えるのは 英小文字・数字・ハイフン だけです。また、世界中のAWSアカウントで重複できないので、ほかの人が使っている名前は登録できません。

設定すると、IAMユーザー用のサインインURLが次の形に変わります。

https://(エイリアス).signin.aws.amazon.com/console

01-account-alias.png

IAMは グローバルサービス です。IAMの画面を開くと、右上のリージョン表示が「グローバル」になります。ここで作ったユーザーやグループは、すべてのリージョンで共通です。

手順2:管理者用のグループを作る

次に、管理者用のグループ Admin を作り、管理者権限のポリシーを付けます。

  1. IAMの左メニューから 「ユーザーグループ」 をクリックします
  2. 右上の 「グループを作成」 をクリックします
  3. 「ユーザーグループ名」に Admin と入力します
  4. 「グループにユーザーを追加」は、ユーザーがまだいないので何もしません
  5. 「許可ポリシーを添付」の検索ボックスに AdministratorAccess と入力し、ちょうどその名前のポリシーにチェックを入れます
  6. 「グループを作成」 をクリックします

02-attach-policy.png

検索すると AdministratorAccess-Amplify など、似た名前のポリシーがいくつも出てきます。名前が 完全に AdministratorAccess のものを選んでください。

AdministratorAccess は、AWSがあらかじめ用意している AWS管理ポリシー の1つで、ほぼすべての操作が許可されています。

作成できると、グループ一覧に Admin が表示されます。

03-group-list.png

ユーザー数の欄に「⚠ 0」と出ていますが、まだユーザーがいないという意味なので問題ありません。

手順3:作業用のIAMユーザーを作る

いよいよ、普段の作業に使うIAMユーザーを作ります。

  1. IAMの左メニューから 「ユーザー」 をクリックし、「ユーザーの作成」 をクリックします
  2. ステップ1「ユーザーの詳細を指定」
    • 「ユーザー名」に好きな名前を入力します(例:yourname-admin)
    • 「AWS マネジメントコンソールへのユーザーアクセスを提供する」 にチェックを入れます
    • 「コンソールパスワード」で 「カスタムパスワード」 を選び、パスワードを入力します
    • 自分で使うユーザーなので、「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります」のチェックは外します
  3. ステップ2「許可を設定」
    • 「ユーザーをグループに追加」 を選び、手順2で作った Admin にチェックを入れます
  4. ステップ3「確認して作成」 で内容を確認し、「ユーザーの作成」 をクリックします

04-create-user.png

ユーザーを作成した直後の画面には、サインインURL・ユーザー名・パスワードが表示されます。この画面を閉じると、パスワードは二度と表示されません。 また、パスワードが写るのでスクリーンショットを撮って公開しないようにしましょう。

ステップ2には「ポリシーを直接アタッチする」という選択肢もありますが、前に書いたとおり グループに入れて権限を付ける のが基本です。

手順4:IAMユーザーでログインする

作ったIAMユーザーでログインし直します。

  1. ブラウザで シークレットウィンドウ を開きます(Chrome / Edge なら Ctrl + Shift + N)
    • ルートユーザーのログインを残したまま、別のユーザーで作業できます
  2. 手順1で確認したサインインURLを開きます
  3. 「アカウントID またはエイリアス」には、エイリアスが最初から入っています
  4. 「IAM ユーザー名」と「パスワード」を入力し、「サインイン」 をクリックします

ルートユーザーのログイン画面ではメールアドレスとパスワードを入力しますが、IAMユーザーは 「アカウント」「ユーザー名」「パスワード」の3つ を入力するのが違いです。

ログインできると、画面右上に ユーザー名 @ エイリアス の形で表示されます。

手順5:【ハマりどころ】管理者なのに請求画面が「アクセス拒否」になる

IAMユーザーでログインできたので、料金を確認しようと 「請求とコスト管理」 を開いてみます。

  1. 画面右上のユーザー名をクリックし、メニューから 「請求とコスト管理」 をクリックします
    • 検索バーで探す場合は、日本語表示なら 請求 と入力すると見つかります

すると……

06-billing-access-denied.png

金額がすべて「アクセス拒否」になってしまいました。

AdministratorAccess というほぼすべてが許可されたポリシーを付けているのに、なぜでしょうか。

原因:アカウント側の設定が無効になっている

IAMユーザーが請求情報を見るためには、次の2つの条件が両方そろっている必要があります。

# 条件 今回の状態
1 アカウント設定の「IAM ユーザーおよびロールによる請求情報へのアクセス」が有効になっている ❌ 無効だった
2 IAMユーザーに、請求情報を見る権限を持つポリシーが付いている ✅ AdministratorAccess で OK

ポリシー(条件2)が足りていても、アカウント全体の設定(条件1)が無効だと見られません。
そしてこの設定は、ルートユーザーにしか変更できません。

解決:ルートユーザーで設定を有効にする

  1. ルートユーザーでログインしているほうのウィンドウ に戻ります
  2. 画面右上のアカウント名をクリックし、「アカウント」 をクリックします
  3. 下にスクロールして、「IAM ユーザーおよびロールによる請求情報へのアクセス」 の欄を探します。「無効化済み」になっています

07-billing-iam-access-before.png

  1. 「編集」 をクリックし、「IAM アクセスをアクティブ化」 にチェックを入れて 「更新」 をクリックします

08-BIL~1.PNG

「アカウント」画面の上のほうには、住所・電話番号・メールアドレスなどの個人情報が表示されています。スクリーンショットを撮るときは注意しましょう。

  1. IAMユーザーのウィンドウに戻り、請求画面を再読み込み(F5)します

09-billing-after.png

「アクセス拒否」だったところに、金額が表示されるようになりました 🎉


まとめ

  • ルートユーザーは権限を制限できないので、普段の作業には使わない
  • 作業用の IAMユーザー を作り、権限は グループ経由 で付ける
  • IAMユーザーは、エイリアス付きの 専用サインインURL からログインする
  • IAMユーザーが請求情報を見るには、ポリシー だけでなく アカウント設定(ルートユーザーのみ変更可能) も必要

「管理者権限を付けたのに見られない」という今回のハマりどころは、AWSの権限が IAMポリシーだけで決まるわけではない ことを実感できるよい例でした。

次回予告

次回は IAM編 #2 として、権限の違うグループ(PowerUserAccess / ReadOnlyAccess)を作ります。ユーザーをグループ間で移動すると、できることがどう変わるのかを試し、アクセスアドバイザー で「どのサービスが使われたか」を確認するところまでやる予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?