AWSのIAMは、特に新規ユーザーにとっては使用方法や理解が難しいことがあります。しかし心配はいりません!IAMを使用してAWSでユーザーの権限を管理する方法について理解するのに最適な場所に来ました。
このチュートリアルでは、お互いに補完しあう一連の例を通じてIAMの基本的な概念を学ぶことができます。
準備はできましたか?深呼吸をして飛び込んでみましょう!
前提条件
このチュートリアルは実践的なデモンストレーションになります。一緒に進める場合は、PCとAWSアカウントを用意してください。AWSアカウントがない場合は、無料利用枠のアカウントを作成できます。
AWSでIAMユーザーを作成する
IAMの動作について理解する前に、まずはユーザーを作成してみましょう。ユーザーはさまざまな目的で使用できます。しかし、このチュートリアルでは、権限を持たず、グループに所属せず、何にもアクセスできないユーザーを作成します。
1. AWSコンソールにログインします。このデモでは、ユーザー名はcloud_userですが、あなたのユーザー名は異なるでしょう。

2. AWSコンソールで、検索ボックスにIAMと入力し、表示されるIAMサービスをクリックします。ブラウザはIAMダッシュボードにリダイレクトされます。

IAMはグローバルサービスであり、ユーザーとその権限がAWSアカウント/リージョン全体に適用されることを意味します。1つのAWSアカウントを複数の人が共有する場合(例えば、会社全体の開発チームの場合に非常に一般的です)、適切なIAMワークフォースのローテーションを確保する必要があります。
また、us-eastリージョン内にECインスタンスを作成することもできます。インスタンスはリージョナルですが、AWS Identity and Access Managementの制御はリージョナルではありません。ユーザーに割り当てられた権限は、ユーザーが接続するECインスタンスのリージョンに関係なく適用されます。

4. IAMダッシュボードで、左のペインからユーザーをクリックし、ページの右上にあるユーザーの追加をクリックしてユーザーの追加を初期化します。

以下の手順でユーザーの詳細を設定します:
- 以下のユーザー名フィールドにユーザー名を入力してください。この例ではユーザー名をuser-1に設定します。
- AWS Management Consoleアクセス用のパスワードオプションを有効にし、ユーザーがAWS管理コンソールにサインインできるようにします。
- カスタムパスワードオプションを選択し、テキストフィールドに安全なパスワードを入力してください。
- パスワードのリセットを要求するオプションをオフにして、ユーザーに次回のサインイン時に新しいパスワードを作成するように求めないようにします。次に次へ: 権限をクリックします。

5. 権限の設定をスキップし、次へ:タグをクリックします。このユーザーは権限を持たないためです。

6. タグの追加もスキップし、次へ:確認をクリックします。

7. ユーザーの詳細を確認し、ユーザーの作成を完了するためにユーザーの作成をクリックします。

ユーザーが作成されると、以下のような成功画面が表示されます。

8. IAMダッシュボードのユーザーページに戻り、新しく作成したユーザー(user-1)をクリックしてユーザーの情報を表示します。ユーザー-1を開く

以下の権限およびグループタブでは、user-1に関連付けられた権限がないこと、およびどのグループのメンバーでもないことが確認できます。


セキュリティ資格情報タブでは、user-1が持っている可能性のあるさまざまなアクセスキーが表示されます。このタブではSSH公開鍵をアップロードすることもできます。これはAWS EC2インスタンスに適しています。

アクセスアドバイザータブでは、user-1が直接または他のサービスを介してアクセスしたサービス、およびuser-1が最後にそのサービスにアクセスした日時が表示されます。

9. 最後に、プロセスを繰り返して(ステップ3から7まで)さらに2つのユーザー(user-2およびuser-3)を作成します。IAMダッシュボードのユーザーページに戻ると、以下のようなリストが表示されます。

ユーザーグループの作成
ユーザーを作成したら、グループを作成する時が来ました。AWSの管理ポリシーとJSONファイルを使用してグループを作成します。
このチュートリアルでは、以下の3つのグループを作成します:
- EC2-Admin:EC2インスタンスの表示、開始、停止の権限を提供します
- EC2-Support:EC2への読み取り専用アクセスを提供します
- S3-Support:S3への読み取り専用アクセスを提供します
ユーザーグループを作成するには、以下の手順に従ってください:
1. IAMダッシュボードで、左側のペインのユーザーグループをクリックし、グループの作成をクリックします。
2. ユーザーグループを作成ページで、ユーザーグループ名(EC2-Admin)を入力します。下の画像を参照してください。

