はじめに
AWSを利用してシステム開発をする際やAWSアソシエイト試験の勉強をしている際に、「AWSのリソースにアクセスするためにはIAMの制御が必要とあるけど、IAMは実際にどう利用されているんだ?」と気になったので調べてみました。AWS初心者なので、間違ってましたらご指摘頂けると助かります。
IAMを利用したAWSリソースにアクセスする流れ
AWSリソースにアクセスする仕組み
AWSのBlackBeltのIAMドキュメントによるとAWSリソースにアクセスするための仕組みは以下のようです。
- プリンシパル
- 認証
- リクエスト
- 認可
- アクション/オペレーション
- AWSリソース
例を用いてこの順番に沿って記載していこうと思います。
ケース1:EC2インスタンスからS3のデータを更新する仕組み
- EC2がS3にアクセスしようとする。
- EC2に付与されているIAMロールに基づいてAWS STSが働き、STSが一時的に利用可能な認証情報であるCredentials(アクセスキー、シークレットアクセスキー、トークン)を払いだす。
- 取得したCredentialsを元にS3にアクセスする。
- S3はロールにアタッチされているポリシー(アイデンティティベースのポリシー)やリソースにアタッチされているポリシー(リソースベースのポリシー)やACLなどのその他のポリシーを元に認可を実施する。
- EC2にてS3のデータを更新するオペレーションを実施する。
- S3のデータが更新される。
ケース2:開発者アカウントを利用して本番環境のS3データを更新する仕組み
- 前提として、開発者アカウントには本番アカウントのs3-roleの引き受けを許可するポリシーが設定されており、本番アカウントにはs3-roleを誰が引き受けられるか定義した信頼ポリシーがs3-roleに設定されている。
- 開発者が本番環境のS3データを更新しようとする。
- 開発者アカウントのアクセスキーによる認証が実行され、s3-roleを引き受け、一時的な認証情報であるCredentials(アクセスキー、シークレットアクセスキー、トークン)をを開発者アカウントが取得できる。
- 取得したCredentialsを元にS3 APIの呼び出しを行う。
- S3はロールにアタッチされているポリシー(アイデンティティベースのポリシー)やリソースにアタッチされているポリシー(リソースベースのポリシー)やACLなどのその他のポリシーを元に認可を実施する。
- S3 APIにてデータを更新するオペレーションが実施される。
- S3のデータが更新される。
最後に
IAMを利用したAWSリソースにアクセスする仕組みをまとめてみました。業務でもAWSを利用しているのですが、AWS STSが重要な役割を果たしているとは露知らず、新たな発見でした。
参考元
・BlackBeltのIAMドキュメント:
https://d1.awsstatic.com/webinars/jp/pdf/services/20190129_AWS-BlackBelt_IAM_Part1.pdf
・アイデンティティベースのポリシーとリソースベースのポリシーについて:
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_identity-vs-resource.html
・IAM Roleを理解する
http://blog.serverworks.co.jp/tech/2018/02/16/understarnd_iam_role/
記事内に誤りがあればご指摘いただけると嬉しいです!