AWS初心者にIAM Policy/User/Roleについてざっくり説明する
こんにちは、CX事業本部の夏目です。
先日、AWS初心者にIAM Policy/User/Roleについてざっくり説明する機会があったので、説明した内容を共有します。
IAM Policy/User/Role
結論だけ簡潔に表現すると、次のようになる。
- IAM Policyは できること/できないこと を定義し、UserやRoleに紐づけて使う
- IAM Userは、Policyを紐付けて、ユーザーができることを定義する
- IAM Roleは、Policyを紐付けて、誰か/AWSのサービス ができることを定義する
Policyは できること/できないこと を定義し、UserやRoleに紐づけて使う
IAM PolicyはAWSで何ができるかを定義するものです。
これ単体では何もできず、IAM UserやRoleに紐づけて使用します。
これはS3ReadOnlyAccess
という、AWSが提供しているマネージドポリシーです。
AWSが管理しているポリシーで、新しいサービスが追加されたときなど修正されることもあります。
画面に表示されているJSONのドキュメントがポリシー定義です。
ポリシー定義では、Statement
の配列にできること/できないことを書いていきます。
Statement
の要素では次の内容を記載します。
Effect
: "Allow"もしくは"Deny"を指定するAction
: 何の操作かを定義するResource
: 操作の対象を指定する
この他にもCondition
という項目があるのですが、ここでは省略します。
Action
やResource
では*
を使って、*
以前の前方一致にすることができます。
S3ReadOnlyAccess
ではAction
にs3:Get*
やs3:List*
とあるので、S3のGet
やList
で始まるActionが
利用できることになります。
(GetObject
とかListBuckets
とか)
Action
で許可する内容は、使いたいサービスのAPIに依存します。
基本的に、{サービス略称}:{Action名}
という形式で記述します。
(DynamoDBのGetItemというActionはdynamodb:GetItem
と書きます)
このポリシー定義ですが、IAM Policy以外でも必要になることがあります。
というか、AWSでポリシーという単語が出た場合、ほぼこの形式で記述するので覚えておきましょう。
IAM Userは、Policyを紐付けて、ユーザーができることを定義する
IAM UserはPolicyを紐付けることで、ユーザーができることを定義します。
できることはPolicyにかかれているとすれば、IAM Userとは何なのでしょうか?
それはユーザーを識別する情報ではないかと自分は考えます。
IAM Userの認証情報のタブの中身なのですが、Webコンソールのパスワードだったり、プログラムからAWSを触るためのアクセスキー、CodeCommit (Gitリポジトリサービス)で使うSSHキーなど、ユーザーを識別するための情報を保存します。
IAM Roleは、Policyを紐付けて、誰か/AWSのサービス ができることを定義する
IAM RoleはIAM Userと同じく、Policyを紐付けて、できることを定義します。
ではIAM Userとの違いは何でしょうか?
IAM Roleという概念だけでは誰のためのPolicyなのかがわからない、というのがIAM Userとの最大の違いではないかと自分は考えます。
IAM Userは必ず ユーザー が使います。主語は ユーザー になります。
しかし、IAM Roleは作成時に 誰 が使うのかを必ず定義する必要があります。
そして、この 誰 の対象が非常に広いのが特徴です。
これは、IAM RoleをWebコンソールから作成するときの画面になるのですが、主語の候補はこんなにたくさんあります。
AWSサービスだったり、別のアカウントだったり、SAMLフェデレーションだったり色々です。
IAM Userでは主語は必ずユーザーです。
しかし、AWSにおいて主語は必ずしもユーザーとは限りません。
例えばKinesis Firehoseというサービスでは、入力された情報をS3に保存する機能があります。 このとき、Kinesis Firehoseを主語とし、S3に書き込み権限を持つIAM Roleが必要になります。
まとめ
- IAM Policyは できること/できないこと を定義し、UserやRoleに紐づけて使う
- IAM Userは、Policyを紐付けて、ユーザーができることを定義する
- IAM Roleは、Policyを紐付けて、誰か/AWSのサービス ができることを定義する
最初に書いたようにまとめるとこうなります。
IAMというものは、ぱっと見 複雑に見えますが、ちゃんと分解して考えるとシンプルにできています。
ぱっと見 複雑なので初心者には避けたくなるかもしれませんが、AWSを使う上では避けることのできないものなので、覚えておきましょう。