Skip to content
Latchkey

IAM Roleとは?assume可能なAWSアイデンティティ

IAM roleは、パスワードでloginする人ではなく、信頼された者なら誰でもassumeして一時的なクレデンシャルを得られる、パーミッションを持つAWSアイデンティティです。

IAM userと異なり、roleは恒久的なクレデンシャルを持ちません。代わりに、信頼されたprincipalがroleをassumeし、そのパーミッションにスコープされた短命のクレデンシャルを受け取ります。roleは、誰も長期のキーを保存することなく、AWSサービス、EC2インスタンス、CI pipelineがあなたのアカウント上で動作する方法です。

permission policy対trust policy

roleは2つのpolicyを持ちます。permission policyはroleが何をできるかを述べます。trust policyは誰がそれをassumeすることを許されるかを述べます。両方が揃う必要があります: 呼び出し元は信頼されている必要があり、roleは呼び出し元が必要とするパーミッションを持つ必要があります。

roleをassumeする

principalがroleをassumeすると、AWS STSが設定された期間後に期限切れになる一時的なクレデンシャル (access key、secret、session token) を発行します。呼び出し元はそれらを使ってAPI呼び出しを行い、セッションが終わると消えます。

roleの一般的な用途

  • サーバー上のアプリが自動的にクレデンシャルを得るためのEC2 instance profiles。
  • LambdaやECSがあなたの代わりに動作できるようにするservice roles。
  • AWSアカウント間のアクセスのためのcross-account roles。
  • GitHub ActionsのようなCIシステムのためのOIDC roles。

なぜroleがキーに勝るか

静的なaccess keyは漏洩し残り続ける可能性があります。roleは自動的に期限切れになるクレデンシャルを発行し、きつくスコープでき、誰がいつ何をassumeしたかの明確な監査証跡を残します。自動化にとって、これはより安全かつ運用しやすくもあります。

CI/CDでの役割

deploy jobがroleをassumeしてjust-in-timeなクレデンシャルを得て、deployを実行し、クレデンシャルは期限切れになります。GitHub Actions OIDCでは、workflowがtrust policyが受け入れるトークンを提示してroleをassumeするので、保存されるAWS secretsはゼロで、アクセスは特定のrepoやbranchに限定されます。

重要なポイント

  • IAM roleは、一時的で期限切れになるクレデンシャルを付与するassume可能なアイデンティティです。
  • そのtrust policyが誰がassumeできるかを制御し; permission policyが何ができるかを制御します。
  • pipelineは、長期のAWSキーを保存する代わりに (多くの場合OIDC経由で) roleをassumeします。

関連ガイド