Amazon EC2 の許可されたAMIの基準設定の評価ロジックを確認してみた

Amazon EC2 の許可されたAMIの基準設定の評価ロジックを確認してみた

Amazon EC2 の「許可された AMI」の評価ロジックがぱっとみ分かりにくかったので、実際に確認してまとめてみました。
2025.10.06

AWS のマルチアカウント戦略の普及とともに、より一層ガバナンス強化が重要になってきているかと思います。

Amazon EC2 の「許可された AMI」は、その名の通り、許可されていない AMI の利用を制限することができます。

許可された AMI 設定は、アカウントレベルでの設定と、AWS Organizations での組織単位を対象とした宣言型ポリシーを使用して指定することができます。

宣言型ポリシーでの使用参考

https://dev.classmethod.jp/articles/202412-allowed-amis/https://dev.classmethod.jp/articles/202412-allowed-amis/

また、先日のアップデートで従来からの ImageProviders に加え、以下の4つのパラメータが指定できるようになりました。

  • ImageNames
  • MarketplaceProductCodes
  • CreationDateCondition
  • DeprecationTimeCondition

https://dev.classmethod.jp/articles/ec2-allowed-amis-setting-parameters-ami-governance/

今回は、許可された AMI 設定でのパラメータ評価ロジックについて確認してみたいと思います。

許可された AMI の設定構文

前述のパラメータを ImageCriteria に記載することで許可する AMI を指定することができます。

			
			{
    "ImageCriteria" : [
        {
            "ImageProviders": ["string",...],
            "MarketplaceProductCodes": ["string",...],           
            "ImageNames":["string",...],
            "CreationDateCondition" : {
                "MaximumDaysSinceCreated": integer
            },
            "DeprecationTimeCondition" : {
                "MaximumDaysSinceDeprecated": integer
            }
         },
         ...
}

		

評価ロジック

評価ロジックのイメージについては、公式ドキュメントに図示されています。

スクリーンショット 2025-10-05 23.01.11.png
Amazon Elastic Compute Cloud User Guide - Allowed AMIs

公式ドキュメントの設定構文と評価ロジックでは、関連付けが分かりづらかったので、実際の設定に評価ロジックを記載してみました。

image-1759715203238.png

結論としては上記の画像になるのですが、ここから先では評価結果を実際に一つずつ確認してみます。

設定前と「Parameter_1」設定後の評価確認

まず 設定前 の動作確認しておきます。
aws-marketplace の AMI が利用可能か確認します。

			
			% aws ec2 describe-images --owners aws-marketplace
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "Description": "ZendPHP with apache on Alma Linux 8 (hourly) from Zend by Perforce",
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "zendphp-alma-8-apache-hourly-2024-11-07-prod-7siurepg57jns",
:

		

ImageOwnerAlias から aws-marketplace の AMI が表示されています。
上記では出力を省略していますが、多数の件数が出力されます。

次に自分のアカウントの AMI を確認します。

			
			% aws ec2 describe-images --owners "self"
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "State": "available",
            "OwnerId": "123456789012",
            "CreationDate": "2025-10-05T13:23:00.000Z",
            "Public": false,
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

OwnerId から 自アカウント の AMI が表示されています。
今回の環境では1件だけが登録されているので、1件のみ表示されました。

次に Amazon の AMI を確認します。

			
			% aws ec2 describe-images --owners "amazon"
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "Description": "Amazon Linux AMI 2023.0.20231114 arm64 ECS HVM EBS",
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "Name": "al2023-ami-ecs-hvm-2023.0.20231114-kernel-6.1-arm64",
 :

		

ImageOwnerAlias から amazon の AMI が表示されています。
こちらも出力は省略していますが、多数の件数が出力されました。

では、許可された AMI の設定をしてみます。

EC2 > 設定 > 許可された AMI で 有効 にし、JSON を設定し、「更新」 します。

image-1759676585850.png

「Parameter_1」設定後 の確認をします。

aws-marketplace の AMI が利用可能か確認します。

			
			% aws ec2 describe-images --owners aws-marketplace
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "Description": "ZendPHP with apache on Alma Linux 8 (hourly) from Zend by Perforce",
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "zendphp-alma-8-apache-hourly-2024-11-07-prod-7siurepg57jns",
:

		

許可されているので表示されました。
(省力していますが、件数も多数出力されました。)

次に自分のアカウントの AMI を確認します。

			
			% aws ec2 describe-images --owners "self"
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "State": "available",
            "OwnerId": "123456789012",
            "CreationDate": "2025-10-05T13:23:00.000Z",
            "Public": false,
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

こちらも許可されているので表示されました。(こちらも変わらず1件の出力です。)
aws-marketplace自アカウント ともに表示されているので、OR 条件で評価されたことが分かります。

次に Amazon の AMI を確認します。

			
			% aws ec2 describe-images --owners "amazon"
{
    "Images": []
}

		

許可されていないので表示されなくなりました。

続いて「Parameter_2」設定後の評価確認

次に別のパラメータを追加してみます。
MarketplaceProductCodes は AWS Marketplace の製品コードです。
適当にコードを選んで指定しています。

			
			{
    "ImageCriteria": [
        {
            "ImageProviders": [
                "aws-marketplace",
                "123456789012"
            ],
            "MarketplaceProductCodes": [
                "lobbx9ab7wh2fxpsxk7d574h"
            ]
        }
    ]
}

		

EC2 > 設定 > 許可された AMI で設定し、更新します。

image-1759678292336.png

aws-marketplace の AMI の許可に変化があるか確認します。

			
			% aws ec2 describe-images --owners aws-marketplace
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
                    "Ebs": {
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-01313af1be1db1862",
                        "VolumeSize": 50,
                        "VolumeType": "gp2",
                        "Encrypted": false
                    },
                    "DeviceName": "/dev/sda1"
                }
            ],
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "aws-image-master-centos-prod-ed74a6qyjfi3y",
:
            "OwnerId": "679593333241",
            "CreationDate": "2025-07-24T15:13:12.000Z",
            "Public": true,
            "ProductCodes": [
                {
                    "ProductCodeId": "lobbx9ab7wh2fxpsxk7d574h",
                    "ProductCodeType": "marketplace"
                }
            ],
