Skip to content

Organizations 中央集中型 root アクセス管理の導入(SecurityHub CSPM対応)

  • Issue: fastdoctor-jp/mental-online-karte#18637
  • 親 Issue: fastdoctor-jp/mental-online-karte#18146
  • 作成日: 2026-09-08
  • ステータス: 方針決定済み・Megazone 確認待ち

背景

Security Hub CSPM で fd-sys / production の root MFA 未設定が検知(IAM.6 / IAM.9)。 AWS ベストプラクティスに従い、メンバーアカウントは root 資格情報を削除、マネジメントアカウントは MFA を設定する方針とした。

対象

メンバーアカウント(root 資格情報削除)

環境アカウントIDコントロール
fd-sys913831226605IAM.6, IAM.9
production967691968827IAM.6, IAM.9

マネジメントアカウント(root MFA 設定)

  • 中央集中型 root アクセス管理の対象外のため、MFA 設定で保護する

メンバーアカウントの方針

中央集中型 root アクセス管理

Organizations の中央集中型 root アクセス管理を有効化し、メンバーアカウントの root 資格情報(パスワード・アクセスキー・署名証明書・MFA)を一括削除する。

  • 削除後、メンバーアカウントの root ログイン・パスワードリカバリは不可になる
  • 特権タスクが必要な場合はマネジメントアカウントから sts:AssumeRoot で短期セッションを取得して実行
  • root でしか実行できないタスク(後述)が必要な場合は、マネジメントアカウントから「Allow password recovery」で一時復旧が可能

root でしか実行できないタスク(sts:AssumeRoot では代替不可)

以下のタスクは sts:AssumeRoot では実行できず、root ログインが必要。 必要な場合はマネジメントアカウントから「Allow password recovery」で一時復旧 → 作業完了後に再度資格情報を削除する。

Note: S3 バケットポリシー・SQS ポリシーの誤設定修正は sts:AssumeRoot で対応可能なため、root ログイン不要。

カテゴリタスク備考FD での発生頻度
アカウント管理root メールアドレス・パスワード・アクセスキーの変更アカウント名・連絡先等はマネジメントアカウントから変更可能極めて低い
アカウント管理IAM 管理者の権限復旧唯一の管理者が自身の権限を誤削除した場合極めて低い
BillingBilling コンソールへの IAM アクセス有効化設定済み(対応不要)
Billing一部の税務請求書の閲覧AWS Inc. / AISPL の請求書低い
EC2Reserved Instance Marketplace への出品登録RI 売却時のみ極めて低い
S3S3 バケットの MFA Delete 設定未使用(SCP で root アクセスキー作成禁止中。中央集中型 root アクセス管理 導入後に再検討)
KMS管理不能になった KMS キーの復旧AWS Support + root 電話番号で本人確認極めて低い
その他GovCloud サインアップ / Mechanical Turk 連携FD では該当しない

いずれも低頻度のため、「Allow password recovery」による一時復旧運用で問題ない。

sts:AssumeRoot で実行できる特権タスク

タスクポリシーできること
IAMDeleteRootUserCredentialsroot 資格情報の削除
IAMCreateRootUserPasswordroot パスワードリカバリの許可
IAMAuditRootUserCredentialsroot 資格情報の状態確認
S3UnlockBucketPolicy誤設定された S3 バケットポリシーの削除
SQSUnlockQueuePolicy誤設定された SQS キューポリシーの削除

前提条件

有効化を実行するアカウント(マネジメントアカウント or 委任管理者)に以下の IAM 権限が必要:

  • iam:EnableOrganizationsRootCredentialsManagement
  • iam:EnableOrganizationsRootSessions
  • iam:ListOrganizationsFeatures
  • organizations:EnableAwsServiceAccess
  • organizations:ListAccountsForParent
  • sts:AssumeRoot

資格情報削除時は追加で以下が必要:

  • iam:GetAccountSummary
  • iam:GetLoginProfile
  • iam:ListAccessKeys
  • iam:ListMFADevices
  • iam:ListSigningCertificates
  • iam:DeleteLoginProfile
  • iam:DeleteAccessKey
  • iam:DeleteSigningCertificate
  • iam:DeactivateMFADevice

