はじめに
本稿は、金沢工業大学 Advent Calenderの4日目の記事になります。
この記事について
以前から AWS に対して興味はありましたが、『不正アクセスや設定ミスで○○万円の請求』などの記事を見る度に怖気づいてしまい、敬遠していました。
しかし、インターン先で AWS を触らせていただける機会があり、「もっと AWS 使いこなせるようになりたい!!」という憧憬に似た何かが僕を突き動かし、アカウント作成に至りました。単純ですね。
しかし、相変わらず心配性の身であるため、セキュリティに不安しかありません。
そこで、まずはAWSのアクセス権限について学び始めました。
本稿では、その備忘録として AWS IAM の基礎や、最低限の初期設定について説明していきます。
この記事の対象者
- AWS に興味があるが、手が出せていない人
- AWS 始めたての人
- AWS IAM なんもわからん の人
アカウントの作成
AWSに登録して、ルートユーザーを作成します。
作成できたら AWSコンソールにサインインします。必要に応じて、右上のメニューバーからリージョンを東京(ap-northeast-1)に変更します。
ルート (root) ユーザーについて
ルートユーザーは最も権限が強く、全てのAWSサービスとリソースにアクセス可能であることに加えて、お金に関する情報へのアクセスやアカウントの停止など、すべての操作が可能です。ルートユーザーを乗っ取られたらこの世の終わりだと思いましょう。
乗っ取られないためには、公式によるベストプラクティスが提示されているため、従っていきましょう。一部企業向けのトピックについては説明を割愛します。
- ルートユーザーの認証情報を保護して不正使用を防止する
- アクセスを保護するために、強度の高いルートユーザーパスワードを設定します
- 多要素認証 (MFA) でルートユーザーのサインインを保護する
- ルートユーザーのアクセスキーは作成しないでください
- アカウント回復メカニズムへのアクセスを制限する
- アクセスおよび使用状況をモニタリングする
ルートユーザーの認証情報を保護して不正使用を防止する
ルートユーザーは、ルートユーザーでしかできないタスクがある場合にのみ使用し、日常的には使わないようにしましょう。普段は後述するIAMユーザーを使用します。
また、当然のことですが、パスワードや証明書、アクセスキーなどは誰にも共有しないでください。よくあるケースとして、『GitHubのパブリックリポジトリに公開されていた』『スクリプトにベタ書きされていた』などがあります。認証情報は細心の注意を払って取り扱いましょう。
AWSに関わらず、パスワードリスト攻撃を回避できるように、他のサービスと同じパスワードを使い回さないようにしましょう。
アクセスを保護するために、強度の高いルートユーザーパスワードを設定します
強度については、以下の様に書かれています。
- 8~128 文字で構成されていること。
- 英字の大文字と小文字、数字、および
! @ # $ % ^ & * () <> [] {} | _+-=
の記号を含める必要があります。- AWS アカウント アカウント名またはメールアドレスと同じでないこと。
[重要] 多要素認証 (MFA) でルートユーザーのサインインを保護する
MFA (Multi-Factor Authentication, 多要素認証) とは、ユーザー名とパスワードに加えて、追加の認証を行うものです。
今回は、仮想認証アプリから TOTP (Time-Based One-Time Password) を発行します。仮想認証アプリには、 Authy や Microsoft Authenticator, Google Authenticator などがあります。
手順
- AWSコンソール > 右上ユーザータブ > セキュリティ認証情報
- 多要素認証 (MFA) > 「MFA デバイスの割り当て」
- デバイス名を設定し、「Authenticator app」 を選択
- 手元のデバイスで、仮想認証アプリを開き、QRコードを読み取る
- 仮想認証アプリのコードを、「MFA コード1」に入力する
- 時間でコードが切り替わるので、次に表示されたものを、「MFA コード2」に入力する。
確認のため、一度AWS側でサインアウトし、再度サインインすると、MFAコードの入力を求められるようになっていることがわかります。画像のように表示されれば設定完了です。
結果
このMFAの設定によって、ルートユーザーにアクセスできるのは、
- AWSのユーザー名、パスワードを知っている
- スマホの認証を突破できる ← New!
- 仮想認証アプリの認証を突破できる ← New!
を全て満たす人となりました。これで比較的安心ですね。
ルートユーザーのアクセスキーは作成しないでください
デフォルトでは作成されていないので、新しくアカウントを作成された場合は特にすることはありません。既に作ってしまっていた場合は、速やかに削除するよう動いてください。
ルートユーザーのアクセストークンが漏洩した場合、先ほど作成したMFAも意味を成しません。メールアドレスもパスワードも変えられ、完全に乗っ取られてしまいます。
下記の記事にもありますが、存在しないものは漏洩しようがありません。 そのため、作らないことがベストプラクティスとなります。
もし、アクセストークンを必要とする場合には、適切なロールを振ったIAMユーザーで行いましょう。もちろん、その場合にはアクセスキーを外部に公開しないよう、念入りに管理しましょう。
アカウント回復メカニズムへのアクセスを制限する
普段使わないルートユーザー、パスワードを忘れがちなのではないでしょうか。緊急時にアクセスできるように以下の点を確認しておきましょう。
- ルートユーザーのパスワードを忘れたり、紛失したりした場合に備えて、パスワードリセット用のEメールにアクセスできる。
- MFAデバイスにアクセスできなくなった場合に備えて、登録された電話番号とEメールアドレスの両方を使用できる。
アクセスおよび使用状況をモニタリングする
AWSが提供しているサービスを利用することで、リソースへのアクセス状況や使用状況などを監視することができます。
サービス名 | できること |
---|---|
Amazon CloudWatch | ルートユーザーの認証情報の使用を検出 |
Amazon CloudTrail | マネジメントコンソールやプログラムからの操作、AWSサービスにより実行されるアクションすべてを記録し蓄積 |
GuardDuty | 機械学習による通常動作からの逸脱の異常検知 アカウントおよびリソースに対する不審なアクティビティの検出 など |
IAMユーザーの設定
ルートユーザーの設定は終わりました。
前述したようにルートユーザーを日常的に使用するのはよくありません。
そのために、IAMユーザーを作成します。
まずは、IAM とは何かを理解していきましょう。
IAMとは
「Identity and Access Management」の略であり、「誰」が「どのような条件」で「どのリソースやサービス」にアクセスできるかを管理するサービスです。非常にざっくり言うと、権限を管理するためのサービスです。
IAMの読み方は、日本では「アイアム」、英語圏では「アイエーエム」が主流のようです。
IAMで抑えるべきポイントは「ポリシー」「ユーザー」「グループ」「ロール」がそれぞれどのように機能しているかを理解することです。ざっくりと説明していきます。
IAM ポリシー
IAM ポリシー (Policy)は、「できること、できないこと」を定義するものです。
ポリシーは、公式が提供しているものが多く、基本的にはここから使用することになります。
要件によって必要な場合には、カスタマイズすることもできます。
Statement
で、以下の項目を記載することで定義できます。
項目 | 内容 |
---|---|
Effect | "Allow" もしくは "Deny" 許可か拒否かを指定する |
Action | 何の操作かを指定する |
Resource | 操作する対象を指定する |
Condition | いつ行うかを指定する |
ユーザー
ユーザー (User)は、最も基本となる管理対象です。
ポリシーを紐付けて、ユーザーに権限を付与することもできますが、個々での設定は行わず、次の「グループ」を使って権限を付与していきます。
ユーザーグループ
ユーザーグループ (UserGroup)は、ユーザーをグループに紐付けることができます。
そして、グループにポリシーを紐づけることで、そのグループに所属しているユーザー全員に権限を付与することができます。
基本的に、ユーザーにはポリシーを紐づけず、この「グループ」にポリシーを紐付けます。
ユーザー数が増えてきた場合に、設定の抜け漏れを防止し、管理が容易になります。
ロール
ロール (Role)は、ポリシーを紐付けて、特定のアクセス権を定義します。
また、Security Token Serivce (STS) による AssumeRole という機能を用いて、許可されているユーザーが、一時的にロールのポリシーを引き受ける ことができます。
AssumeRoleについては、以下の記事が参考になると思います。
IAM ユーザーの作成
基本的な概念を抑えたところで、実際にユーザーを作成しましょう。
まず、ルートユーザーの代わりに使用する、フルアクセス権限を持つ管理者ユーザーを作成します。
管理者ユーザーの作成
- IAM > ユーザー > ユーザーを作成
- ユーザー名を入力します。
- 「AWSマネジメントコンソールへのユーザーアクセスを提供する」にチェックを付けます。
- 「IAMユーザーを作成します」を選択します。
- 「カスタムパスワード」を選択し、パスワードを入力します。
- 「次回サインイン時にパスワード更新」のチェックを外します。
- 入力内容を確認して「次へ」を押します。
ポリシーを割り当てるため、ユーザーグループを作成します。
8. 「グループを作成する」から以下の画面に遷移します。
9. ユーザーグループ名を入力します。
10. AdministratorAccess
のポリシーを選択します。
11. 「ユーザーグループの作成」を押します。
ユーザーグループに「AdministratorGroup」が作成されているため、選択し、「次へ」を押します。
最後に内容を確認し、問題なければ「ユーザーの作成」を押します。
問題なく作成できれば以下のような画面になります。この画面を離れるとパスワードを確認できなくなります。忘れずに保存しましょう。右下の「.csvファイルをダウンロード」がオススメです。
コンソールサインインURLから、管理者ユーザーとしてサインインしましょう。
サインインできたら、先ほどと同様の手順でMFAを設定します。
これで、管理者ユーザーの作成は完了です。
終わりに
ルートユーザーの設定と、IAMユーザーの作成を行いました。
今回は、IAMユーザーとして管理者ユーザーの作成を行いましたが、管理者も強大なアクセス権限を持っています。最小アクセス権限の原則に従うのであれば、もっと範囲を狭めたユーザーを別で作成すべきでしょう。
今後はその点も含めて、ユーザーの運用方法について探っていきたいですね。
それでは、ご高覧いただきありがとうございました!