デフォルトの許可を保持し、グループの作成をクリックしてEC2-Adminグループの作成を完了します。

新しいグループが作成されると、ページの上部にEC2-Adminユーザーグループが作成されましたというメッセージが表示されます。ブラウザは自動的にユーザーグループページにリダイレクトされます(ステップ3)。

3. グループ名列の下にあるEC2-Adminグループをクリックして、グループの概要情報を表示し、インラインポリシーを追加できるようにします(ステップ4)。

4. 次に、アクセス許可タブをクリックして、アクセス許可の追加 —> インラインポリシーの作成をクリックして、インラインポリシーを作成します。インラインポリシーは通常、ユーザーに直接関連付けられ、一時的な許可の適用に使用されます。
例えば、チームが古いEC2環境を新しいものに移行しています。古いEC2インスタンスの管理者が新しいEC2インスタンスでの開始/停止およびセキュリティグループの設定のコピーにアクセスできるようにする必要があります。

5. ポリシーの作成ページで、下に表示されるJSONタブをクリックして、ポリシーを作成するためのJSONエディタを開きます。

6. 以下のコード(ポリシー)をエディタのフィールドに貼り付け、ポリシーの確認をクリックしてインラインポリシーを作成します。このインラインポリシーは、AWSまたはAWSアカウント内の管理者によって事前に作成されたものであり、必要に応じて使用、カスタマイズ、編集することができます。
このポリシーでは、EC2-AdminグループのメンバーはEC2インスタンスの開始("ec2:StartInstances"
)、停止("ec2:StopInstances"
)、および表示("ec2:Describe*"
)を許可されます。これらのアクションは、すべてのリソース("Resource": "*"
)で実行できます。
EC2-Adminグループのメンバーはまた、すべてのElastic Load Balancerの表示(Action": "elasticloadbalancing:Describe
)、メトリクスの一覧表示(cloudwatch:ListMetrics
)、メトリクスの統計情報の取得cloudwatch:GetMetricStatistics
、およびメトリクスの説明(cloudwatch:Describe
)の権限を持っています。
CloudWatchメトリクスはECインスタンスと自動スケーリングサービスと自動的に構成されます。

7. ポリシーの概要を確認し、変更の保存をクリックしてポリシーを保存します。

8. IAMダッシュボードに再度移動し、ステップ2と同様にグループの作成を初期化します。ただし、今回はユーザーグループ名をEC2-Supportと名付けます。
下にスクロールし、アタッチされたアクセス許可ポリシーの検索ボックスでAmazonEC2ReadOnlyAccessを検索し、そのポリシーをグループ(EC2-Support)にアタッチします:
AmazonEC2ReadOnlyAccessは、インラインポリシーと同様に複数のユーザーやユーザーグループにアタッチすることができる管理ポリシーです。ただし、インラインポリシーとは異なり、管理者によって作成されたこのタイプのポリシーは再利用可能で、組織全体やAWSアカウント内のすべてのアカウントで共有することができます。
A managed policy is a shared policy. As a result, all users or groups of users who use the shared policy will have updated permissions automatically when the policy is updated.
この自動更新機能により、管理ポリシーはインラインポリシーよりも魅力的です。インラインポリシーでは、ポリシーが変更された場合、管理者が各権限を更新する必要があります。
AmazonEC2ReadOnlyAccessオプションをチェックし、グループの作成をクリックしてグループの作成を完了します。

10. 今度は、AmazonS3ReadOnlyAccessの管理ポリシーを使用してS3-Supportグループを作成するために、ステップ8から9を繰り返します。S3-Supportグループを作成したら、以下のようなグループのリストが表示され、各グループには権限が定義されています。

適切なグループにユーザーを追加する
権限が定義されたユーザーとグループを作成しました。次は、各グループの概要ページを開いて、ユーザーを手動でグループに追加します。
以下の表には、各ユーザーを追加する適切なグループが表示されています:
Users | In-group | Permissions |
---|---|---|
user-1 | S3-Support | Read-only access to S3 Bucket |
user-2 | EC2-Support | Read-only access to EC2 Instance |
user-3 | EC2-Admin | Full EC2 Access (View/Start/Stop) |
1. IAM ダッシュボードで、ユーザーグループページに移動し、以下に表示される S3-Support グループをクリックして、グループのサマリーページにアクセスします。

