一定期間未利用の IAM ユーザーを評価する Config ルールを AWS Organizations 配下の全てのアカウントに展開する

一定期間未利用の IAM ユーザーを評価する Config ルールを AWS Organizations 配下の全てのアカウントに展開する

Clock Icon2024.08.29

以前に検証していた AWS 管理の Config ルール「iam-user-unused-credentials-check」を AWS Organizations 配下のアカウントに展開するために、Config の組織のルールの管理機能で設定してみました。

組織配下に Config ルールを展開する方法には主に次の 2 つの方法があり、今回は AWS Config の機能を使った後者の方法で試しています。

  • AWS CloudFormation StackSets で設定
  • AWS Config の組織のルールの管理機能で設定

2 つの方法の比較は次のブログにまとめられており、参考になります。

https://dev.classmethod.jp/articles/config-setting-in-organizations/

以降では、実際に試した見た結果を記載します。

信頼されたアクセスと委任の設定

AWS Organizations の「信頼されたアクセス」として「config-multiaccountsetup」を有効にします。

$ aws organizations enable-aws-service-access --service-principal config-multiaccountsetup.amazonaws.com

実行結果を確認します。

$ aws organizations list-aws-service-access-for-organization --output text | grep config
ENABLEDSERVICEPRINCIPALS        2024-08-27T14:20:10.837000+00:00        config-multiaccountsetup.amazonaws.com

必須ではありませんが、AWS Organizations の管理アカウントではないアカウントで設定したいため委任します。「config-multiaccountsetup」を AWS アカウント111122223333 に委任します。

$ aws organizations register-delegated-administrator --account-id 111122223333 --service-principal config-multiaccountsetup.amazonaws.com

実行結果を確認します。

$ aws organizations list-delegated-services-for-account --account-id 111122223333 --output text | grep config
DELEGATEDSERVICES       2024-08-27T14:23:13.137000+00:00        config-multiaccountsetup.amazonaws.com

Config ルールの作成

AWS CLI コマンドput-organization-config-rule で組織のルールを作成できます。

委任先の AWS アカウントにおいて、パラメータ指定も含めて次のコマンドで Config ルール「iam-user-unused-credentials-check」を組織全体に作成します。今回は AWS CloudShell を利用しています。

aws configservice put-organization-config-rule \
  --organization-config-rule-name iam-user-unused-credentials-check \
  --organization-managed-rule-metadata '{
    "Description": "iam-user-unused-credentials-check",
    "RuleIdentifier": "IAM_USER_UNUSED_CREDENTIALS_CHECK",
    "InputParameters": "{\"maxCredentialUsageAge\":\"90\"}",
    "MaximumExecutionFrequency": "TwentyFour_Hours"
  }'

実行結果例です。

$ aws configservice put-organization-config-rule \
>   --organization-config-rule-name iam-user-unused-credentials-check \
>   --organization-managed-rule-metadata '{
>     "Description": "iam-user-unused-credentials-check",
>     "RuleIdentifier": "IAM_USER_UNUSED_CREDENTIALS_CHECK",
>     "InputParameters": "{\"maxCredentialUsageAge\":\"90\"}",
>     "MaximumExecutionFrequency": "TwentyFour_Hours"
>   }'
{
    "OrganizationConfigRuleArn": "arn:aws:config:ap-northeast-1:111122223333:organization-config-rule/iam-user-unused-credentials-check-myw0upit"
}

describe-organization-config-rule-statuses コマンドで作成の進捗を確認することもできます。下記実行結果のステータスは作成中であることを示します。

$ aws configservice describe-organization-config-rule-statuses
{
    "OrganizationConfigRuleStatuses": [
        {
            "OrganizationConfigRuleName": "iam-user-unused-credentials-check",
            "OrganizationRuleStatus": "CREATE_IN_PROGRESS",
            "LastUpdateTime": "2024-08-28T15:35:14.984000+00:00"
        }
    ]
}

完了後のステータス確認の実行結果です。今回の場合は、約 1 分で完了状態になっていることが確認できました。

