⛑️

【AWS】「Service-Linked Role」というIAMリソースについて

2023/04/15に公開

Service-Linked Roleとは

こんにちわ!

DevelopersIO BASECAMP参加者の加藤です。

先日、Amazon GuardDuty や AWS Security Hubを含むテンプレート作成を行った際、

AWS::IAM::ServiceLinkedRole」という見慣れないリソースの存在を知り、概念を調べてみました。

当記事は、私同様「何それ そんなのあったけ?」という方に向けて短めの内容になります。

先に結論を

  • Service-Linked Roleは本来、「目的のサービスがその時必要としている他サービスへの権限を、AWSがマネージドで自動で検出して作成してくれる」ロール。

  • 2017年4月19日の発表から2018年7月19日にCloudformationのテンプレートのリソースとして追加されるまでの間は、コンソールから別で手動作成が必要だったが、現在はテンプレート上でもリソースとして作成出来るようになっている。

  • スタック実行以前に既に作成済みの場合「もう既に作ってあるじゃないですか」としてスタック作成をストップさせる事を観測。(※対象リソースによってはその限りでない可能性有り。)


もう少しわかりやすい表現

色々と読み漁った中で、私を一撃で理解に導いてくれたteratailのベストアンサーの方の説明を以下に抜粋します。

service-linked roleの名の通り、このRoleは対応しているAWSリソースを作成した際に自動で作成されます。
作成されるRoleにはAWSリソースに必要な権限のみ設定され、紐付いているAWSリソース以外からは使用することが出来ないというものになっています。
IAM Roleの場合、自分が持っている権限よりも強い権限を作って好きな対象に権限を付与することが出来ます。
service-linked roleは従来のIAM Roleと権限が分かれているため、自由にRoleを作られることなくAWSサービスに必要な権限だけ与えることが出来るというわけです。

テンプレートでの利用例

概念だけざっくり理解した所で、実際に「Type: AWS::IAM::ServiceLinkedRole」をテンプレートに含めた例を既に公開されている記事を3点見つけましたので紹介させてください。
https://tech.bita.jp/article/50
https://sal-blog.com/【サンプルyamlあり】dynamodbでテーブルとインデックス/
https://sotoiwa.hatenablog.com/entry/2020/05/14/214942

合わせて読みたい

[公式ドキュメント]

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/using-service-linked-roles.html

現在サービスリンクドロールがどのサービスに対応しているかの一覧。
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html

[クラスメソッド様のブログ記事]

https://dev.classmethod.jp/articles/aws-iam-service-linked-role/
https://dev.classmethod.jp/articles/iam-service-linked-roles-cloudformtion/

終わりに

以上です。お付き合いありがとうございました!

デベキャン

Discussion