2. 次に、ユーザータブをクリックし、ユーザーの追加をクリックして、グループにユーザーを追加します。ブラウザは、まだどのグループにも所属していないユーザーのリストが表示されるページにリダイレクトします(ステップ3)。

3. user-1の前のチェックボックスをチェックし、ユーザーの追加をクリックして、ユーザーを S3-Support グループに追加します。ブラウザは自動的に S3-Support グループのサマリーページにリダイレクトします。

以下では、user-1が S3-Support グループの一部になったことがわかります。

4. ユーザー2とユーザー3を正しいグループに追加するために、ステップ1から3を繰り返します。
5. 最後に、ユーザーグループページに移動すると、スクリーンショットのように、各グループに1人のユーザーがいることがわかります。

ユーザー権限のテストが正常に機能しているか確認する
ユーザーがそれぞれのグループに適切な権限を持ったユーザーを完全に作成しましたが、それが機能しているかどうかをどのように知るのでしょうか。権限が意図したとおりに機能しているかを確認するためのさまざまな方法があります。最も一般的な方法の1つは、WebベースのAWS Management Consoleを使用することです。
1. IAM ダッシュボードに移動し、右パネルに表示されている IAM ユーザーのサインインURLをコピーします(以下に示します)。

2. ウェブブラウザで、以前にメモしたサインインURL(ステップ1)に移動し、user-1の資格情報でログインします。このタスクには、Google ChromeとFirefoxが最も推奨されています。

3. 検索ボックスにS3と入力し、以下に表示されるS3リンクをクリックしてAmazon S3のバケツページにアクセスします。

4. 次に、バケットの作成をクリックしてS3 バケットの初期化を行います。

5. 一般設定セクションにバケット名を入力し、バケットの作成をクリックしてS3バケットの作成を試みます。


もし覚えているならば、AmazonS3ReadOnlyAccessポリシーをuser-1に付与しました。このポリシーはuser-1にS3バケットを表示する読み取り専用の権限しか与えません。そのため、user-1がS3バケットを作成、削除、または更新しようとすると、以下に示すエラーメッセージが表示されます。
以下のエラーメッセージは、user-1に設定した権限が正常に機能していることを示しています。

user-1にはEC2の権限もありません。したがって、EC2のダッシュボードに移動してみると、以下のスクリーンショットのように多くのAPIエラーが表示されます。
これらのエラーが発生するのは、最小特権の原則(PoLP)のためです。PoLPは、特定のOSユーザーアカウントまたはプロセスが、ジョブを完了するために必要な絶対最小限の特権を持つべきであるというコンセプトです。

6. 今、user-1からログアウトし、user-2としてログインし、EC2ダッシュボードに移動します。

7. 実行中のEC2インスタンスをクリックして、user-2のアクセス許可を表示します。以下のように、インスタンスの情報(Instance ID、Public IPv4アドレスなど)が表示されます。

8. ページの右端にあるインスタンスの状態をクリックし、インスタンスの停止、再起動、または終了オプションのいずれかを選択して、user-2のパーミッションが機能するかどうかをテストします。

user-2はEC2インスタンスの読み取り専用アクセスしか持っていないことを忘れないでください(AmazonEC2ReadOnlyAccess)。したがって、ユーザーがEC2インスタンスを操作しようとすると、以下のエラーメッセージが表示されます。
以下のエラーメッセージが表示される場合、user-2のパーミッションが正常に機能していることを示しています。

9. 最後に、user-3としてログアウトし、アカウント内で実行されている任意のEC2インスタンスを操作してみてください。user-3は完全なEC2パーミッションを持っているため、エラーメッセージなしにインスタンスを開始、停止、または終了することができます。
結論
このチュートリアルでは、IAMユーザーとユーザーグループを作成し、定義されたポリシーを設定する方法について学びました。また、EC2インスタンスの状態の変更やS3バケットの作成を試みることで、権限が意図した通りに機能しているかを確認する方法にも触れました。
この時点で、IAMユーザーとグループの基本的なセットアップが完了しました。もちろん、アカウントにさらにユーザーを追加し、必要に応じてさらにポリシーを適用することも可能です。
では、次はどのように新たな知識を活かしてEC2サービスをAuto-Scalingに設定するかを見てみましょう。