$ aws configservice describe-organization-config-rule-statuses
{
    "OrganizationConfigRuleStatuses": [
        {
            "OrganizationConfigRuleName": "iam-user-unused-credentials-check",
            "OrganizationRuleStatus": "CREATE_SUCCESSFUL",
            "LastUpdateTime": "2024-08-28T15:36:21.616000+00:00"
        }
    ]
}

describe-organization-config-rules コマンドで現在の設定を確認することもできます。

$ aws configservice describe-organization-config-rules
{
    "OrganizationConfigRules": [
        {
            "OrganizationConfigRuleName": "iam-user-unused-credentials-check",
            "OrganizationConfigRuleArn": "arn:aws:config:ap-northeast-1:111122223333:organization-config-rule/iam-user-unused-credentials-check-myw0upit",
            "OrganizationManagedRuleMetadata": {
                "Description": "iam-user-unused-credentials-check",
                "RuleIdentifier": "IAM_USER_UNUSED_CREDENTIALS_CHECK",
                "InputParameters": "{\"maxCredentialUsageAge\":\"90\"}",
                "MaximumExecutionFrequency": "TwentyFour_Hours",
                "ResourceTypesScope": []
            },
            "ExcludedAccounts": [],
            "LastUpdateTime": "2024-08-28T15:35:14.977000+00:00"
        }
    ]
}

マネジメントコンソールから設定後の検出結果を確認してみます。IAM ユーザーを検出して評価してくれています。組織のルールであることが上部に記載されており、ルール名にはOrgConfigRuleが付与されています。また、編集ボタンが非活性になっており、ルールの編集はできなくなっています。

organization-config-rule-iam-user-unused-credentials-check-1

Config アグリゲータにおいて、他のアカウントにもルールが作成されていることを確認できました。

organization-config-rule-iam-user-unused-credentials-check-2

一方で、Config アグリゲータから評価結果を確認するときは、IAM ユーザー名を確認することはできませんでした。

organization-config-rule-iam-user-unused-credentials-check-3

Config アグリゲーターで複数アカウントの結果を閲覧するのではなく、Security Hub で確認する方法もあります。Security Hub にイベントを集約する設定が必要となりますが、Security Hub が作成している Config ルールを除外して評価結果を確認でき、リソース名(IAM ユーザー名)も確認できます。具体的な方法は下記ブログが参考になります。

https://dev.classmethod.jp/articles/view-config-on-security-hub/

今回、検証したアカウアントではセキュリティイベントを集約していなかったため、単一のアカウントの結果ですが、Security Hub において作成した Config ルールを確認する例です。タイトルでルール名を指定してフィルタしています。リソース欄から IAM ユーザー名を確認できます。

organization-config-rule-iam-user-unused-credentials-check-4

Config ルールの削除

今回は検証目的で作成したため、削除もします。

AWS CLI コマンドdelete-organization-config-rule で作成したルールを削除できます。作成時に指定したルール名を指定して削除します。

$ aws configservice delete-organization-config-rule --organization-config-rule-name iam-user-unused-credentials-check

作成時同様に、削除状況を確認することもできます。

削除中のステータス確認結果です。

$ aws configservice describe-organization-config-rule-statuses
{
    "OrganizationConfigRuleStatuses": [
        {
            "OrganizationConfigRuleName": "iam-user-unused-credentials-check",
            "OrganizationRuleStatus": "DELETE_IN_PROGRESS",
            "LastUpdateTime": "2024-08-28T16:21:24.044000+00:00"
        }
    ]
}

削除完了後のステータス確認結果です。

$ aws configservice describe-organization-config-rule-statuses
{
    "OrganizationConfigRuleStatuses": []
}

describe-organization-config-rules コマンドからも設定削除を確認できます。

$ aws configservice describe-organization-config-rules
{
    "OrganizationConfigRules": []
}

さいごに

Config の組織のルールの管理機能を利用して、AWS 管理の Config ルール「iam-user-unused-credentials-check」を AWS Organizations 配下のアカウントに設定してみました。

設定方法に関して、過去にも別のルールを作成する例でブログが公開されております。少し古い情報であったため改めて試してみました。

https://dev.classmethod.jp/articles/deploy-config-rules-in-organization-member-account/

以上、このブログがどなたかのご参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.