Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

【AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得】セクション12: 【IAM】アクセス権限を管理しようで知らなかったことをざっくりまとめてみた

概要

IAMポリシー、IAMグループ、IAMユーザー、IAMロールを作成していきます。

IAMとは何か?

IAMとは、 AWSのサービスを利用するユーザー権限を管理するサービスです。 IAMではAWSリソースをセキュアに操作するために、認証・認可の仕組みを提供しています。各AWSリソースに対して別々のアクセス権限をユーザーごとに付与できます。IAM自体の利用料は無料です。

(※)AWSリソースは、ざっくり言うとAWSのサービスです。

IAMを理解する上で重要な4つの用語

用語 意味
ポリシー ポリシーとは、アクセス許可を定義したものです。「どのAWSサービスの」「どのリソースに対して」「どんな操作を」「許可する(逆に許可しない)」 を定義します。ポリシーをユーザー・グループ・ロールに割り当てていきます。 ポリシーは自分で作ることもできますが、AWSで既存のポリシーが用意されています。
ユーザー ユーザーは、個々のユーザーのことです。IAMユーザーは基本的にはユーザーごとに作成します。
グループ グループは、IAMユーザーの集合体です。複数のユーザーにアクセス許可を付与する作業を簡素化するためにあります。グループにポリシーを割り当てて、そのグループにユーザーを所属させれば、 ユーザーごとにポリシーを割り当てなくてもユーザーにポリシーを割り当てることができます。
ロール ロールは、一時的にアクセスを許可したアカウントを発行して権限を一時的に移譲するためのものです。ロールはEC2やLambdaなどのAWSリソースに権限を付与するために使用します。 ロールは、 AWSのサービスに割り当てて使用します。 仕組みとしてはSTSというAWSのサービスが裏で動いていて、一時的なアクセスキーとシークレットアクセスキーを発行してそれによってアクセスを可能にしています。アクセスが終わったらそれらのキーは削除するので、漏洩のリスクがなくなります。 ロールは、EC2やLambda等から別のAWSサービスを操作したい時に使用します。

オリジナルのポリシーを作成する

オリジナルのポリシー(DeveloperPolicyとDirectorPolicy)を作成します。DeveloperPolicyは開発者用のポリシーです。EC2とRDSの操作が全てできます。DirectorPolicyはディレクター用のポリシーで、EC2の読み取りだけができます。

作業手順

手順1:
IAMのダッシュボードから「ポリシー」→「ポリシーを作成」をクリックします。ポリシーでは、一つ一つのアクションに対してどんな操作(アクション)ができるかを定義します。まずはEC2から定義します。全てのEC2アクションと全てのリソースを選択します。これでEC2の全てのリソースに対して全ての操作ができるようになりました。同様の手順でRDSも定義していきます。「さらにアクセス許可を追加する」をクリックして同様のことをします。 Image from Gyazo

次に、「次のステップ: タグ」→「次のステップ: 確認」をクリックします。ポリシーの名前を入力します。BlogTestDeveloperPolicyにしました。説明も同じものを入力します。その後、ポリシーの作成をクリックします。 Image from Gyazo

手順2:
次にDirectorPolicyも作成します。「ポリシーを作成」をクリックしてEC2を検索して選択します。アクセスレベルは読み込みを選択します。リソースは全てのリソースを選択します。その後、「次のステップ: タグ」→「次のステップ: 確認」をクリックします。ポリシーの名前は、BlogtestDirectorPolicyにします。説明にも同じものを入力します。最後に「ポリシーの作成」をクリックします。 Image from Gyazo

作成したポリシーに該当するIAMグループとIAMグループに所属するIAMユーザーを作成する

作成したポリシーに該当するIAMグループとIAMグループに所属するIAMユーザーを作成します。

作業手順

手順1:
IAMのダッシュボードから「ユーザーグループ」→「グループを作成」をクリックします。グループ名を入力します。今回は開発者用のグループを作るのでBlogTestDevelopersというグループ名にしました。許可ポリシーを添付で先ほど作った開発者用のポリシーを付与します。最後に「グループを作成」をクリックします。これで開発者用のIAMグループを作成できました。 Image from Gyazo

