話題の記事

AWS初心者にIAM Policy/User/Roleについてざっくり説明する

2020.01.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、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という項目があるのですが、ここでは省略します。 ActionResourceでは*を使って、*以前の前方一致にすることができます。

S3ReadOnlyAccessではActions3:Get*s3:List*とあるので、S3のGetListで始まる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を使う上では避けることのできないものなので、覚えておきましょう。