inspector2-enablement-with-cliを使って、全アカウント・全リージョンのAmazon Inspectorを有効化してみた

2023.10.05

「Amazon Inspectorを楽に有効化したいな」

Inspectorの有効化はボタン1つで簡単です。しかし、対象のアカウントやリージョンが多いとなかなか大変です。

良いツールないかと探していたら、AWSが公開している以下のスクリプトがありました。

inspector2-enablement-with-cli

今回はこのスクリプトを使って、以下を行います。

  • Amazon Inspector管理者の委任
  • Amazon Inspectorを全アカウント・全リージョン有効化
  • 自動有効化の設定

やってみた

aws-samples/inspector2-enablement-with-cli: bash script to enable Amazon Inspector2 on AWS Organizations in multiple regionsから引用

手順どおり、以下のステップで進めます。

  1. 管理アカウント
    1. Amazon Inspector管理者の委任
  2. 委任先アカウント
    1. Amazon Inspector有効化
    2. 委任先アカウント: メンバーアカウントの委任先アカウントへの関連付け
    3. 委任先アカウント: メンバーアカウントのAmazon Inspector有効化
    4. 委任先アカウント: 自動有効化を設定

事前準備(管理アカウント)

管理アカウントにログインして、CloudShellを開きます。

以降、コマンドはCloudShell上で実行します。

スクリプトをダウンロードします。

$ git clone https://github.com/aws-samples/inspector2-enablement-with-cli.git
$ cd inspector2-enablement-with-cli/

デフォルトでは、param_inspector2.json内のregionを対象にします。

export INSPECTOR2_REGIONSに対象regionを設定することで、上書きができます。

今回はすべてのリージョンを対象にするため、以下のコマンドでINSPECTOR2_REGIONSに有効な全てのリージョンを入れます。

$ export INSPECTOR2_REGIONS=$(aws ec2 describe-regions --query 'Regions[].RegionName' --output text | tr '\n' ' ')

委任先アカウントのアカウントIDを変数に入れます。

$ DA_ACCOUNT_ID='1234567890' # 各自の環境に合わせて変更してください

Dry runオプション

-rオプションでDry runが可能です。

以下はアカウント/リージョンごとに Inspector2 のアクティベーション ステータスを確認するコマンドと実行結果です。

出力結果が以下のように、有効なすべてのリージョンが含まれていればOKです。

$ ./inspector2_enablement_with_awscli.sh -a get_status -r

< -------------------------------- Dry Running -------------------------------- >
check_inspector2_status_per_region

 ******** Checking the activation status of Amazon Inspector2 for account 1234567890 per region ******** 
aws inspector2 batch-get-account-status --account-ids 1234567890 --region ap-south-1
aws inspector2 batch-get-account-status --account-ids 1234567890 --region eu-north-1
aws inspector2 batch-get-account-status --account-ids 1234567890 --region eu-west-3
# 省略


Execution details here: /tmp/inspector2-yYtQ9SMQBx/inspector.txt

Amazon Inspector管理者の委任(管理アカウント)

コマンドを実行して、管理者の委任を行います。

$ ./inspector2_enablement_with_awscli.sh -a delegate_admin -da $DA_ACCOUNT_ID

designated_delegated_admin_for_inspector2 1234567890

 ******** Designate 1234567890 account as  Amazon Inspector2 Administrator per region ******** 
Attempting to assign 1234567890 as Inspector2 Administrator Account in region ap-northeast-1.
Attempting to assign 1234567890 as Inspector2 Administrator Account in region ap-northeast-2.
Attempting to assign 1234567890 as Inspector2 Administrator Account in region ap-northeast-3.
# 省略

Use the console or Run "aws inspector2 list-delegated-admin-accounts" to check the result.

コマンドで委任が完了したか確認します。

$ aws inspector2 list-delegated-admin-accounts
{
    "delegatedAdminAccounts": [
        {
            "accountId": "1234567890",
            "status": "ENABLED"
        }
    ]
}

委任が有効になっていることを確認できました。

これで管理アカウントの作業は終わりです。ここからは委任先アカウントで作業を行います。

