AssumeRoleとはなんぞや!
はじめに
AssumeRoleとはなんぞや!
そう、私はAWSを利用している中でAssumeRoleという言葉の意味がイマイチピンと来ていない人でした。そんな中、会社のAWSマスターさんから色々教わり、AssumeRoleとはなんぞやをやっと(私なりに)理解しました。サンキュー、AWSマスターさん。
要は、AssumeRoleとはなんぞや
- AssumeRoleとはAWS STSのサービスの1機能のことを指していて、IAMロールに設定した権限を一時的に使えるようにTokenを発行する行為や!
- なので、「○○するためにAssumeRoleする」と言う言葉の使い方で通じる。
- AWS STS(Security Token Service)は「AWSサービスに対して何かしら操作したい時に、一時的に操作する権利(Token)を発行する」シンプルなサービス。
- 正確にいうと一時的な認証情報「アクセスキー」、「シークレットキー」、「セッショントークン」が発行される
- IAMロールを割り当てできる全てサービスがAssumeRoleすることが出来る。
- AssumeRoleすると一時的なシークレットキー
- AssumeRoleした時に紐づいたIAMロール内にあるIAMポリシーの操作を行えるようになる。
- AssumeRoleすることで別アカウントのサービスに一時的にアクセスする事ができるようになる。
ここで完全理解したのであれば、もうOKだと思います。🙆♂️
以下は、私が理解に至った流れを記載しています。
何もわかっていなかった当時の私(⌒,_ゝ⌒)
- AssumeRoleと言うIAMロールとは別のロールがあるのか?
- 色々サイトを見るとAssumeRoleはユーザのスイッチロールのことらしい。ふむ。なるほどね。
- あれ?AWS管理者でもない、サービス開発の人がAssumeRoleについて悩んでいる人がいるぞ?なんでだ?スイッチロールでも出来なくて困っているのか?
- あれ?AssumeRoleの単語がよく飛び交うようになったな、やっぱりサービスで使うものらしいが、どう言うことだ?ようわからん・・・🤯
- アシュームロール ナニモワカラナイ・・・・
そこでAssumeRoleについて理解しようと少しだけ頑張ってみた。
AssumeRoleを調べる時に何度も見たサイト
https://dev.classmethod.jp/articles/iam-role-passrole-assumerole/
https://dev.classmethod.jp/articles/developersio-2021-deploy-aws-use-assumerole/
👺と邪気眼のイラストが目に焼きついて、二度と忘れない素晴らしい解説サイトです。
しかし、私の知識不足のため、あの素晴らしいイラストが逆に当時の自分を迷わせていました。
全てを理解する前にもう少し噛み砕いた表現や考えがないとダメだなと思い、このサイトでもあまり理解できずにいました。
仕事仲間にAWSマスターがいたので、聞いてみたところ無事腹落ち出来た。
AssumeRoleを理解する その1 (スイッチロール)
- AWSへログインするには何が必要か。
- IAMユーザが必要になる。
- 管理者が払い出す。
- IAMユーザでログインしてAWSコンソールを閲覧したり、操作したり出来るようになる。
- ユーザが使う。
- IAMユーザが必要になる。
- 払い出したIAMユーザにはIAMロールをアタッチして、適切な権限を与える。そうしないとセキュリティリスクになる。
- 例えば、一般ユーザとして払い出したIAMユーザだと、EC2、VPC、S3の閲覧権限のみを割り当てたい場合は、IAMユーザに対してIAMロールを付与する。
- IAMロールとは、IAMポリシーというAWSサービスをどこまで操作、閲覧できるかを制御するもので、IAMロールと紐付けるもの。
- 既存で用意されているIAMロールもあるが、細かく制御するなら自分でIAMロールを作成する。
- 管理者としては基本的には閲覧しかできないユーザでログインしてもらい、必要なサービスだけその権限をもったユーザで操作してほしいという気持ちがある。
- が、そのために用途別にユーザを大量に作成したら、管理が大変。
- IAMロールだと汎用的なので、特定の場合のみそのロールをIAMユーザに付与して操作してもらった方が、管理者が楽で安全。
- AWSではIAMロールだけを切り替えれるようになっている。
- これが、スイッチロールと呼ばれるもので、ブラウザ上に表示されているAWSコンソール右上あたりから、できるようになっている
-
この時、スイッチロールしているが、内部的にAssumeRole動いている!
- AssumeRoleはIAMロールが紐づいているサービスに対して行うもの
- ※スイッチロールできるIAMロールには、AssumeRoleを許可するポリシーがついたIAMロールを付与されている必要がある。
- AssumeRoleはSTSのサービスで、特定のロールに対して一時的に操作できるようにTokenを払い出している。
- つまり、ブラウザでポチポチとスイッチロールする行為とは、ブラウザでログインしたユーザをもとに特定のロールで操作したいので特定のロールにSTSサービスのAssumeRoleを使うことで、一時的にそのロールを自分で操作できるようになるという事。
- よって、スイッチロールする≒AssumeRoleを使って一時的にTokenを貰って操作できるようにする。
AssumeRoleを理解する その2 (サービス)
- 一例として、EC2を使ったサービスがあったとする。
- EC2の仕様でインスタンス毎にIAMロールを付与することが出来る。
- EC2のサービスでデータ保存する際にS3のストレージサービスを利用しているが、別アカウントのS3からも取得したい要件がある。
- この場合もAssumeRoleが活躍する。
- EC2のサービスがAWS CLIや、言語毎のAWS SDKを使ってAWS STSを使ってAssumeRoleする事で、一時的に別アカウントにアクセスできるTokenを発行できる。
- そのTokenを使えば、EC2サービスは別アカウントのS3にアクセス出来るようになる。
まとめ
AssumeRoleする行為には、ユーザとサービスの2パターンが存在する。
- ユーザのパターンとは、ブラウザでスイッチロールすることを指す。
- 内部的にAssumeRoleしており、ユーザから見たらあたかもアカウントを切り替えているように見える。
- サービスのパターンとは、EC2などのIAMロールを付与できるサービスが、IAMロールを付与できるサービスにアクセスすることを指す。
- 何かしらの手段でAssumeRoleしたいIAMロールを指定し、そのIAMロールを利用できるTokenを払い出し、利用する。
上記はいずれも、自アカウント、別アカウント問わずAssumeRoleできる。
そして、AssumeRoleの対象のIAMロールにはAssumeRoleを許可しているポリシーが付与されている必要がある。
終わり
以上が、私なりに理解したAssumeRoleの理解でした。
冒頭の👺のページなどをしっかり読めば、理解できる内容ですが、個人的に難しかったので、改めてまとめました。
この記事が役に立てれば、幸いです。
Discussion