委任管理者

項目
委任管理者アカウントsecurity-tooling(860801568046)

メンバーアカウントの root メールアドレス

  • SRE チームのメーリングリストが設定されており、自社で受信可能
  • 「Allow password recovery」実行時のパスワードリセットメールも SRE チームで受信できる(確認済み)

手順

bash
# 1. Trusted Access 有効化
aws organizations enable-aws-service-access \
  --service-principal iam.amazonaws.com

# 2. Root credentials management 有効化
aws iam enable-organizations-root-credentials-management

# 3. Privileged root sessions 有効化
aws iam enable-organizations-root-sessions

# 4. 委任管理者の登録
aws organizations register-delegated-administrator \
  --service-principal iam.amazonaws.com \
  --account-id 860801568046

# 5. メンバーアカウントの root 資格情報削除
# IAM コンソール → Root access management → 対象アカウント選択
# → Take privileged action → Delete root credentials

マネジメントアカウントの MFA 方針

AWS ベストプラクティス(理想形)

AWS Well-Architected Framework(SEC01-BP02)および root ユーザーベストプラクティスでは、以下を推奨している:

推奨事項内容
ハードウェア MFAFIDO2 セキュリティキーまたはハードウェア TOTP トークンを使用。秘密鍵がデバイスの外に出ないため漏洩リスクが最も低い
複数 MFA デバイス登録最大8台まで登録可能。紛失・故障時のバックアップとして推奨
Two-person ruleパスワード管理者と MFA 管理者を分離し、1人では root にログインできないようにする
グループメールアドレスroot メールアドレスに個人メールではなく DL を使用
パスワードの安全な保管AWS アカウントに依存しない場所に保管(循環依存の回避)
root ログインの監視GuardDuty / CloudWatch で root 使用を検知・通知

当環境の課題とベストプラクティスからの逸脱

AWS ベストプラクティスをそのまま適用できない課題があるため、リスクを許容した上で代替策を採用する。

ベストプラクティス当環境の課題採用した代替策残存リスクと緩和策
ハードウェア MFA物理デバイス管理が人に依存。退職・異動・不在時に使えなくなる仮想 MFA(TOTP)+ GCP Secret Manager で管理シード漏洩リスク → GCP IAM でアクセス制御 + 監査ログで検知
複数 MFA デバイス登録2台以上登録するとメール+電話による MFA リカバリが無効化されるMFA 1台のみ登録し、リカバリ経路を残すGCP 障害時に MFA 取得不可 → メール+電話で代替認証(Megazone 協力要)
Two-person rule人に依存。少人数チームでは緊急時に2人集まれない不採用(単独操作可能)1人で root ログイン可能 → GuardDuty / CloudWatch で使用を検知・通知
SaaS パスワードマネージャ新規契約が必要GCP Secret Manager(既存環境活用)
root メールアドレスを DL に変更Megazone(代理店)の情報が設定されており変更不可変更せず、Megazone と復旧フローを合意代替認証時に Megazone の協力が必要

採用方針: GCP Secret Manager + oathtool

上記の課題を踏まえ、GCP Secret Manager に TOTP シードを保管し、oathtool で OTP を生成する方式を採用する。

検討した全案の比較

メンバー非依存AWS障害耐性新規契約不要コストセキュリティ不採用理由
GCP Secret Manager + oathtool無料◎ IAM + 監査ログ採用
SaaS パスワードマネージャ有料新規契約の手続きコストと継続費用が限定用途に対して過剰
FIDO2 ハードウェアキー数千円◎ 最高物理デバイス管理が人に依存。リモートワーク時に使えない
個人端末 Authenticator無料個人端末に紐づくため、退職・紛失で使用不可
印刷して金庫保管無料物理アクセス必須。緊急時にリモートから対応不可
マネジメント EC2EC2常時起動循環依存(root ログイン不可 → EC2 アクセス不可 → MFA 取得不可)
メンバー EC2EC2常時起動AWS 障害時に EC2 も影響。root が最も必要な障害時に使えない
自前パスワードマネージャ構築先次第開発コストセキュリティ品質が自前実装に依存。限定用途に対して過剰