委任先アカウントのAmazon Inspector有効化(委任先アカウント)

委任先アカウントに切り替えて、CloudShellを開きます。

スクリプトをダウンロード及び、リージョンをセットします。

$ git clone https://github.com/aws-samples/inspector2-enablement-with-cli.git
$ cd inspector2-enablement-with-cli/
$ export INSPECTOR2_REGIONS=$(aws ec2 describe-regions --query 'Regions[].RegionName' --output text | tr '\n' ' ')
$ DA_ACCOUNT_ID='1234567890' # 各自の環境に合わせて変更してください

全てのスキャンタイプを全てのリージョンに有効化します。

まずは、Dry Runを実行します。

$ ./inspector2_enablement_with_awscli.sh -a activate -t $DA_ACCOUNT_ID -s all -r

< -------------------------------- Dry Running -------------------------------- >
enable_inspector2_per_region 1234567890 all

 ******** Activation of Inspector2 for accounts per region ******** 
[ACCOUNTS_LIST]:1234567890
aws inspector2 enable --account-ids [ACCOUNTS_LIST] --resource-types EC2 ECR LAMBDA LAMBDA_CODE --region ap-south-1
aws inspector2 enable --account-ids [ACCOUNTS_LIST] --resource-types EC2 ECR LAMBDA LAMBDA_CODE --region eu-north-1
aws inspector2 enable --account-ids [ACCOUNTS_LIST] --resource-types EC2 ECR LAMBDA LAMBDA_CODE --region eu-west-3
# 省略

出力結果から全てのリージョンで、全てのスキャンタイプを有効にすることを確認できました。

Dry runオプションを外して実行します。

この際に-s allで実行したいところですが、一部のリージョンは2023/10時点でLambdaコードスキャンに対応していません。

LambdaCodeスキャンが対応していないリージョンでは-s allではコマンドが失敗して、その他のスキャンタイプの設定も失敗します。

そのため、コマンドを分けて実行します。

$ ./inspector2_enablement_with_awscli.sh -a activate -t $DA_ACCOUNT_ID -s ec2 

enable_inspector2_per_region 1234567890 all

 ******** Activation of Inspector2 for accounts per region ******** 
[ACCOUNTS_LIST]:1234567890
Attemting to enable Inspector2 in accounts for the scanning type EC2 ECR LAMBDA LAMBDA_CODE in region ap-south-1;
Attemting to enable Inspector2 in accounts for the scanning type EC2 ECR LAMBDA LAMBDA_CODE in region eu-north-1;
Attemting to enable Inspector2 in accounts for the scanning type EC2 ECR LAMBDA LAMBDA_CODE in region eu-west-3;
# 省略

Execution details here: /tmp/inspector2-tvFchHE3fv/inspector.txt
# 同様のため各コマンドの省略
$ ./inspector2_enablement_with_awscli.sh -a activate -t $DA_ACCOUNT_ID -s ecr 
$ ./inspector2_enablement_with_awscli.sh -a activate -t $DA_ACCOUNT_ID -s lambda
$ ./inspector2_enablement_with_awscli.sh -a activate -t $DA_ACCOUNT_ID -s lambdaCode

管理アカウントのスキャンが有効になっていることを確認します。(regionは適当に選んでください。)

$ aws inspector2 batch-get-account-status --account-ids $DA_ACCOUNT_ID --region ap-southeast-1
{
    "accounts": [
        {
            "accountId": "1234567890",
            "resourceState": {
                "ec2": {
                    "status": "ENABLED"
                },
                "ecr": {
                    "status": "ENABLED"
                },
                "lambda": {
                    "status": "ENABLED"
                },
                "lambdaCode": {
                    "status": "ENABLED"
                }
            },
            "state": {
                "status": "ENABLED"
            }
        }
    ],
    "failedAccounts": []
}

メンバーアカウントの委任先アカウントへの関連付け(委任先アカウント)

Dry runを実行して対象を確認します。

出力結果が、全メンバーアカウントの全リージョンが対象になっていればOKです。(2345678901はメンバーアカウントのアカウントIDが入ります)