:
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
                    "Ebs": {
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-0993d4e4eae7ff10a",
                        "VolumeSize": 50,
                        "VolumeType": "gp2",
                        "Encrypted": false
                    },
                    "DeviceName": "/dev/sda1"
                }
            ],
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "aws-image-v0.77-rel-centos-prod-ed74a6qyjfi3y",
:
            "OwnerId": "679593333241",
            "CreationDate": "2025-04-08T20:03:09.000Z",
            "Public": true,
            "ProductCodes": [
                {
                    "ProductCodeId": "lobbx9ab7wh2fxpsxk7d574h",
                    "ProductCodeType": "marketplace"
                }
            ],
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

MarketplaceProductCodes のパラメータ追加前は、出力数が多数あったのですが、設定後は特定のコードに絞られ2件しか表示されなくなりました。
ImageProviders aws-marketplace のパラメータとは AND 条件で評価されていることになります。

次に 自アカウント の許可状況に変化があるか確認します。

			
			% aws ec2 describe-images --owners self
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "EnaSupport": true,
            "Hypervisor": "xen",
            "Name": "test-allowed-ami",
            "RootDeviceName": "/dev/xvda",
:
            "State": "available",
            "OwnerId": "123456789012",
            "CreationDate": "2025-10-05T13:23:00.000Z",
            "Public": false,
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

MarketplaceProductCodesImageProviders 自アカウントAND かと思い出力されなくなるのかなと思ったのですが、出力されています。
ImageProviders 自アカウント ではそもそも MarketplaceProductCodes のキーがないためかと思われます。
キーが無い場合は、そのまま許可されるようです。

続いて「Parameter_3」設定後の評価確認

先程、キーが無いパラメータがあったので、全ての AMI にあると思われる ImageNames を追加してみます。

			
			{
    "ImageCriteria": [
        {
            "ImageProviders": [
                "aws-marketplace",
                "123456789012"
            ],
            "MarketplaceProductCodes": [
                "lobbx9ab7wh2fxpsxk7d574h"
            ],
            "ImageNames": [
                "test-*"
            ]
        }
    ]
}

		

