Amazon EC2 Managed Resource Visibility の設定を Lambda Managed Instances で確認してみた
こんにちは、製造ビジネステクノロジー部の若槻です。
2026 年 4 月、Amazon EC2 に Managed Resource Visibility という設定が追加されました。
この設定により、Amazon EKS・Amazon ECS・AWS Lambda・Amazon WorkSpaces などのサービスがユーザーのアカウント内にプロビジョニングした EC2 リソース(インスタンス・EBS ボリューム・ENI など)を、EC2 コンソールや API の一覧表示に含めるかどうかを制御できるようになりました。
今回は、Lambda Managed Instances (LMI) のバックエンドに作成される EC2 インスタンスを題材に、この機能の動作を AWS CDK で実装した環境で確認してみました。
Managed Resource Visibility とは
Managed Resource Visibility のドキュメントは以下です。以降はこちらをもとに仕様を説明します。
対象リソースと対象サービス
ドキュメントによると、可視性設定の対象となるリソースタイプは以下の通りです。
| リソース種別 | 対象サービス |
|---|---|
| EC2 インスタンス | Amazon EKS(ワーカーノード)、Amazon ECS(コンテナインスタンス)、AWS Lambda 実行環境、Amazon WorkSpaces Core |
| EBS ボリューム | Amazon EKS、Amazon ECS |
| EBS スナップショット | Amazon EKS、Amazon ECS |
| ENI(ネットワークインターフェース) | Amazon EKS、Amazon ECS、Lambda |
EBS ボリュームと EBS スナップショットは Lambda が対象外です。EC2 インスタンスと ENI については Lambda も含まれています。
設定値
設定値は visible(表示)と hidden(非表示)の 2 択です。
- 新規 AWS アカウントでは
hiddenがデフォルト - 既存アカウントでは
visibleがデフォルト(既に作成されたリソースはhiddenに変更しても表示されたまま)
なお、設定変更はアカウント全体に適用され、IAM プリンシパルやリソース種別での細かい制御はできません。また、hidden に設定してもリソースは引き続き稼働・課金されます。
なぜこの設定が必要か
EKS・ECS・Lambda などのマネージドサービスは、ユーザーアカウント内に EC2 リソースを自動プロビジョニングします。これらは AWS サービス側が管理するリソースであるにもかかわらず、EC2 コンソールや describe-instances API の一覧にユーザー管理のリソースと混在して表示されていました。
この状態では以下のような問題が生じることがあります。
- コンプライアンスダッシュボードでのリソース数が実態と乖離する
- CSPM(クラウドセキュリティ態勢管理)ツールがマネージドリソースの設定を誤検知する
- オブザーバビリティツールで不要なノイズが発生する
可視性設定によりマネージドリソースを非表示にすることで、共有責任モデルをコンソール上でも体現できるようになります。
筆者自身も LMI を構築したことを忘れて「見覚えのないインスタンスがある、セキュリティ侵害では?」と焦ったり、LMI のライフサイクルのたびに Security Hub が誤検出を上げてしまうことに悩まされていました。この設定でそれらが解消できるのなら嬉しいですね。
確認してみた
動作確認環境の構築(CDK)
LMI のバックエンド EC2 インスタンスを作成するため、以下のリソースを AWS CDK で構築しました。
import * as cdk from "aws-cdk-lib";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as lambda_nodejs from "aws-cdk-lib/aws-lambda-nodejs";
import { Construct } from "constructs";
export class SampleStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* VPC 作成
*
* MEMO: NAT Gateway 経由で Lambda から AWS サービスへのアクセスを確保する
*/
const vpc = new ec2.Vpc(this, "Vpc", {
subnetConfiguration: [
{
name: "Public",
subnetType: ec2.SubnetType.PUBLIC,
},
{
name: "PrivateWithEgress",
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
},
],
});
/**
* セキュリティグループ作成
*
* MEMO: Capacity Provider 用
*/
const securityGroup = new ec2.SecurityGroup(this, "SecurityGroup", {
vpc,
});
/**
* Capacity Provider 作成
*
* MEMO: LMI のコア要素。LMI のバックエンドとなる EC2 インスタンスが
* このリソース経由でプロビジョニングされる
*/
const capacityProvider = new lambda.CapacityProvider(
this,
"CapacityProvider",
{
subnets: vpc.selectSubnets({
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
}).subnets,
securityGroups: [securityGroup],
},
);
/**
* LMI 用 Lambda 関数作成
*/
const lmiFunction = new lambda_nodejs.NodejsFunction(this, "LmiFunction", {
entry: "../server/src/lambda/handlers/sample-handler.ts",
runtime: lambda.Runtime.NODEJS_24_X, // LMI では Node.js 22.x 以上が必須
tracing: lambda.Tracing.ACTIVE,
});
/**
* Capacity Provider に Lambda 関数を追加
*/
capacityProvider.addFunction(lmiFunction);
}
}
Lambda のハンドラーコードはシンプルなものを使用します。
import { Context } from "aws-lambda";
export const handler = async (context: Context): Promise<void> => {
console.log(
JSON.stringify({
message: "Hello from LMI!",
requestId: context.awsRequestId,
functionName: context.functionName,
}),
);
};
デプロイすると LMI のバックエンド EC2 インスタンスが起動します。
Managed Resource Visibility の設定確認・変更
AWS CLI での操作方法を確認します。なお、この設定には AWS CLI 2.34.35 以降が必要です。
現在の設定を確認する
aws ec2 get-managed-resource-visibility --region ap-northeast-1
{
"Visibility": {
"DefaultVisibility": "visible"
}
}
既存アカウントではデフォルトが visible となっています。
設定を hidden に変更する
aws ec2 modify-managed-resource-visibility \
--default-visibility hidden \
--region ap-northeast-1
{
"Visibility": {
"DefaultVisibility": "hidden"
}
}
hidden に変更できました。
LMI バックエンド EC2 インスタンスの確認
デプロイ後に describe-instances を実行すると、LMI のバックエンドに EC2 インスタンスが 2 台起動していることが確認できます。
aws ec2 describe-instances \
--filters "Name=operator.managed,Values=true" \
--query "Reservations[].Instances[].{InstanceId:InstanceId,State:State.Name,Managed:Operator.Managed,Principal:Operator.Principal}" \
--output table \
--region ap-northeast-1
---------------------------------------------------------------------------------------
| DescribeInstances |
+----------------------+---------+---------+-------------------------------+----------+
| InstanceId | Managed | State | Principal | State |
+----------------------+---------+---------+-------------------------------+----------+
| i-0b2372a2a8fc72bd1 | True | running | scaler.lambda.amazonaws.com | running |
| i-0a19df852fb89c1c2 | True | running | scaler.lambda.amazonaws.com | running |
+----------------------+---------+---------+-------------------------------+----------+
Operator.Managed: true かつ Operator.Principal: scaler.lambda.amazonaws.com が確認でき、これらが LMI のバックエンド EC2 として管理されていることがわかります。
EC2 コンソールのインスタンス一覧にも表示されています。