$  ./inspector2_enablement_with_awscli.sh -a associate -t members -r

< -------------------------------- Dry Running -------------------------------- >
attach_member_to_inspector2_admin_per_region members

 ******** Checking the member status of Amazon Inspector2 for account 2345678901 per region ******** 
aws inspector2 associate-member --account-id 2345678901 --region ap-south-1
aws inspector2 associate-member --account-id 2345678901 --region eu-north-1
aws inspector2 associate-member --account-id 2345678901 --region eu-west-3
# 省略

# 省略

Dry runを外して、実行します。アカウント数多いと少し時間がかかります。

$  ./inspector2_enablement_with_awscli.sh -a associate -t members

コマンドで関連付けできているか確認します。relationshipStatusENABLEDになっているので問題なさそうです。

$ aws inspector2 list-members
{
    "members": [
        {
            "accountId": "2345678901",
            "delegatedAdminAccountId": "1234567890",
            "relationshipStatus": "ENABLED",
            "updatedAt": "2023-10-04T08:13:25.255000+00:00"
        },
        {
            "accountId": "3456789012",
            "delegatedAdminAccountId": "1234567890",
            "relationshipStatus": "ENABLED",
            "updatedAt": "2023-10-04T08:15:14.078000+00:00"
        }
    ]
}

メンバーアカウントのAmazon Inspector有効化(委任先アカウント)

Dry runで対象を確認します。

$ ./inspector2_enablement_with_awscli.sh -a activate -t members -s all -r
< -------------------------------- Dry Running -------------------------------- >
enable_inspector2_per_region members all

 ******** Activation of Inspector2 for accounts per region ******** 
[ACCOUNTS_LIST]:2345678901 3456789012
# 同様のため各コマンドの省略
aws inspector2 enable --account-ids [ACCOUNTS_LIST] --resource-types EC2 ECR LAMBDA LAMBDA_CODE --region ap-south-1
aws inspector2 enable --account-ids [ACCOUNTS_LIST] --resource-types EC2 ECR LAMBDA LAMBDA_CODE --region eu-north-1
aws inspector2 enable --account-ids [ACCOUNTS_LIST] --resource-types EC2 ECR LAMBDA LAMBDA_CODE --region eu-west-3
# 省略

Dry runを外して、実行します。-s allは委任先アカウントのInspector有効化と同様の事象が発生します。同様に対応します。

$ $ ./inspector2_enablement_with_awscli.sh -a activate -t members -s ec2

enable_inspector2_per_region members all

 ******** Activation of Inspector2 for accounts per region ******** 
[ACCOUNTS_LIST]:2345678901 3456789012
Attemting to enable Inspector2 in accounts for the scanning type EC2 ECR LAMBDA LAMBDA_CODE in region ap-south-1;
Attemting to enable Inspector2 in accounts for the scanning type EC2 ECR LAMBDA LAMBDA_CODE in region eu-north-1;
Attemting to enable Inspector2 in accounts for the scanning type EC2 ECR LAMBDA LAMBDA_CODE in region eu-west-3;
$ ./inspector2_enablement_with_awscli.sh -a activate -t members -s ecr
$ ./inspector2_enablement_with_awscli.sh -a activate -t members -s lambda
$ ./inspector2_enablement_with_awscli.sh -a activate -t members -s lambdaCode

Inspectorの有効化状態を確認します。

$ ./inspector2_enablement_with_awscli.sh -a get_status

check_inspector2_status_per_region

******** Checking the activation status of Amazon Inspector2 for account 2345678901 per region ******** 
For Account 2345678901 in ap-south-1: Amazon Inspector2 status is ENABLED - ECR is ENABLED - EC2 is ENABLED - LAMBDA is ENABLED - LAMBDACODE is DISABLED
For Account 2345678901 in eu-north-1: Amazon Inspector2 status is ENABLED - ECR is ENABLED - EC2 is ENABLED - LAMBDA is ENABLED - LAMBDACODE is ENABLED
For Account 2345678901 in eu-west-3: Amazon Inspector2 status is ENABLED - ECR is ENABLED - EC2 is ENABLED - LAMBDA is ENABLED - LAMBDACODE is DISABLED

 ******** Checking the activation status of Amazon Inspector2 for account 3456789012 per region ******** 
