はじめに
レプリケーションの設定をしている時に、IAMロール・AWSサービスロールという2つが出てきてそれぞれのロールの違いって何?となったので色々調べて自分なりに理解したのでそれを備忘録として残す
IAMロール(単に「ロール」)とは
公式の説明の通り、IAMロール(単に「ロール」)とは、一時的な権限としてユーザとかサービスに権限を付与するのに使うもの
このロールは同一AWSアカウント内のユーザの権限を制御するためにあるものではなく、
- AWSのサービスに対して権限を付与する
- 他のAWSアカウントのユーザに一時的に使ってもらうための権限を付与する
- WebサービスからAWSのアクセスしたりするための権限を付与する
という事をするために存在する
そのため、AWSアカウントに属するユーザに対して権限を制御をするのにロールをアタッチして・・・という事は行わない
(AWSアカウントに属するユーザに対する権限設定は、ユーザに管理ポリシー・インラインポリシーなどを付与する)
それは実際にManagement Console上から新規ロールを作成するという手順を見ると分かるが、以下の画像のようにロール作成時には信頼されたエンティティの種類の選択
というStepが必須で存在し、信頼されたエンティティとは、自分のAWSにアクセスしてもいいと思う=信頼するアクセス元(エンティティ)
という意味と思われるので、何か(ユーザ・サービスなど)に権限を与えるためのものと考えられる
・参考:ロールの用語と概念 ロール
・参考:IAMロールと信頼されたエンティティの関係性
・参考:自分なりにAWS IAMについてまとめた ロール
AWSサービスロール(単に「サービスロール」)とは
※ユーザに代わって何かを行うの例としては、
- S3のレプリケーション
- Code BuildでBuildする時にCode Commitからソースコードをチェックアウトする
- LambdaからECSのUpdateService、CloudFrontのCreateInvalidationを実行する
といった事で、ユーザがAWSの各サービスAPI(AWS CLIコマンドでできる事と思ってOK)を呼び出して行う操作
ここで、『あれIAMロールもAWSのサービスに権限を付与するために使えるとなっていたけどどういう事?』となるが、サービスロールとは上記で書いたIAMロールの中のサービスに限定したものでARNのパスでサービスロールと識別できるものと考えられる
(「信頼されたエンティティの種類」がAWSサービスを選択したIAMロール = AWSサービスロール)
ロールとしての機能は、IAMロールもAWSサービスロールも同じ(実際にIAMロールとサービスロールとで同じ事ができる事を確かめた記事はここを参照)
※IAM 識別子というページに書かれているように、あくまで識別子で分かりやすくするためにロールのARNのパスを/service-role/
としているだけ(ARNを見た時に、/service-role/
となっていれば見ただけで、『あーこれはサービスロールなのね』と分かるという事)
・参考:自分なりにAWS IAMについてまとめた サービスロール
各ロールの見分け方
-
IAMロール
ロールのARNのパスが/
であるもの
ロールのARNはarn:aws:iam::123456789012:role/{role名}
という形式 -
AWSサービスロール
ロールのARNのパスが/service-role/
であるもの
ロールのARNはarn:aws:iam::123456789012:role/service-role/{ロール名}
という形式
IAMロール | サービスロール |
---|---|
ちなみに、Management ConsoleからAWS のサービス用ロールの作成 (コンソール)の手順でロールを作成すると必ずIAMロールになる
これはAWS CLIコマンドのcreate-role
の説明を見ると、
This parameter is optional. If it is not included, it defaults to a slash (/).
このパラメーターはオプションです。 含まれていない場合、デフォルトでスラッシュ(/)になります。
と書かれているように、オプションで指定しないとデフォルトでパスが/
になるため
つまり、Management Consoleからではpathのオプション設定ができないので、サービスロールである事を識別できるようにしたい時はAWS CLIコマンドでロール作成を行う必要がある
・参考:AWS CLI create-role
・参考:【AWS】IAM ロールのパスをルート(/)以外にする