IAM UserとIAM Roleの違い — EC2からS3にアクセスする場合はどちらを使うべきか
EC2上のアプリケーションにS3アクセスを与えようとしたとき、最初に思いつくのは「IAM Userを作ってアクセスキーを発行すればいい」という方法だ。実際、多くの現場でこのパターンが使われてきたが、これは後になって必ず問題を起こす。IAM UserとIAM Roleの違いを正確に理解していないと、セキュリティインシデントの温床になる設計を量産することになる。 TL;DR — IAM UserとIAM Roleの比較 観点 IAM User IAM Role 認証方式 長期クレデンシャル(アクセスキー/パスワード) 一時的なSTSトークン(自動ローテーション) 主な用途 人間のオペレーター、CLIを使う開発者 AWSサービス、アプリケーション、クロスアカウントアクセス EC2からS3アクセス 非推奨(アクセスキーをインスタンスに配置するリスク) 推奨(インスタンスプロファイル経由で自動取得) クレデンシャル管理 手動ローテーションが必要 STSが自動でローテーション 最小権限の実装 ユーザー単位またはグループ単位 ロール単位、引き受けるエンティティを信頼ポリシーで制御 IAM UserとIAM Roleの仕組みを理解する IAM Userは「人」に対応するアイデンティティだ。ユーザー名とパスワード、またはアクセスキーID/シークレットアクセスキーというロングタームクレデンシャルを持つ。このクレデンシャルは明示的にローテーションしない限り有効であり続ける。 IAM Roleはそれとは根本的に異なる。Roleは「引き受けるもの」であり、それ自体はクレデンシャルを持たない。エンティティ(EC2インスタンス、Lambda関数、別アカウントのユーザーなど)がRoleを引き受けると(AssumeRole)、AWS Security Token Service(STS)が一時的なクレデンシャルを発行する。このトークンは有効期限付きで、自動的に更新される。 IAM Userのアクセスキーは、金庫の鍵を複製して誰かに渡すようなものだ。IAM Roleは、必要なときだけ開く電子錠に近い。鍵そのもの...