Amazon EC2 の許可されたAMIの基準設定の評価ロジックを確認してみた
AWS のマルチアカウント戦略の普及とともに、より一層ガバナンス強化が重要になってきているかと思います。
Amazon EC2 の「許可された AMI」は、その名の通り、許可されていない AMI の利用を制限することができます。
許可された AMI
設定は、アカウントレベルでの設定と、AWS Organizations での組織単位を対象とした宣言型ポリシーを使用して指定することができます。
宣言型ポリシーでの使用参考
また、先日のアップデートで従来からの ImageProviders
に加え、以下の4つのパラメータが指定できるようになりました。
- ImageNames
- MarketplaceProductCodes
- CreationDateCondition
- DeprecationTimeCondition
今回は、許可された AMI
設定でのパラメータ評価ロジックについて確認してみたいと思います。
許可された AMI の設定構文
前述のパラメータを ImageCriteria
に記載することで許可する AMI を指定することができます。
{
"ImageCriteria" : [
{
"ImageProviders": ["string",...],
"MarketplaceProductCodes": ["string",...],
"ImageNames":["string",...],
"CreationDateCondition" : {
"MaximumDaysSinceCreated": integer
},
"DeprecationTimeCondition" : {
"MaximumDaysSinceDeprecated": integer
}
},
...
}
評価ロジック
評価ロジックのイメージについては、公式ドキュメントに図示されています。
Amazon Elastic Compute Cloud User Guide - Allowed AMIs
公式ドキュメントの設定構文と評価ロジックでは、関連付けが分かりづらかったので、実際の設定に評価ロジックを記載してみました。
結論としては上記の画像になるのですが、ここから先では評価結果を実際に一つずつ確認してみます。
設定前と「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 を設定し、「更新」 します。
「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 で設定し、更新します。
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"
}
]
}
MarketplaceProductCodes
と ImageProviders
自アカウント
の AND
かと思い出力されなくなるのかなと思ったのですが、出力されています。
ImageProviders
自アカウント
ではそもそも MarketplaceProductCodes
のキーがないためかと思われます。
キーが無い場合は、そのまま許可されるようです。
続いて「Parameter_3」設定後の評価確認
先程、キーが無いパラメータがあったので、全ての AMI にあると思われる ImageNames
を追加してみます。
{
"ImageCriteria": [
{
"ImageProviders": [
"aws-marketplace",
"123456789012"
],
"MarketplaceProductCodes": [
"lobbx9ab7wh2fxpsxk7d574h"
],
"ImageNames": [
"test-*"
]
}
]
}
再び、EC2 > 設定 > 許可された AMI で設定し、更新します。
aws-marketplace
の AMI の許可に変化があるか確認します。
% aws ec2 describe-images --owners aws-marketplace
{
"Images": []
}
ImageNames
に test-
で始まるイメージ名のものは無かったので出力がなくなりました。
次に 自アカウント
の許可状況に変化があるか確認します。
% 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
で評価されたことが分かりました。
ここまでの評価結果としては、以下のようなイメージです。
続いて「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"
}
]
}
こちらは特に影響がないので、結果は変わりませんでした。
ここまで確認すると、以下のような評価ロジックイメージができました。
まとめ
今回は、Amazon EC2 の「許可された AMI」の評価ロジックを確認してみました。
本設定を検討される際には、ご参考いただけると幸いです。