For Account 3456789012 in ap-south-1: Amazon Inspector2 status is ENABLED - ECR is ENABLED - EC2 is ENABLED - LAMBDA is ENABLED - LAMBDACODE is DISABLED
For Account 3456789012 in eu-north-1: Amazon Inspector2 status is ENABLED - ECR is ENABLED - EC2 is ENABLED - LAMBDA is ENABLED - LAMBDACODE is ENABLED
For Account 3456789012 in eu-west-3: Amazon Inspector2 status is ENABLED - ECR is ENABLED - EC2 is ENABLED - LAMBDA is ENABLED - LAMBDACODE is DISABLED

以下が確認できました。

  • LambdaCodeがサポートされているリージョンでは、全てEnable
  • LambdaCodeのサポートされていないリージョンでは、LambdaCode以外がEnable

自動有効化を設定(委任先アカウント)

最後に自動有効化を行います。

まずはDry runで対象とコマンドを確認します。

$ ./inspector2_enablement_with_awscli.sh -a auto_enable -e "ec2=true,ecr=true,lambda=true,lambdaCode=true" -r

< -------------------------------- Dry Running -------------------------------- >
autoenable_inspector2_for_new_accounts ec2=true,ecr=true,lambda=true,lambdaCode=true

 ******** Auto-enablement of Inspector2 for new accounts per region ******** 
aws inspector2 update-organization-configuration --auto-enable ec2=true,ecr=true,lambda=true,lambdaCode=true --region ap-south-1
aws inspector2 update-organization-configuration --auto-enable ec2=true,ecr=true,lambda=true,lambdaCode=true --region eu-north-1
aws inspector2 update-organization-configuration --auto-enable ec2=true,ecr=true,lambda=true,lambdaCode=true --region eu-west-3

LambdCodeスキャンに対応していないリージョンに対応するために、2回に分けてコマンドを実行します。

すべてのリージョンにLambdaCode=falseで設定後、LambdaCode=trueを流すことで、対応していないリージョンはLambdaCodeスキャン以外を有効にできます。 (LambdaCode=trueだと対応していないコマンド失敗して、他のスキャンも設定されません)

$ ./inspector2_enablement_with_awscli.sh -a auto_enable -e "ec2=true,ecr=true,lambda=true,lambdaCode=false"
$ ./inspector2_enablement_with_awscli.sh -a auto_enable -e "ec2=true,ecr=true,lambda=true,lambdaCode=true"

自動有効化の設定を確認します。

[cloudshell-user@ip-10-6-70-5 inspector2-enablement-with-cli]$ aws inspector2 describe-organization-configuration --region  ap-south-1 # LambdaCodeスキャンが対応していないリージョン
{
    "autoEnable": {
        "ec2": true,
        "ecr": true,
        "lambda": true,
        "lambdaCode": false
    },
    "maxAccountLimitReached": false
}
[cloudshell-user@ip-10-6-70-5 inspector2-enablement-with-cli]$ 
[cloudshell-user@ip-10-6-70-5 inspector2-enablement-with-cli]$ aws inspector2 describe-organization-configuration --region  ap-northeast-1 # LambdaCodeスキャンが対応しているリージョン
{
    "autoEnable": {
        "ec2": true,
        "ecr": true,
        "lambda": true,
        "lambdaCode": true
    },
    "maxAccountLimitReached": false
}

おわりに

inspector2-enablement-with-cliを使った、Amazon Inspectorの有効化についてでした。

リージョンごとにLambdaCodeスキャンのサポート有無が異なるため、対応するために少し複雑になりました。

複数リージョン複数アカウントの有効化作業の辛みを軽減してくれる便利なツールでした。

長くなってしまったため、無効化は別の記事にします。

以上、AWS事業本部の佐藤(@chari7311)でした。

参考