visible 設定時は EC2 コンソールのインスタンス一覧に LMI のバックエンド EC2 インスタンスが表示される
hidden 設定後の動作確認(期待通りとならず)
設定を hidden に変更した後、スタックを削除・再デプロイして新規インスタンスを作成し、HiddenByDefault フィールドを確認しました。
aws ec2 describe-instances \
--include-managed-resources \
--filters "Name=operator.managed,Values=true" \
--query "Reservations[].Instances[].{InstanceId:InstanceId,HiddenByDefault:HiddenByDefault,Managed:Operator.Managed}" \
--output table \
--region ap-northeast-1
-------------------------------------------------------
| DescribeInstances |
+------------------+-----------------------+----------+
| HiddenByDefault | InstanceId | Managed |
+------------------+-----------------------+----------+
| None | i-0b2372a2a8fc72bd1 | True |
| None | i-0a19df852fb89c1c2 | True |
+------------------+-----------------------+----------+
期待通りの結果とはなりませんでした。hidden 設定後に新規作成したインスタンスも含め、HiddenByDefault は None のままで、インスタンスは非表示になっていません。
--no-include-managed-resources フラグを使用しても結果は変わりませんでした。
aws ec2 describe-instances \
--no-include-managed-resources \
--query "Reservations[].Instances[].InstanceId" \
--output json \
--region ap-northeast-1
["i-0b2372a2a8fc72bd1", "i-0a19df852fb89c1c2"]
マネジメントコンソールでの設定メニューが見当たらない
ドキュメントには「EC2 ダッシュボードの Account attributes カード内の Settings から Managed resource visibility を選択して設定できる」と記載されていますが、EC2 ダッシュボードのアカウントの属性を確認したところ、Managed Resource Visibility に該当する設定メニューは見当たりませんでした。

EC2 ダッシュボードのアカウントの属性。Managed Resource Visibility の項目は見当たらない
そもそもこの環境では非表示機能がまだ使えないのでしょうか。
まとめ
設定の確認・変更自体は問題なく動作しますが、Lambda Managed Instances のバックエンド EC2 は hidden 設定を適用しても HiddenByDefault が null のままで、コンソールや API の一覧から非表示にはなりませんでした。
今回試した環境では機能が未展開だったのでしょうか。方法が間違っているなどあれば教えて頂けると幸いです。
以上