再び、EC2 > 設定 > 許可された AMI で設定し、更新します。

image-1759680015656.png

aws-marketplace の AMI の許可に変化があるか確認します。

			
			% aws ec2 describe-images --owners aws-marketplace
{
    "Images": []
}

		

ImageNamestest- で始まるイメージ名のものは無かったので出力がなくなりました。

次に 自アカウント の許可状況に変化があるか確認します。

			
			% aws ec2 describe-images --owners self
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "EnaSupport": true,
            "Hypervisor": "xen",
            "Name": "test-allowed-ami",
            "RootDeviceName": "/dev/xvda",
:
            "State": "available",
            "OwnerId": "123456789012",
            "CreationDate": "2025-10-05T13:23:00.000Z",
            "Public": false,
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

イメージ名がマッチしているので許可されています。
それぞれのパラメータで AND で評価されたことが分かりました。

ここまでの評価結果としては、以下のようなイメージです。

image-1759715732765.png

続いて「Parameter_4」設定後の評価確認

最後に、「ImageCriterion_2」にあたる部分を追加してパラメータを追加します。

			
			{
    "ImageCriteria": [
        {
            "ImageProviders": [
                "aws-marketplace",
                "123456789012"
            ],
            "ImageNames": [
                "test-*"
            ],
            "MarketplaceProductCodes": [
                "lobbx9ab7wh2fxpsxk7d574h"
            ]
        },
        {
            "MarketplaceProductCodes": [
                "lobbx9ab7wh2fxpsxk7d574h"
            ]
        }
    ]
}

		

aws-marketplace の AMI の許可に変化があるか確認します。

			
			% aws ec2 describe-images --owners aws-marketplace
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
                    "Ebs": {
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-01313af1be1db1862",
                        "VolumeSize": 50,
                        "VolumeType": "gp2",
                        "Encrypted": false
                    },
                    "DeviceName": "/dev/sda1"
                }
            ],
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "aws-image-master-centos-prod-ed74a6qyjfi3y",
:
            "OwnerId": "679593333241",
            "CreationDate": "2025-07-24T15:13:12.000Z",
            "Public": true,
            "ProductCodes": [
                {
                    "ProductCodeId": "lobbx9ab7wh2fxpsxk7d574h",
                    "ProductCodeType": "marketplace"
                }
            ],
:
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
                    "Ebs": {
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-0993d4e4eae7ff10a",
                        "VolumeSize": 50,
                        "VolumeType": "gp2",
                        "Encrypted": false
                    },
                    "DeviceName": "/dev/sda1"
                }
            ],
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "aws-image-v0.77-rel-centos-prod-ed74a6qyjfi3y",
:
            "OwnerId": "679593333241",
            "CreationDate": "2025-04-08T20:03:09.000Z",
            "Public": true,
            "ProductCodes": [
                {
                    "ProductCodeId": "lobbx9ab7wh2fxpsxk7d574h",
                    "ProductCodeType": "marketplace"
                }
            ],
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

「ImageCriterion」同士の評価は OR になるので、今度は再び MarketplaceProductCodes の条件の2件が表示されるようになりました。

次に 自アカウント の許可状況に変化があるか確認します。

			
			% aws ec2 describe-images --owners self
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
:
            "EnaSupport": true,
            "Hypervisor": "xen",
            "Name": "test-allowed-ami",
            "RootDeviceName": "/dev/xvda",
:
            "State": "available",
            "OwnerId": "123456789012",
            "CreationDate": "2025-10-05T13:23:00.000Z",
            "Public": false,
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

		

こちらは特に影響がないので、結果は変わりませんでした。

ここまで確認すると、以下のような評価ロジックイメージができました。

image-1759715203238.png

まとめ

今回は、Amazon EC2 の「許可された AMI」の評価ロジックを確認してみました。
本設定を検討される際には、ご参考いただけると幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事

Amazon EC2 の許可されたAMIの基準設定の評価ロジックを確認してみた | DevelopersIO