AWSのAssumeRoleを理解する:IAMユーザーを使わないクロスアカウントアクセスと一時認証情報の実践ガイド

当ページのリンクには広告が含まれています。
IT女子 アラ美
🚀 IAMアクセスキーをまだ使い回してるの?
法人向け高速サーバーでセキュアなAWS開発基盤を構築しなさい
24万社が導入!法人向けレンタルサーバー【XServerビジネス】
この記事の結論
AssumeRoleを使えばIAMユーザーのアクセスキーを完全に廃止し、一時認証情報でセキュアなクロスアカウントアクセスが実現できます。実際に30個以上のアクセスキーをゼロにした導入事例も紹介します。

お疲れ様です!IT業界で働くアライグマです!

「IAMユーザーのアクセスキーを発行してはダメと言われたけど、じゃあどうすればいいの?」「AssumeRoleって聞いたことはあるけど、実際どう使うの?」——AWSを使い始めた開発者が最初にぶつかる壁の一つが、IAMの認証設計です。

この記事では、IAMユーザーの永続的な認証情報を使わず、AssumeRoleによる一時認証情報でAWSリソースにアクセスする方法を解説します。クロスアカウントアクセスやCI/CDパイプラインなど、実務でよく使うパターンを中心に説明します。

目次

AssumeRoleとは何か:IAMの基本概念を整理する

IT女子 アラ美
💡 AWS認定資格の勉強環境に困ってるの?
クラウドPCなら場所を選ばずAWS学習環境にアクセスできるわよ
いつでもどこでもクラウド上PCにアクセス!仮想デスクトップサービス【XServer クラウドPC】

まず、AssumeRoleを理解するために必要な基本概念を整理します。

IAMユーザーとIAMロールの違い

  • IAMユーザー:永続的な認証情報(アクセスキー/シークレットキー)を持つ。「社員証」のようなもの。漏洩すると、削除するまで不正アクセスされ続ける
  • IAMロール:永続的な認証情報を持たない。「一時的に被る帽子」のようなもの。必要なときだけ権限を借りる

AssumeRoleとは

AssumeRoleは、IAMロールを引き受ける(Assume)ためのAPIアクションです。AssumeRoleを実行すると、一時的な認証情報(STS Token)が発行され、そのロールに付与された権限を使えるようになります。

一時的な認証情報には以下の特徴があります。

  • 有効期限がある:デフォルト1時間、最大12時間で自動失効
  • 取り消し不要:漏洩しても有効期限が切れれば使えなくなる
  • ローテーション不要:毎回新しい認証情報が発行される

AWSセキュリティの基本については、NIST SP 800-63 パスワードガイドライン解説:定期変更不要・複雑性ルール廃止の根拠と実装のポイントも参考になります。

IT女子 アラ美
IAMユーザーを全く使わないのが理想なの?アクセスキー管理から解放されるなら最高よね。

ITアライグマ
はい、AWSのベストプラクティスでは、永続的なアクセスキーをできる限り使わないことが推奨されています。

AssumeRoleの仕組み:信頼ポリシーと権限ポリシー

AssumeRoleを設定するには、信頼ポリシー(Trust Policy)権限ポリシー(Permission Policy)の2つを理解する必要があります。

信頼ポリシー(Trust Policy)

信頼ポリシーは、「誰がこのロールを引き受けられるか」を定義します。ロールに直接アタッチするJSON形式のポリシーです。


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

この例では、AWSアカウント123456789012からのAssumeRoleを許可しています。

権限ポリシー(Permission Policy)

権限ポリシーは、「ロールを引き受けた後に何ができるか」を定義します。通常のIAMポリシーと同じ形式です。

AssumeRoleの流れ

  1. 呼び出し側sts:AssumeRoleを実行
  2. AWSのSTSが信頼ポリシーをチェック
  3. 許可されていれば一時認証情報を発行
  4. 呼び出し側が一時認証情報でAWSリソースにアクセス

IAMポリシーの設計については、Pythonデータ処理によるAWSコスト削減術:計算リソース最適化とAthenaスキャン量節約の実践ガイドも参考になります。

IT女子 アラ美
信頼ポリシーを間違えると、誰でもAssumeRoleできてしまうんですか?

ITアライグマ
はい、信頼ポリシーの設定ミスはセキュリティリスクになります。Principalの指定は慎重に行いましょう。

ステップ1:クロスアカウントアクセスの設定

ここでは、最も一般的なユースケースであるクロスアカウントアクセスの設定手順を解説します。

シナリオ

  • アカウントA(開発アカウント)のEC2インスタンスから
  • アカウントB(本番アカウント)のS3バケットにアクセスしたい

手順1:アカウントBでIAMロールを作成

アカウントBで、アカウントAからのAssumeRoleを許可するロールを作成します。


# AWS CLIでロールを作成
aws iam create-role \
  --role-name CrossAccountS3ReadRole \
  --assume-role-policy-document file://trust-policy.json

trust-policy.jsonの内容:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:role/EC2InstanceRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

手順2:権限ポリシーをアタッチ


# S3読み取り権限をアタッチ
aws iam attach-role-policy \
  --role-name CrossAccountS3ReadRole \
  --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

