Web UI を利用した AWS Organizations 機能の利用状況やポリシー依存関係を評価する「AWS Organizations のアカウント評価(Account Assessment for AWS Organizations)」を試してみた
春は、卒業と入学(入社)、別れと出会いの時期ですね。
AWS でも AWS Organizations(以降、Organization) による組織からの別れと出会いがあります。例えば、会社内での事業や組織変更、会社統合やサービス譲渡、請求代行会社を変更する際などがあげられます。
このような時、影響範囲を特定してトラブルなく進めたいですが、近年 Organization を前提とした機能が豊富に提供、活用されていることにより、確認すべき点が増えてきています。
ナレッジやチェックリストを用意しながら進めていくのも大切ですが、対象が数十アカウント、数百アカウントとなると確認するのも大変です。
そんな時に役立ちそうなソリューション 「AWS Organizations のアカウント評価(Account Assessment for AWS Organizations)」が AWS より提供されていたので、今回試していきます。
- ソリューションページ
- 実装ドキュメント
- ソースコード
出来ること
- Web UI を利用した移行対象 AWS アカウントの Organization 機能や依存関係を確認
- 3種類のチェックが提供(ポリシー、委任された管理アカウント、信頼されたアクセス)
所感
- Web UI やエクスポート機能があるため、容易な操作だけでなく関係者間での共有にも便利です
- ポリシーチェックは対象アカウント数が増えるにつれて重宝しそう
- 確認対象となるポリシーに若干の癖があるかも
- 主にリソースベースポリシー
- 「委任された管理アカウント」と「信頼されたアクセス」 は AWS CLI での代替も可能
- ソリューション展開する際に注意すべき点がある
- Lambda メモリサイズの上限に抵触する場合があり、上限緩和または指定メモリサイズを変更する必要がある
- 全てのスタックを同一 Organization 内(移行元)で展開する必要がある。
- ソリューションで作成するリソース分の利用費がかかる
- 月に $45(ドキュメントに前提・使用条件と詳細な例が記載 )
- 画面イメージ
- ホーム画面
- ポリシー確認
- 委任された管理アカウント(Delegated Admin Accounts)
- 信頼されたアクセス(Trusted Access)
- ホーム画面
ソリューション展開
※ 2025/03/19時点の方法や画面となります。
アーキテクチャとアカウント
- ハブアカウント(Hub account):Web UI を始めとしたソリューションを展開するアカウント(このアカウントは評価対象にならない)
- スポークアカウント(Spoke account):評価されるアカウント
- 管理アカウント(Management account):スポークアカウントが所属する Organization を管理するアカウント
前提条件
- AWS RAM が有効化されていること
ハブアカウント
実装ドキュメントに沿って、Web UI などソリューションを展開するアカウントで CloudFormation を実行します。
-
CloudFormation パラメータ例
入力項目 | 例 |
---|---|
スタック名 | AccountAssessmentforAWSOrganizationsForHub |
Provide the unique namespace value from Hub deployment | aafao |
Provide the AWS Organization ID | o-dXXXXXXXXr |
Provide Time to live (in days) for DynamoDB items | 90 |
Provide Web UI Login User Email | xxxxx@co.jp |
Set MFA for Cognito to 'ON' or 'OPTIONAL' | OPTIONAL |
Provide CIDR ranges that allow to console to access the API. | 0.0.0.0/1,128.0.0.0/1 |
Provide the Org Management Account ID | 0XXXXXXXXXX5 |
- Lambda メモリーサイズに関するエラーが発生する可能性があります
テンプレート内で Lambda のメモリーサイズを 3584 で指定した箇所があるためです。
"Handler": "policy_explorer/scan_single_service.lambda_handler",
"MemorySize": 3584,
これは、本ソリューションではなく Lambda 上限に関する既知の問題のようです。
上限緩和を行うか(Service Quotas ではなく Support 起票が必要な項目です)、テンプレート内の該当箇所を “3008” 以下へ修正する必要があります。
スポークアカウント
実装ドキュメントに沿って、ポリシー評価の対象アカウントで CloudFormation を実行します。
-
CloudFormation パラメータ例
入力項目 | 例 |
---|---|
スタック名 | AccountAssessmentforAWSOrganizationsForSpoke |
Provide the unique namespace value from Hub deployment | aafao |
Provide the Hub Account Id | 73XXXXXXXXX0 |
Create Resource Association | Yes |
管理アカウント
実装ドキュメントに沿って、管理アカウントで CloudFormation を実行します。
-
CloudFormation パラメータ例
入力項目 | 例 |
---|---|
スタック名 | AccountAssessmentforAWSOrganizationsForOrg |
Provide the unique namespace value from Hub deployment | aafao |
Provide the Hub Account Id | 73XXXXXXXXX0 |
Create Resource Association | Yes |
検証
ソリューションの展開が正常に終了するとハブアカウントへの展開時に入力したメールアドレスへ件名が "WebUI Credentials - Account Assessment for AWS Organizations" のメールでログイン情報が送付されます。
ログイン情報を利用して Web UI へログインします。Cognito でユーザー管理をしているため、パスワードを忘れてしまった際などはここから対応可能です。
実装ドキュメントにソリューションの利用方法が記載されていますが、最新バージョンである v1.1.1 とは異なる内容が書かれています。
主な違いとして Findings - Resource-Based Policies は利用できず、Policy Explorer - Search を利用する必要があります。UI でも注意書きがされています。
ポリシー検索(Identity Based Polices)
ポリシー検索では3つのタイプの検索が可能となっています。
-
Identity Based Polices 選択 >>> Search を選択
-
85 ポリシーが検出されました
-
検索条件に OrgID を追加して、再検索します
-
今後は 5ポリシーが検出されました。View Policy を選択
-
該当箇所が表示されます
結果から Condition 句に OrgID が記述された Identity Based Policy が五箇所あることがわかります。
ポリシー検索(Resource Based Polices)
-
Resource Based Polices 選択 >>> Search を選択
-
33 ポリシーが検出されました
-
検索条件に OrgID を追加して、再検索すると 2ポリシーが検出されました。View Policy を選択
-
該当箇所が表示されます
結果から Condition 句に OrgID が記述された Resource Based Policy がニ箇所あることがわかります。
ただ Resource Based Policy であれば KMS や S3 バケットへ記載するポリシーが対象と想定していましたが、検出されませんでした。検出されたのは IAM ロール - 信頼されたエンティティ に OrgID を記載したリソースでした。
私の理解や権限等の見落としがあるのかもしれませんが、想定した内容とは異なる部分もありました。
ポリシー検索(Service Control Polices)
-
Service Control Polices 選択 >>> Search を選択
-
15 ポリシーが検出されました
-
検索条件に OrgID を追加して、再検索すると 2ポリシーが検出されました。View Policy を選択
-
該当箇所が表示されます
結果から Condition 句に OrgID が記述された Service Control Policy がニ箇所あることがわかります。
ポリシー検索(その他)
その他に、気になったパターンを検証しました。結果として検索条件に本ソリューション特有の制約はなく、収集したデータに対して、入力可能な項目を利用して検索が可能なようです。
検証内容 | 結果 |
---|---|
OrgID の検索は aws:PrincipalOrgPaths でも検出されるか? | OK |
OrgID の検索は aws:SourceOrgID でも検出されるか? | OK |
OrgID の検索は aws:ResourceOrgID でも検出されるか? | OK |
Condition 検索 は OrgID 以外の AWS アカウントIDでも検知できるか? | OK |
Conditon 検索 は別組織の OrgID でも検知できるか? | OK |
カスタマー管理ポリシーでも検知されるか? | OK |
委任された管理アカウント
こちらは手動で実行する必要があります。
-
Delegated Admin Accounts >>> Start Scan を選択
-
しばらくすると job が終了
-
再度 Delegated Admin Accounts を選択すると結果が確認できます。Download Results から結果を CSVファイルで取得することも可能です。
AWS アカウントID(73XXXXXXXXX0)のアカウントが、5つのサービスで管理を委任されていることがわかります。
委任された管理アカウントは AWS CLI でも確認することが可能です。
- https://docs.aws.amazon.com/cli/latest/reference/organizations/list-delegated-administrators.html
- https://docs.aws.amazon.com/cli/latest/reference/organizations/list-delegated-services-for-account.html
$ aws organizations list-delegated-administrators
{
"DelegatedAdministrators": [
{
"Id": "73XXXXXXXXX0",
"Arn": "arn:aws:organizations::0XXXXXXXXXX5:account/o-dXXXXXXXXr/73XXXXXXXXX0",
"Email": "xxxxx@co.jp",
"Name": "XXXXXXXX",
"Status": "ACTIVE",
"JoinedMethod": "CREATED",
"JoinedTimestamp": "2024-01-25T02:47:07.670000+00:00",
"DelegationEnabledDate": "2024-07-30T04:25:13.744000+00:00"
}
]
}
$ aws organizations list-delegated-services-for-account --account-id 73XXXXXXXXX0
{
"DelegatedServices": [
{
"ServicePrincipal": "config-multiaccountsetup.amazonaws.com",
"DelegationEnabledDate": "2025-02-27T05:10:00.275000+00:00"
},
{
"ServicePrincipal": "config.amazonaws.com",
"DelegationEnabledDate": "2025-02-27T05:11:02.090000+00:00"
},
{
"ServicePrincipal": "member.org.stacksets.cloudformation.amazonaws.com",
"DelegationEnabledDate": "2025-02-27T05:12:51.210000+00:00"
},
{
"ServicePrincipal": "procurement-insights.marketplace.amazonaws.com",
"DelegationEnabledDate": "2024-10-10T13:39:46.761000+00:00"
},
{
"ServicePrincipal": "securityhub.amazonaws.com",
"DelegationEnabledDate": "2024-07-30T04:25:13.751000+00:00"
}
]
}
$
信頼されたアクセス
こちらも手動で実行する必要があります。
-
Trusted Access >>> Start Scan を選択
-
しばらくすると job が終了
-
再度 Trusted Access を選択すると結果が確認できます。Download Results から結果を CSVファイルで取得することも可能です。
10つのサービスが信頼されたアクセスが有効になっていることがわかります。
信頼されたアクセスも AWS CLI でも確認することが可能です。
$ aws organizations list-aws-service-access-for-organization --output text
ENABLEDSERVICEPRINCIPALS 2024-06-26T05:19:43.724000+00:00 compute-optimizer.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2025-02-27T05:06:18.237000+00:00 config-multiaccountsetup.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2025-02-27T05:10:55.075000+00:00 config.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2023-12-25T05:39:10.926000+00:00 cost-optimization-hub.bcm.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2023-12-04T00:28:41.519000+00:00 health.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2024-06-03T09:00:44.197000+00:00 member.org.stacksets.cloudformation.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2024-10-09T02:44:13.851000+00:00 procurement-insights.marketplace.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2024-12-24T02:18:00.415000+00:00 ram.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2023-12-04T00:28:56.294000+00:00 reporting.trustedadvisor.amazonaws.com
ENABLEDSERVICEPRINCIPALS 2024-07-30T04:25:13.282000+00:00 securityhub.amazonaws.com
$
さいごに
今回 Organization から離脱を想定して 「AWS Organizations のアカウント評価」ソリューションによる3つのチェック(ポリシーの依存関係、委任された管理アカウントの有無、信頼されたアクセスの有無)を実施しました。本ソリューションを利用して確認を行えば、確認すべきポイントの網羅性やリスク回避が保証されるわけではありません。他にも Organization 間での AWS アカウントの移行に関する注意点はあり、それらを紹介する記事は複数もあります(完全なリストを作成するのが難しい状況なのだと)。ただ、一つの領域の作業を最初から組み上げていくよりもソリューションを利用することで標準的、効率的に行えるため、良い手段ではないかと思います。移行を担当することになった場合は、検討してみるのも良いと思います。