同様の手順でディレクター用のグループを作成します。グループ名をBlogTestDirectorsにして、先ほど作成したディレクター用のポリシーを付与して、「グループを作成」をクリックします。これでディレクター用のIAMグループを作成できました。

Image from Gyazo

手順2:
次にIAMグループに所属させるIAMユーザーを作成します。IAMのダッシュボードから「ユーザー」→「ユーザーを追加」をクリックします。まずはDevelopersグループのユーザーを作成します。今回はkumeとtaguchiというユーザー名でユーザーを作ります。一回のユーザー作成で複数人のユーザーを作成したい場合、「別のユーザーの追加」をクリックします。AWS マネジメントコンソールへのアクセスにチェックをつけます。次にカスタムパスワードのパスワードを入力します。入力できたら「次のステップ:アクセス権限」をクリックします。アクセス許可の設定で「ユーザーをグループに追加」を選択します。その後、開発者用のグループを選択します。最後にユーザーの作成をクリックします。一応CSVのダウンロードをしておきます。これで、kumeとtaguchiというユーザーを作成できました。ユーザー一覧でkumeとtaguchiが開発者用のグループに所属しているのが確認できます。 Image from Gyazo

同様にディレクター用のIAMユーザーを作成します。ユーザー名はfukushimaにしておきます。「ユーザーをグループに追加」でディレクター用のグループを選択して、「ユーザーの作成」をクリックします。これでディレクター用のグループに所属するディレクター用のIAMユーザーを作成しました。

作成したユーザーでログインすると、ちゃんと付与した権限通りの操作しかできないようになっていました。

Webサーバー用のロールを作成して、ロールにポリシーをアタッチする。その後、ロールをWebサーバーにアタッチする

Webサーバー用のロールを作成して、ロールにポリシーをアタッチします。その後、ロールをWebサーバーにアタッチします。そうすることで、EC2インスタンスからS3の操作ができるようになります。

作業手順

手順1:
EC2サーバーにログインして、S3のバケット一覧を取得します。現在はEC2にS3を操作する権限が付与されていないので、EC2でS3のバケットを取得するコマンドを実行しても取得できません。まずはEC2インスタンスにログインしてみます。次にS3のバケット一覧を以下のコマンドを実行して取得します。

aws s3 ls

Image from Gyazo

実行すると、EC2サーバーからS3を操作するのができないことが分かります。

手順2:
IAMのダッシュボードから「ロール」→「ロールを作成」をクリックします。信頼されたエンティティでは、ロールを使うサービスを選択します。今回はEC2なので、EC2を選択します。その後、「次へ」をクリックします。 Image from Gyazo

次に許可ポリシーでEC2にアタッチするポリシーを選択します。今回はEC2からS3を操作したいので、AmazonS3FullAccessを選択します。その後、「次へ」をクリックします。ロール名は今回はBlogTestUseS3を入力します。その後、「ロールを作成」をクリックします。

手順3:
EC2のダッシュボードでロールを割り当てたいEC2インスタンスを選択して、「アクション」→「セキュリティ」→「IAMロールを変更」をクリックします。先ほど作成したIAMロールを選択して、IAMロールをEC2インスタンスにアタッチします。その後「IAMロールの更新」をクリックします。 これでEC2インスタンスにIAMロールをアタッチできました。

Image from Gyazo

EC2インスタンスで先ほどのコマンドを実行して、s3のバケット一覧が取得できるのが確認できました。このようにロールをアタッチすることで、EC2インスタンスからS3を操作できるようになりました。 Image from Gyazo

IAMの5つのベストプラクティス

  1. 使用者ごとにIAMユーザーを作成する
    ルートユーザーは何でもできるので、ルートユーザーを使ってAWSのサービスを使わないようにします。誰がどのような操作をしたか記録したいためです。
  2. ユーザーをグループに所属させ、グループに権限を割り当てる
    権限を変更したいときに、ユーザー一人一人の権限を変えていくのは面倒なので、グループにユーザーを所属させます。
  3. できる限り権限は最小限にする
    足りなければ後から足していきます。
  4. EC2インスタンスから何か別のAWSサービスにアクセスしたい場合、ロールを作成してEC2インスタンスに付与する
  5. 定期的に不要な認証情報を削除する
    退職した人のIAMユーザーなどを残さないように、削除しておきます。

参考記事

AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得 | Udemy