手順3:アカウントAからAssumeRoleを実行


import boto3

# STSクライアントを作成
sts_client = boto3.client('sts')

# AssumeRoleを実行
response = sts_client.assume_role(
    RoleArn='arn:aws:iam::222222222222:role/CrossAccountS3ReadRole',
    RoleSessionName='CrossAccountSession'
)

# 一時認証情報を取得
credentials = response['Credentials']

# 一時認証情報でS3クライアントを作成
s3_client = boto3.client(
    's3',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken']
)

# S3バケットの一覧を取得
buckets = s3_client.list_buckets()
print(buckets)

EC2インスタンスからの実行については、オンプレエンジニアがクラウドネイティブ環境に移行するためのスキルギャップ解消戦略も参考になります。

IT女子 アラ美
EC2の場合、IAMロールをインスタンスにアタッチすれば自動でAssumeRoleされるんですか?

ITアライグマ
はい、インスタンスプロファイルを使えば、EC2が自動で一時認証情報を取得してくれます。

ステップ2:CI/CDパイプラインでのOIDC連携

GitHub ActionsやGitLab CIなどのCI/CDパイプラインでは、OIDC(OpenID Connect)連携を使うことで、アクセスキーを一切使わずにAWSリソースにアクセスできます。

GitHub ActionsでのOIDC連携

手順1:IDプロバイダーを作成


# GitHub Actions用のIDプロバイダーを作成
aws iam create-open-id-connect-provider \
  --url https://token.actions.githubusercontent.com \
  --client-id-list sts.amazonaws.com \
  --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1

手順2:信頼ポリシーを設定


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
        },
        "StringLike": {
          "token.actions.githubusercontent.com:sub": "repo:my-org/my-repo:*"
        }
      }
    }
  ]
}

手順3:GitHub Actionsワークフローで使用


name: Deploy to AWS
on:
  push:
    branches: [main]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
          aws-region: ap-northeast-1

      - name: Deploy
        run: aws s3 sync ./dist s3://my-bucket/

CI/CDパイプラインの設計については、GitHub Copilotを極める:エージェントモードとカスタム命令で開発生産性を最大化する実践ガイドも参考になります。

IT女子 アラ美
OIDC連携を使えば、アクセスキーをシークレットに登録する必要がなくなるんですね!

ITアライグマ
はい、シークレットのローテーション管理も不要になるので、セキュリティと運用コスト両面でメリットがあります。

ケーススタディ:マルチアカウント環境のIAM設計を導入した事例

IT女子 アラ美
🔥 アクセスキー30個をゼロにした事例があるわよ!
セキュアなインフラ構築にはVPN環境も合わせて整備しなさい
安心と信頼の国産VPNが固定IPで利用可能【MillenVPN専用サーバー】

状況(Before)

田中さん(仮名・34歳・インフラエンジニア・経験8年)が所属する都内のSaaS企業で、AWS Organizationsを使ったマルチアカウント環境を運用していました。

  • アカウント数:開発・ステージング・本番の3アカウント
  • 開発者数:10名
  • 課題:各アカウントにIAMユーザーを作成し、アクセスキーを発行していた。30個以上のアクセスキーが存在し、ローテーション管理が破綻
  • リスク:退職者のアクセスキーが残っている可能性があり、セキュリティ監査で指摘

行動(Action)

IAM Identity Center(旧AWS SSO)AssumeRole導入し、IAMユーザーのアクセスキーを廃止しました。

  1. IAM Identity Centerを設定(1週間目):AWS Organizationsの管理アカウントでIAM Identity Centerを有効化。Googleワークスペースと連携し、既存の社員アカウントでログインできるように設定
  2. PermissionSetを設計(2週間目):開発者用(DeveloperAccess)、運用者用(OperatorAccess)、管理者用(AdminAccess)の3種類を作成。それぞれの権限を最小権限の原則に基づいて設計
  3. 既存アクセスキーの棚卸し(3週間目)aws iam list-access-keysで全アカウントのアクセスキーを洗い出し。180日以上未使用のキーを削除。アクティブなキーは担当者に確認し、AssumeRole方式への移行を依頼
  4. CI/CDパイプラインをOIDC連携に移行(4週間目):GitHub ActionsとGitLab CIのパイプラインを、アクセスキーからOIDC連携に切り替え。シークレットからアクセスキーを削除

結果(After)

  • アクセスキー削減:30個 → 0個(100%削減)
  • 運用工数削減:アクセスキーのローテーション作業(月2時間 × 12ヶ月 = 年24時間)がゼロに
  • セキュリティ監査:指摘事項ゼロでクリア
  • 開発者体験:Googleアカウントでログインするだけで各アカウントにアクセスでき、認証情報の管理が不要

AssumeRole導入効果

ハマりポイント

移行中に既存のCI/CDパイプラインが動かなくなる問題が発生。原因は、OIDC連携への移行中に旧アクセスキーを先に削除してしまったこと。移行手順を「新方式を先に設定 → 動作確認 → 旧方式を削除」に修正することで解決しました。

