AWSIAMについてまとめてみた
概要
会社で AWS を触ることになり、基本から学んでいこうと思ったため備忘録として記事を書き始めました。
最初ということで AWSIAM のユーザー、グループ、ロール周りの説明と実際に理解するためのハンズオンを AWS ハンズオンを参考に作成してみました。
もし理解が違うよというところ等ありましたら優しく教えて頂けると幸いです 🙇♀️
AWSIAM とは
公式ドキュメント引用。
AWSIAM とは、AWS Identity and Access Management の略語です。
AWS 上で作成したユーザーに適切なアクセス権限を割り当て、AWS リソース[1]へのアクセスを制限することによって誤ってリソースを削除される等のリスクを減らしています。
どの様にユーザーが作成され、各リソースへのアクセスを制限するのか、次の章から説明していきます。
リソースへのアクセスを制限する流れ
リソースへのアクセスを制限する全体の流れを図示しています。
各用語の意味・リソースへのアクセス制限の流れについては、以降の章で説明していきます。
ルートユーザーと IAM ユーザーの違い
まず、ルートユーザーと IAM ユーザーの違いから説明します。
ルートユーザーとは AWS に初期登録した際に登録されるユーザーのことです。
Email とパスワードでログインできます。
そして、IAM ユーザーとは AWS 内で作成するユーザーのことです。
アカウント ID、IAM ユーザー名、パスワードでログインできます。
ポリシーとは
次に、ポリシーです。
ポリシーとは各ユーザーや後述のグループ、ロールに対して AWS リソースへのアクセス権限を割り当てる物です。
json ドキュメントにより設定します。
もう少し具体的に言うと、ある IAM ユーザー A・B を作成しユーザー A には S3 への書き込み・読み取り権限を許可する旨を記載したポリシー、ユーザー B には S3 への読み取りのみを許可したポリシーを割り当てるといったことができます。
実際のポリシーとしては以下の様な物になります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*",
"s3-object-lambda:Get*",
"s3-object-lambda:List*"
],
"Resource": "*"
}
]
}
グループとは
次に、グループです。
グループとは、IAM ユーザーをその責務ごとに分けるためにある物です。
各グループごとにポリシーを付与してアクセスできる AWS リソースを制限することができ、新規で登録した IAM ユーザーに直接権限を設定せずにグループに放り込むだけで各リソースへのアクセスを制限することができます。
具体的には、開発者グループ、監視者グループなどといった様に分け、開発者グループには S3 への全アクセスを許可したポリシー、監視者グループには読み取りのみを許可したポリシーを割り当てるといったことができます。[2]
ロールとは
最後にロールです。
ロールとは、ポリシーを割り当てられる物であり、そのロールを更に外部の AWS アカウントや、自分の AWS サービス内のリソース、外部サービスのユーザー等に割り当てることで各ユーザーやサービスのアクセスを制限します。
以下主な使用例です。
- 外部の AWS アカウントに割り当てて、一時的に自分の AWS アカウントの特定のリソース(S3 等)へのアクセスを許可する。
- 自分のアカウントのリソースに割り当てて、別リソースへのアクセスを許可させる。例えば、EC2 に S3 へのアクセスを許可するロールを割り当てて、EC2 のターミナルから S3 へのアクセスを行うことを許可する。
- AWS ではない外部サービスのユーザーに割り当てて、一時的に自分の AWS アカウントの特定のリソース(S3 等)へのアクセスを許可する。
AWS リソースへのアクセス制限の流れ
以上 IAM に関する各用語の説明から、ざっくりアクセス制限までの流れをまとめると、上の図の様な流れになります。
5、6 に関しては必要になった際にやってもらえればと思います。
グループ、IAM ユーザーを作成して動作を確認してみよう
では、上記で説明した一連の流れをハンズオンで実践してみます。
少し長くなりますが、一緒にやってみてもらえると嬉しいです 🙇♀️
ここでは、以下の様な構成・流れでグループ、IAM ユーザーを作成、各ユーザーからのリソースへのアクセスを制限します。
ざっくり説明すると S3 へのアクセス制限をかけた開発者グループと監視者グループにそれぞれユーザーを配置し、各ユーザーからどういった操作が S3 に対してできるかを確認していきます。[3]
- ルートユーザーの作成
下記 URL に沿って AWS アカウントを作成してください。
作成したアカウントがそのままルートユーザーになります。
最後のステップで AWS マネジメントコンソールにログインすることができるので、そのままルートユーザーでログインしてください。
- 各グループの作成、ポリシーの付与
次に、S3 への書き込みを許可するポリシー・読み取りを許可するポリシーを割り当てたグループ、読み取りを許可するポリシーのみを割り当てたグループをそれぞれ作成します。
まず、AWS マネジメントコンソールの検索ボックスで IAM と検索し、IAM 設定画面を開いてください。
左サイドバーのアクセス管理 > ユーザーグループを押下、ユーザーグループー一覧のトップに現れるボタンのグループを作成を押下してください。
ユーザーグループを作成するための画面がでてきます。
まず、開発者グループを作成します。
ここには、後ほど作成する開発者ユーザーを参加させます。
ユーザーグループ名にdeveloper-group
と入力します。
許可ポリシーを添付の検索ボックスにAmazonS3FullAccess
と入力してください。
すると、AmazonS3FullAccess
が表示されるので、左のチェックボックスを押下してください。
また、AWS CloudShell
から S3 への操作を行うため、AmazonCloudShellFullAccess
も同じ様に検索して左のチェックボックスを押下してください。
最後に、ページ下部のグループを作成ボタンを押下してください。
次に、監視者グループを作成します。
ここには、後ほど作成する監視者ユーザーを参加させます。
ユーザーグループ名にobserver-group
と入力、許可ポリシーとしてAmazonS3ReadOnlyAccess
とAmazonCloudShellFullAccess
を追加してください。
その後の流れは上と同じです。
- 各 IAM ユーザーの作成、グループへの追加
次に、作成したグループに参加させる IAM ユーザーを作成、グループに参加させます。
まず、開発者ユーザーを作成します。
左サイドバーのアクセス管理 > ユーザーを押下、ユーザーグループー一覧のトップに現れるボタンのユーザーを追加を押下してください。
ユーザーの詳細を指定画面に遷移します。
ユーザー名にdeveloper
と入力してください。
AWS マネジメントコンソールへのユーザーアクセスを提供するにチェックをし、IAM ユーザーを作成しますを選択、カスタムパスワードを選択、自分で決めたパスワードを入力してください。
Users must create a new password at next sign-in - Recommended のチェックははずしておいてください。
次へを押下してください。
次に、許可を設定画面に遷移します。
先ほど作成した開発者グループに開発者を参加させたいため、許可のオプションでユーザーをグループに追加を選択します。
ユーザーグループでは先ほど作成した開発者グループdeveloper-group
をチェックして、次へを押下してください。
次に、確認して作成ページに遷移します。
ページ一番下のユーザーの作成を押下してユーザーを作成してください。
最後にコンソールサインインの詳細が表示されるので、ここでコンソールサインインの URL、ユーザー名、パスワードをメモしておいてください。
次に、監視者ユーザーを作成します。
ユーザー名はobserver
、ユーザーグループは先ほど作成した監視者グループobserver-group
として、上記と同じ様にユーザーを作成してグループに追加してください。
- 開発者ユーザーが S3 への書き込み、読み取りが行えることを確認する
次に、先ほど作成したdeveloper
というユーザーで AWS マネジメントコンソールにログインして、許可された操作を CloudShell から行ってみます。
まず、右上のアカウント情報を押下、サインアウトで現在ログインしているルートユーザーからログアウトします。
次に、先ほど記録したdeveloper
のコンソールサインインの URL をブラウザの検索バーに入力して、AWS マネジメントコンソール画面へのサインイン画面を開いてください。
ユーザー名・パスワードを入力してdeveloper
で AWS マネジメントコンソールにサインインしてください。
これで、developer
で AWS マネジメントコンソールにログインできました。
次に、developer
には S3 バケットへの書き込み・読み取りを許可したため、AWS CloudShell で S3 バケットへの書き込み・読み取りできるか確認します。
ページ下部のバーの一番左、CloudShell を押下して AWS CloudShell を起動します。
まず、S3 への書き込みができるか確認します。
以下コマンドを入力してバケットを作成できるか確認してみてください。
バケットは世界で一つの名前にしなくてはならないため、他の人と被らない様な名前を入力してください。
$ aws s3 mb s3://[bucket-name]
成功すると、下記の様に表示されるはずです。
これで、developer
では S3 への書き込みができることが分かりました。
次に、S3 からの読み込みができるか確認します。
以下コマンドを入力してバケットの一覧が閲覧できるか確認してみてください。
$ aws s3 ls
成功すると、下記の様に表示されるはずです。
これで、developer
では S3 への書き込みができることが分かりました。
上記手順でdeveloper
は所属するグループに設定されたポリシー通りに S3 への書き込み・読み込みができることが分かりました。
- 監視者ユーザーが S3 への読み取りのみが行えることの確認
次に、ユーザーをobserver
に切り替えて、S3 からの読み込みしかできないことを確認していきます。
ルートユーザーからログアウトしてdeveloper
にログインしたのと同じ流れで今度はobserver
で AWS マネジメントコンソールにログインし、AWSCloud Shell を開きます。
上記で入力したのと同じバケット作成用コマンドを入力してバケットを作成できるか確認してみてください。
今回は、失敗して下記の様に表示されるはずです。
バケットを作成する権限が無い旨のエラーメッセージが表示されています。
次に、上記で入力したのと同じバケット読み込み用コマンドをを入力してバケット一覧が閲覧できるか確認してみてください。
成功すると、下記の様に表示されるはずです。
これで、observer
は所属するグループに設定されたポリシー通りに S3 からの読み込みのみができることが分かりました。
終わりに
ハンズオンお疲れ様でした。
今後ロールやポリシー周りの設定等、より深ぼっていきたいと思います。
ここまで読んでいただき本当にありがとうございます 🙇♀️
Discussion
先日の「エンジニアの勉強法ハックLT」に参加し、alichanさんのLTを聞かせていただきました。
自分もAWSの学習を始めたところだったので、この記事が図解入りで丁寧に用語解説までしてあり、
操作のフローがとてもわかりやすく読み進められました。
この記事を参考に試していきたいと思っています。ありがとうございます。
これからもAWSの記事期待していますw
え〜ありがとうございます!!
わざわざこちらでコメントいただけると思ってなかったのですごく励みになりました🥳
これからもできるだけ正しくて分かりやすい記事書こうと思います〜!