AWS CLI を使って AWS Organizations のルートアクセス管理機能を操作する

AWS CLI を使って AWS Organizations のルートアクセス管理機能を操作する

2025.12.12

いわさです。

AWS Organizations ではメンバーアカウントのルートユーザー認証情報を管理することが出来ます。
セキュリティーやコンプライアンスのために各メンバーアカウントのルートユーザー認証情報を削除することで、メンバーアカウントに対してルートユーザーでのアクセスを禁止できます。
また、それによってできなくなる一部のルート権限が必要な操作は、管理アカウントから特権実行することができます。

https://dev.classmethod.jp/articles/disable-root-access-management/

既存の組織でこの機能が有効になっているのか無効になっているのか、無効になっている場合有効にできるか、各アカウントの特権アクションをどう API から実行すれば良いのかなどを今回 AWS CLI で調査・実行する機会があったのでまとめておきます。

機能が有効になっているのか無効になっているのか

機能の有効・無効はorganizations list-aws-service-access-for-organizationを使ってiam.amazonaws.comを調べることで有効化されているかどうか確認することができます。
以下は管理アカウントの IAM コンソールです。次のように「ルートアクセス管理」メニューを押した時の画面で有効化ボタンが表示される場合はまだルートアクセス管理が無効化状態です。

F77D461F-B237-4CD8-AF6F-3E9558ABBC25_1_105_c.jpeg

あるいは「アカウント設定」画面から一元化されたルートアクセスの有効化状況を確認することも出来ます。

image.png

無効化されている時は次のように何も表示がされません。

% aws organizations list-aws-service-access-for-organization --query "EnabledServicePrincipals[?ServicePrincipal=='iam.amazonaws.com']"
[]

一方で次のように「ルートアクセス管理」画面に表示される場合は有効化されています。
あるいは IAM の「アカウント設定」画面上で有効化されているかも確認できます。

171F6BAB-B8EB-4071-8A1E-A755B00736FA_1_105_c.jpeg

image.png

この時 AWS CLI ではどのような結果になるか見てみましょう。

% aws organizations list-aws-service-access-for-organization --query "EnabledServicePrincipals[?ServicePrincipal=='iam.amazonaws.com']"
[
    {
        "ServicePrincipal": "iam.amazonaws.com",
        "DateEnabled": "2025-12-12T06:17:20.483000+09:00"
    }
]

有効化した日時とともに取得することが出来ました。なるほど。

無効になっている場合有効にできるか

コンソールから有効化する場合は次のように有効化するかどうかに加えてどのサブ機能を有効化するかも選択したり、委任管理者をオプションで指定したりすることができます。

image.png

これをマネジメントコンソールで行ってみます。
まずはサービスプリンシパルのみを有効化してみます。

% aws organizations enable-aws-service-access --service-principal iam.amazonaws.com

有効化後の画面です。
一元化されたルートアクセス機能自体は有効化されましたが、デフォルトでは次のようにサブ機能が無効化されていました。

image.png

この状態だと、ルートユーザー情報の状態確認がコンソールだとできないですね。

image.png

また、「特権的なアクションを実行する」ボタンが押せそうな雰囲気ですが、押してみると次のようなエラーが発生します。

Root sessions feature is not enabled for your AWS Organization.

image.png

ということで有効化してみましょう。
まずはiam enable-organizations-root-credentials-managementを使ってルート認証情報管理機能を有効化してみます。
こちらはorganizationsのサブコマンドではなくiamのサブコマンドみたいなので注意してください。

% aws iam enable-organizations-root-credentials-management      
{
    "OrganizationId": "o-8j81brsjuj",
    "EnabledFeatures": [
        "RootCredentialsManagement"
    ]
}

有効化しました。
コンソール上も有効化されていることが確認できますね。

image.png

アカウントリストからルートユーザー認証情報を確認することも出来ました。

image.png

この時、特権的なアクションを実行しようとすると、次のようにパスワード回復のみが可能です。

image.png

さらにここから、バケットポリシー削除などルート権限が必要な特権アクションを出来るようにしたい場合はiam enable-organizations-root-sessionsで追加の有効化をします。

% aws iam enable-organizations-root-sessions
{
    "OrganizationId": "o-8j81brsjuj",
    "EnabledFeatures": [
        "RootSessions",
        "RootCredentialsManagement"
    ]
}

バケットポリシーとキューポリシーの削除も出来るようになりました。

image.png

各アカウントに特権的なアクションを実行する方法

ルートアクセス管理が有効化できたら、色々な特権的アクションを実行できるようになります。
ここがちょっと面倒で、メンバーアカウントごとに2ステップの実行が必要になるみたいです。
具体的にはAssumeRoot コマンドで特権セッションを取得し、その認証情報を使ってそれぞれのコマンドを実行します。

今回は対象アカウントに特権的アクションを実行するための準備までを行ってみます。
例えば次のメンバーアカウントのルートユーザー認証情報のステータスを確認したいとします。

image.png

assume-rootコマンドでセッション認証情報を取得するのですが、セッション中に実行される特権アクションに設定されるよう、task-policy-arn を定義する必要があります。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user-privileged-task.html

% aws sts assume-root --target-principal 123456789012 --duration-seconds 900 --task-policy-arn arn=arn:aws:iam::aws:policy/root-task/IAMAuditRootUserCredentials
{
    "Credentials": {
        "AccessKeyId": "hogehoge",
        "SecretAccessKey": "fugafuga",
        "SessionToken": "piyopiyo",
        "Expiration": "2025-12-11T21:54:59+00:00"
    }
}

この認証情報を使って特権アクションを実行していくことが出来るみたいですね。

さいごに

本日は AWS CLI を使って AWS Organizations のルートアクセス管理機能を操作する機会があったので調査・実行した内容を記録してみました。

AWS CLI など API 経由だと結構面倒というか冗長ですね。マネジメントコンソール上からだとワンクリックで良い感じに色々してくれているのがわかります。
次回以降はメンバーアカウント側に特権アクションを実行してみたいと思います。

この記事をシェアする

FacebookHatena blogX

関連記事