0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS AssumeRoleを図解で理解する

0
Last updated at Posted at 2026-07-27

はじめに

AssumeRoleを初めて使ったので整理してみました

AssumeRoleとは

AssumeRoleとは、IAMロールの権限を一時的に借りる仕組みです。

AssumeRoleのフロー

同一のAWSアカウント内でもAssumeRoleを使用可能ですが、多くはクロスアカウントで利用されます。
一時的な認証情報は、AWS STS(Security Token Service)によって発行されます。
AWS STSはAWSが提供・管理しているサービスです。 通常はAWS SDKやCLI経由で利用するため、利用者がSTSサーバー自体を管理・設定することはありません。

AssumeRoleを実行するための条件

  1. リクエスト元に sts:AssumeRole の実行権限がある
  2. 借りる対象ロールの信頼ポリシーが、リクエスト元を許可している
  3. 信頼ポリシーに条件がある場合、その条件も満たしている

1 リクエスト元に sts:AssumeRole の実行権限がある

{
  "Effect": "Allow",
  "Action": "sts:AssumeRole",
  "Resource": "arn:aws:iam::555666777888:role/general-role"
}

2 借りる対象ロールの信頼ポリシーが、リクエスト元を許可している

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111222333444:root"
  },
  "Action": "sts:AssumeRole",
  "Condition": {
	  "StringEquals": {
		  "sts:ExternalId": "<External ID>" 
		} 
	}
}

※ "AWS": "...:root": アカウント111222333444を信頼先として指定
「rootユーザーではなくアカウント全体を指す」

3 信頼ポリシーに条件がある場合、その条件も満たしている (externalIDの指定など)

{
  "Condition": {
    "StringEquals": {
      "sts:ExternalId": "<External ID>"
    }
  }
}

※ AssumeRole後に実行できる操作は、借りたIAMロールにアタッチされている権限ポリシーで許可された操作のみです。

AssumeRole実行方法

AssumeRoleは、「AWS CLI」や「AWS SDK」などを利用して、AWS STSのAssumeRole APIを呼び出すことで実行します。

AWS CLI

aws sts assume-role \
  --role-arn arn:aws:iam::555666777888:role/general-role \
  --role-session-name general-session \
  --external-id "<External ID>" \
  --profile kandalog

555666777888アカウントのgeneral-roleを、general-sessionというセッション名で、External IDを提示して一時的に引き受ける

借りたいRole: general-role
AssumeRoleの実行元プロファイル: kandalog
セッション名: general-session
args 役割 備考
--role-arn 引き受ける対象のIAMロールを指定する AWSアカウント555666777888general-roleをAssumeRoleする
--role-session-name AssumeRoleによって作成されるセッション名を指定する セッションARNやCloudTrailなどの監査ログに記録される識別子
例:arn:aws:sts::555666777888:assumed-role/general-role/general-session
--external-id Trust Policyで要求される追加の認証情報を指定する IAMロールのTrust Policyでsts:ExternalIdが設定されている場合のみ必要
--profile AssumeRoleを実行する際に利用するAWS CLIプロファイルを指定する 省略した場合はdefaultプロファイル(または認証情報探索ルールに従って見つかった認証情報)が利用される
~/.aws/credentials または ~/.aws/config に定義された kandalog プロファイル

返却値の例
Credentialsの情報を使って有効期限内はリソースの操作が可能

{
  "Credentials": {
    "AccessKeyId": "ASIAEXAMPLE123456789",
    "SecretAccessKey": "exampleSecretAccessKey1234567890",
    "SessionToken": "exampleSessionToken1234567890...",
    "Expiration": "2026-07-27T12:00:00+00:00"
  },
  "AssumedRoleUser": {
    "AssumedRoleId": "AROAXAMPLE123456789:general-session",
    "Arn": "arn:aws:sts::555666777888:assumed-role/general-role/general-session"
  }
}

SDKからの実行 (Ruby)

SDKを使用する場合、Lambda、EC2、ECSなどの実行環境に付与されたIAMロールの認証情報を、AWS SDKが認証情報プロバイダーチェーンから自動的に取得する
本番環境では通常、プロファイルを明示的に指定する必要はない

sts = Aws::STS::Client.new

response = sts.assume_role(
  role_arn: "arn:aws:iam::555666777888:role/general-role",
  role_session_name: "general-session",
  external_id: "<External ID>"
)

credentials = response.credentials

※ ローカル環境では、環境変数や~/.aws/credentialsのプロファイルが使われることもある
AWS SDK for Rubyは、複数の候補から利用可能な認証情報を順番に探索する

参考

イラストで理解するAssumeRoleの疑問

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?