GCP Secret Manager + oathtool の詳細

仕組み

AWS で root の MFA 設定時に TOTP シード(秘密鍵)が発行される
  → シードを GCP Secret Manager に保存
    → root ログイン時に oathtool で OTP を生成して入力

通常の Authenticator アプリと同じ仕組み。保管場所と OTP 生成ツールが異なるだけ。

コスト

項目料金
GCP Secret Manager シークレット保管無料(6個まで)
アクセス(読み取り)10,000回まで無料
oathtool無料(OSS: brew install oath-toolkit

実質コストゼロ。

運用フロー

bash
# root ログイン時に OTP を生成(コマンド1行)
oathtool --totp -b $(gcloud secrets versions access latest \
  --secret=<シークレット名> \
  --project=<GCPプロジェクト>)

MFA リカバリ(MFA が使えなくなった場合)

状況復旧方法
GCP Secret Manager にアクセスできないroot メールアドレス + 登録電話番号で AWS の代替認証フロー(Megazone の協力が必要)
AWS の代替認証もダメAWS Support に連絡して MFA を無効化

Note: 代替認証フローを残すため MFA デバイスは 1台のみ 登録する(2台以上だとこのフローが無効化される)。復旧フローについては Megazone への確認時に合意しておくこと。

マネジメントアカウント root の MFA 初期設定手順

  1. マネジメントアカウントに root でコンソールログイン
  2. セキュリティ認証情報 → MFA デバイスの割り当て → 仮想 MFA デバイスを選択
  3. QR コード画面で「シークレットキーを表示」→ TOTP シード(テキスト)を取得
  4. シードを GCP Secret Manager に保存
  5. oathtool で OTP を2回生成(30秒間隔)して MFA を有効化
  6. ローカルのシードファイルを削除

本番環境の GCP プロジェクト・アクセス制御

MFA シード管理専用の GCP プロジェクトを新規作成する。権限管理を既存プロジェクトと分離し、アクセスできる人を厳密に制限するため。

項目内容
GCP プロジェクト専用プロジェクトを新規作成(MFA シード管理用)
アクセス権限SRE チームの必要メンバーに roles/secretmanager.secretAccessor を付与
監査ログGCP Cloud Audit Logs でシークレットへのアクセスを記録(デフォルト有効)

セットアップ手順の自動化

oathtool のインストールや GCP プロジェクトの認証設定など、各メンバーの初期セットアップを効率化するためのスキル(Claude Code skill)を別途作成する。

root ログインの監視

root ログインが発生した場合に検知できるよう、以下のいずれかを設定する:

  • GuardDuty: Policy:IAMUser/RootCredentialUsage で root 使用を検知(既に有効化済みなら追加設定不要)
  • CloudWatch Events: root ログインイベントを検知して SNS 通知

検証結果

検証環境

項目
AWS アカウントinfra-dev(853790572692)
GCP プロジェクトfdt-sre-dev

検証手順と結果

#手順結果
1oathtool インストール(brew install oath-toolkit✅ 成功
2テスト用 IAM ユーザー mfa-test-user を作成✅ 成功
3仮想 MFA デバイスを作成し TOTP シード(Base32)を取得✅ 成功
4oathtool で OTP を生成し MFA を有効化✅ 成功
5GCP Secret Manager にシードを保存✅ 成功
6GCP Secret Manager からシードを取得して oathtool で OTP 生成✅ 成功
7生成した OTP で AWS コンソールにログイン✅ 成功(MFA 認証通過を確認)
8テストリソースの後片付け✅ 完了

結論

GCP Secret Manager + oathtool で AWS の MFA 認証が正常に動作することを確認した。

Megazone への確認事項

マネジメントアカウントの root 連絡先情報が Megazone(代理店)の情報になっている。

確認すべきこと

「マネジメントアカウントの root ユーザーに自社で MFA を設定・管理してよいか」

  • OK → 自社で MFA 設定を実施
  • NG → Megazone に MFA 設定を依頼

※ root メールアドレス・電話番号は Megazone のまま変更しない方針

参考情報