クラウドセキュリティ

クロスアカウントアクセス くろすあかうんとあくせす

IAMロールAWS Organizations信頼ポリシーAssumeRoleマルチアカウント最小権限の原則
クロスアカウントアクセスについて教えて

簡単に言うとこんな感じ!

別々のAWSアカウント間で「ちょっとこのリソース使わせて」ができる仕組みだよ!会社Aの社員が、会社Bのビルに入館証を借りて入れるイメージ。鍵を共有しなくてもOKで、しかも「この部屋だけ」って制限もできるから安全なんだ!


クロスアカウントアクセスとは

クロスアカウントアクセスとは、異なるAWSアカウント(またはクラウドサービスの別アカウント)同士が、適切な権限設定のもとでリソースを共有・操作できる仕組みのことです。たとえば「開発アカウント」のシステムが「本番アカウント」のS3バケットにファイルを書き込む、といった構成がこれにあたります。

大企業や成長したスタートアップでは、セキュリティ・コスト管理・権限分離の観点からAWSアカウントを複数に分けて運用するのが一般的です。しかしアカウントが分かれると「必要なリソースにアクセスできない」という問題が生じます。クロスアカウントアクセスはこの問題を、パスワードや認証情報を共有せずに解決する手段として設計されています。

AWSではこの仕組みの中心に IAMロール(Identity and Access Management Role) を置いています。別アカウントのユーザーやサービスが一時的にそのロールを「引き受ける(AssumeRole)」ことで、必要最小限の権限だけを安全に委譲できます。


クロスアカウントアクセスの仕組み

クロスアカウントアクセスは「信頼関係(Trust)」と「権限(Permission)」の2つを組み合わせて成立します。

要素役割設定する場所
信頼ポリシー(Trust Policy)「誰がこのロールを使ってよいか」を定義アクセスされる側のアカウント(ロールに付与)
権限ポリシー(Permission Policy)「このロールで何ができるか」を定義アクセスされる側のアカウント(ロールに付与)
AssumeRole権限「そのロールを引き受ける許可」を持つアクセスする側のアカウント(ユーザー/ロールに付与)

アクセスの流れ(4ステップ)

【アカウントA:開発環境】          【アカウントB:本番環境】
  ┌─────────────┐                  ┌─────────────────────┐
  │ IAMユーザー  │─① AssumeRole──▶│ IAMロール(信頼ポリシー)│
  │ or ロール    │                  │  └ Aのユーザーを信頼   │
  └─────────────┘                  └────────┬────────────┘
         ▲                                   │
         │④ 一時的な認証情報を受け取り操作     │② 一時認証情報を発行
         │                                   ▼
         └──────────────────────── AWS STS(Security Token Service)
                                    ③ 一時的なアクセスキー等を返却

覚え方:「信頼の握手、権限の鍵」

  • 信頼ポリシー =「あなたを信頼します」という握手(誰が来てよいか)
  • 権限ポリシー =「この鍵で開けられる部屋はここだけ」という制限(何ができるか)

両方そろって初めてアクセスが成立する、と覚えましょう。

AWSにおける主な活用パターン

パターン具体例
環境分離開発アカウント → 本番アカウントのリソースをデプロイ時だけ操作
ログ集約各事業部アカウント → セキュリティ監視アカウントへのCloudTrailログ送信
共有サービス各アカウント → DNSActive Directoryなどの共通インフラアカウントを参照
委託開発ベンダーのAWSアカウント → 自社アカウントへの作業アクセス(期間限定)
CI/CDGitHub Actions / CodePipeline が本番アカウントのECSにデプロイ

歴史と背景

  • 2012年頃〜 AWSのIAMが整備され、アカウント間のロール委任が可能になる。当初は大企業のみが複数アカウントを使う構成を採用
  • 2015年 AWS Organizations(複数アカウントを束ねる管理サービス)の前身となる概念が登場。マルチアカウント戦略が注目され始める
  • 2016年 AWS Organizationsが正式リリース。アカウントをグループ(OU: Organizational Unit)で管理できるようになり、クロスアカウントアクセスの需要が急増
  • 2019年 AWS Control Tower が GA(一般提供開始)。マルチアカウント環境のガバナンスが自動化され、クロスアカウントアクセスの設計がベストプラクティスとして広く普及
  • 2020年代〜 セキュリティインシデントを受け「アカウント単位でのブラストラディウス(被害範囲)の限定」が強く推奨されるようになり、クロスアカウントアクセスは現代クラウド設計の標準的な要素となった

関連する設計アプローチとの比較

クロスアカウントアクセスを使う際、どのような構成パターンを取るかで設計が変わります。

クロスアカウントアクセス:代表的な構成パターン ハブ&スポーク型 共有サービスアカウント 開発アカウント ステージングアカウント 本番アカウント ✔ 共通リソースを一元管理 ✔ DNS・監視・ログ集約に最適 ✔ Organizations と相性◎ セキュリティ集中型 セキュリティ 監視アカウント 事業部Aアカウント 事業部Bアカウント 事業部Cアカウント ✔ ログ・アラートを一か所に集約 ✔ 横断的なセキュリティ監視 ✔ CloudTrail/GuardDuty 連携 CI/CDパイプライン型 デプロイツール アカウント 開発環境アカウント STG環境アカウント 本番環境アカウント ✔ 各環境への自動デプロイ ✔ 認証情報をコードに書かない ✔ OIDC連携で更に安全に

クロスアカウントアクセスのセキュリティ注意点

リスク対策
広すぎる権限の付与最小権限の原則:ロールのポリシーは必要最小限に絞る
ロールの野放しExternalId(外部IDの条件)を信頼ポリシーに追加し、成り済まし(Confused Deputy攻撃)を防ぐ
長期間の認証情報漏洩AssumeRoleで発行される認証情報は一時的(デフォルト1時間)。長期アクセスキーを使わない
アクセスログ未取得CloudTrailでAssumeRoleイベントを記録し、誰がいつロールを使ったか追跡する
意図しない公開アカウント信頼ポリシーの Principal*(全員)を指定しない

関連する規格・RFC

規格・RFC番号内容
RFC 6749OAuth 2.0 フレームワーク。クロスアカウントにおけるOIDC連携(GitHub ActionsなどによるWebIdentityTokenの利用)の基盤となる認可フロー
RFC 7519JSON Web Token(JWT)。OIDC連携でAssumeRoleWithWebIdentityを使う際のトークン形式

関連用語

  • IAMロール — AWSにおける権限の「役割」単位。クロスアカウントアクセスの中心的な仕組み
  • AssumeRole — 別アカウントのIAMロールを一時的に引き受けるAPI操作
  • AWS Organizations — 複数AWSアカウントをグループ管理するサービス。マルチアカウント戦略の基盤
  • 最小権限の原則 — 必要最低限の権限だけを付与するセキュリティ設計の考え方
  • STS(Security Token Service) — 一時的なAWS認証情報を発行するサービス。AssumeRoleの実行基盤
  • Confused Deputy攻撃 — 権限を持つサービスを騙して不正操作させるセキュリティ攻撃手法
  • OIDC(OpenID Connect) — GitHub ActionsなどがAWSロールを安全に取得する際に使う認証連携プロトコル
  • AWS Control Tower — マルチアカウント環境のガバナンスを自動化するAWSサービス