セキュリティ監査の対策については、Trail of Bits skillsでClaude Codeにセキュリティ監査を任せる:脆弱性検出・コードレビュー自動化の実践ガイドも参考になります。

IT女子 アラ美
IAM Identity Centerの導入は大変そうですが、1ヶ月で完了できたんですね!

ITアライグマ
はい、4ステップに分けて段階的に移行したのがポイントです。既存の動作を止めない移行計画が重要です。

さらなる実践・活用に向けて

AssumeRoleをさらに活用するためのステップを紹介します。

ステップ1:AWS CLIでプロファイルを設定

~/.aws/configにAssumeRole用のプロファイルを設定すると、コマンドラインから簡単にロールを切り替えられます。


[profile dev]
region = ap-northeast-1

[profile prod]
region = ap-northeast-1
role_arn = arn:aws:iam::222222222222:role/ProdReadRole
source_profile = dev

ステップ2:セッションポリシーで権限を絞る

AssumeRole時にセッションポリシーを指定すると、ロールの権限をさらに絞り込めます。

ステップ3:CloudTrailでAssumeRoleを監査

CloudTrailでAssumeRoleの実行履歴を記録し、誰が・いつ・どのロールを引き受けたかを監査できるようにしておきましょう。

AWSのインフラ設計については仕様駆動開発入門ガイドも参考になります。

IT女子 アラ美
セッションポリシーで権限をさらに絞れるのは知らなかったわ。最小権限の原則を徹底できるわね。

ITアライグマ
CloudTrailとの組み合わせで「誰が何をしたか」の追跡も可能です。監査対応にも有効ですよ。

よくある質問

AssumeRoleを使うとIAMユーザーは完全に不要になりますか?

ほぼ不要になります。IAM Identity CenterやOIDC連携を活用すれば、IAMユーザーのアクセスキーを完全に廃止できます。一部の古いツール連携でのみ必要になる場合があります。

AssumeRoleの一時認証情報の有効期限はどのくらいですか?

デフォルトは1時間、最大12時間まで設定可能です。CI/CDパイプラインでは短い有効期限を設定し、セキュリティリスクを最小限にすることが推奨されます。

AssumeRoleの設定でよくある失敗は何ですか?

信頼ポリシーの設定ミスが最も多いです。PrincipalのARN指定や条件キーの設定を間違えると、アクセスが拒否されます。CloudTrailでエラーログを確認しながら設定を進めましょう。

こうしたAWSスキルを活かしたキャリアアップについてはハイクラスエンジニア転職エージェント3社比較もチェックしてください。

IT女子 アラ美
信頼ポリシーの設定ミスって本当によくハマるわよね。CloudTrailは必須ね。

ITアライグマ
AssumeRoleの導入で最も重要なのは信頼ポリシーの設計です。丁寧に検証しながら進めてください。

おすすめのAI学習・キャリアサービスを比較

AWSインフラスキルは市場で非常に高く評価されます。スキルアップやキャリアチェンジを検討中の方は以下を比較してみてください。

本記事で解説したようなAI技術を、基礎から体系的に身につけたい方は、以下のスクールも検討してみてください。

比較項目 Winスクール Aidemy Premium
目的・ゴール 資格取得・スキルアップ初心者〜社会人向け エンジニア転身・E資格Python/AI開発
難易度 初心者◎個人レッスン形式 中級者〜コード記述あり
補助金・給付金 最大70%還元教育訓練給付金対象 最大70%還元教育訓練給付金対象
おすすめ度 S幅広くITスキルを学ぶなら AAIエンジニアになるなら
公式サイト 詳細を見る
IT女子 アラ美
AIスキルを身につけたいけど、どのスクールを選べばいいかわからないです…
ITアライグマ
現場で即・ITスキルを身につけたいならWinスクールがおすすめです!個人レッスン形式で初心者でも取り組みやすいですよ。

まとめ

AWSのAssumeRoleを使った認証設計のポイントを振り返ります。

  • IAMユーザーのアクセスキーは漏洩リスクが高い。AssumeRoleによる一時認証情報を使うのがベストプラクティス
  • AssumeRoleには信頼ポリシー(誰がAssume可能か)と権限ポリシー(何ができるか)の2つが必要
  • クロスアカウントアクセスやCI/CDパイプラインでは、OIDC連携を活用してアクセスキーをゼロにできる
  • IAM Identity Centerを使うと、マルチアカウント環境でも統一的なアクセス管理が可能

AssumeRoleは、AWSセキュリティの基本中の基本です。まずは小さなスコープから導入し、徐々に範囲を広げていくのがおすすめです。

IT女子 アラ美
まずはCI/CDパイプラインからOIDC連携を試してみます!

ITアライグマ
いい判断です。既存のアクセスキーは削除前に必ず新方式の動作確認を忘れずに。

厳しめIT女子 アラ美による解説ショート動画はこちら

作者が開発したサービス「DevPick」

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITアライグマのアバター ITアライグマ ITエンジニア / PM

都内で働くPM兼Webエンジニア(既婚・子持ち)です。
AIで作業時間を削って実務をラクにしつつ、市場価値を高めて「高年収・自由な働き方」を手に入れるキャリア戦略を発信しています。

目次