Amazon Inspector のEC2のスキャン除外タグ付けをAWS Organizationsのサービスコントロールポリシー (SCP)で防止する

2023.11.13

AWS事業本部の梶原@福岡オフィスです。

Amazon Inspector はソフトウェアの脆弱性やネットワークへの意図しない公開がないかなどを継続的にスキャンする脆弱性管理サービスになります。

こちらのAmazon Inspector のスキャンですがコスト要因や他のセキュリティサービスとの競合などの理由でスキャンするリソースの除外設定を行うことができます。

Q: リソースをスキャンから除外できますか?

Amazon EC2 インスタンスの場合: はい。リソースタグを追加することで EC2 インスタンスをスキャンから除外できます。 「InspectorEc2Exclusion」キーを使用できます。値は optional です。

よくある質問 - Amazon Inspector | AWS

Inspectorのスキャン対象を管理できるのですが、タグを削除することを忘れたり、また悪意を持って、除外タグをつけてスキャンを回避しようとすることも可能ではあります。

そこで、AWS Organizations のサービスコントロールポリシー (SCP)機能を利用して、Amazon EC2 インスタンスに対して、スキャン除外タグをつけることを防いでみたいと思います。

なお、Amazon ECR のスキャン除外については、タグ付けではなく別の方法になりますので、今回の対象からははずさせていただきます。

Amazon ECR にあるコンテナイメージの場合: はい。スキャン用に設定する Amazon ECR リポジトリを選択できますが、リポジトリ内のすべてのイメージがスキャンされます。包含ルールを作成して、スキャンするリポジトリを選択できます。

結論

Oraganizations のサービスコントロールポリシー (SCP)を有効にして、以下のポリシーを有効にしたい組織に対してアタッチしてください。

なお、SCPのアタッチ数には上限があり、Statementは複数記載することが可能ですので、対象のStatementの部分を現在有効なSCPに追加して有効化することをお勧めします

注意:すでにタグ付けされて除外されてしまっているインスタンスに対してはRequestTagでの条件となるので、条件の対象外となりますことにご注意ください

Amazon EC2 インスタンスをスキャンから除外するタグ付けを防止したい場合

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyEc2WithInspectorEc2ExclusionTag",
            "Effect": "Deny",
            "Action": [
                "ec2:*"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "Null": {
                    "aws:RequestTag/InspectorEc2Exclusion": "false"
                }
            }
        }
    ]
}

Amazon EC2 インスタンスをスキャンから除外するタグ付けを防止したい+一部の権限には許可したい場合(一例)

以下では一部の権限 AWS SSOのAWSReservedSSO_AWSAdministratorAccess に対して許可しています

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyEc2WithInspectorEc2ExclusionTag",
            "Effect": "Deny",
            "Action": [
                "ec2:*"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "Null": {
                    "aws:RequestTag/InspectorEc2Exclusion": "false"
                },
                "ArnNotLike": {
                    "aws:PrincipalARN": [
                        "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_AWSAdministratorAccess_*"
                    ]
                }
            }
        }
    ]
}

やってみる

AWS Organizations でのサービスコントロールポリシー (SCP)の有効化

AWS Organizationsでサービスコントロールポリシーを有効化します。

サービスコントロールポリシー (SCP)を作成、編集する

コンソールより新しいサービスコントロールポリシーを作成します

ポリシーを作成します。

"Condition": {
    "Null": {
        "aws:RequestTag/InspectorEc2Exclusion": "false"
    }
}

こちらの条件は、リクエスト時にInspectorEc2Exclusionタグが設定(存在する)場合に有効になる条件になります。

こちらと拒否(Deny)を組み合わせてEC2のスキャン除外タグを防止するポリシーを作成してみます

統制対象にしたい組織(OU)に対して、SCPをアタッチします。

ターゲットタブを選択して、[アタッチ]を選択します

統制対象にしたい組織(OU)を選択して、[ポリシーのアタッチ」を実施します

正常にアタッチが実施できたら、以降その組織配下ではECのスキャン除外タグを設定することはできなくなります。

設定の検証

EC2インスタンスを起動してみる

起動してみると、SCPで制限されている旨のメッセージが表示されました。

「… an explicit deny in a service control policy. Encoded authorization failure」

既存のEC2インスタンスに対して、Inspector除外タグを設定してみる

InspectorEc2Exclusion タグを設定してみます。

保存を実施すると、起動と同様にSCPで制限されている旨のメッセージが表示されました。

なお、InspectorEc2Exclusion タグを設定しない場合は通常通りEC2の起動や他のタグ値などの更新は問題なく行えることを確認しておりますが

実際にご自分の環境で行う場合は、検証用の組織(OU)などにアタッチを行い、動作確認など、問題がないか事前にご検証されることを推奨いたします。

まとめ

InspectorEc2Exclusion の除外タグ関して、タグ値はOptional(任意の値)となり、

SCPの条件設定などは少し癖がありますので、影響が大きいSCPの更新に関してご参考になれば幸いです。