ECS インスタンス内から、インスタンス ID や IP アドレスなどのインスタンスプロパティをクエリし、SSRF 攻撃 を防止するためにセキュリティ強化モードを適用します。
インスタンスメタデータの取得
インスタンスメタデータには、インスタンス ID、ネットワーク構成、アクセス認証情報などの属性が含まれます。
方法 1:セキュリティ強化モード(推奨)
一時的なアクセストークンを取得し、メタデータリクエストに含めます。
Linux
-
インスタンスにログインします。
-
一時トークンを取得します。
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:21600"`X-aliyun-ecs-metadata-token-ttl-seconds パラメーターは、トークンの有効期間 (TTL) を秒単位で指定します。有効値:1 ~ 21600。
-
メタデータを取得するリクエストにトークンを含めます。
curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/instance-idinstance-idは、必要に応じて 他のメタデータ項目(例:mac や hostname)に置き換えてください。成功すると、端末にはインスタンス ID 文字列のみが出力されます(例:
i-bp1******)。
Windows
-
インスタンスにログインします。
-
一時トークンを取得します。
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://100.100.100.200/latest/api/tokenX-aliyun-ecs-metadata-token-ttl-seconds パラメーターは、トークンの有効期間 (TTL) を秒単位で指定します。有効値:1 ~ 21600。
-
メタデータを取得するリクエストにトークンを含めます。
Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/instance-idinstance-idは、必要に応じて 他のメタデータ項目(例:mac や hostname)に置き換えてください。成功すると、端末にはインスタンス ID 文字列のみが出力されます(例:
i-bp1******)。
方法 2:通常モード
通常モードはセキュリティリスクが高く、使用は推奨されません。
-
Linux:
# GET リクエストを送信してインスタンス ID を取得します。 curl http://100.100.100.200/latest/meta-data/instance-id -
Windows:
# GET リクエストを送信してインスタンス ID を取得します。 Invoke-RestMethod -Uri http://100.100.100.200/latest/meta-data/instance-id -Method Get
セキュリティ強化モードのみを有効化
セキュリティ強化モード を有効化すると、トークンを使用した場合にのみメタデータにアクセスできるようになります。通常モードでのリクエストは、403 - Forbidden エラーを返します。デフォルトでは、ECS インスタンスはトークン不要のアクセス(通常モード)を許可しており、SSRF 攻撃のリスクが高くなります。
典型的な攻撃では、外部 URL から画像をダウンロードするなどのアプリケーション機能を悪用します。攻撃者は、サーバーがメタデータサービスにクエリを送信するように仕向け、RAM ロールの一時的な認証情報を盗み出します。このロールが高度な権限を持っている場合、攻撃者はクラウドリソースや Alibaba Cloud アカウント全体を乗っ取る可能性があります。
新規インスタンスでのセキュリティ強化モードの有効化
コンソール
インスタンスを作成する際、 を セキュリティ強化モード に設定します。
カスタムイメージからインスタンスを作成する際に セキュリティ強化モード が利用できない場合は、イメージをアップグレードしてください。
CLI
RunInstances または CreateInstance を呼び出し、HttpEndpoint=enabled および HttpTokens=required を指定します。例:
この例では、セキュリティ強化モード で Linux インスタンスを作成します。
aliyun ecs RunInstances \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--ImageId 'aliyun_3_x64_20G_alibase_20250629.vhd' \
--InstanceType 'ecs.g7.large' \
--VSwitchId 'vsw-bp1******trg' \
--SecurityGroupId 'sg-bp1******dgl' \
--SystemDisk.Size 40 \
--SystemDisk.Category cloud_essd \
--HttpEndpoint enabled \
--HttpTokens required
API
RunInstances または CreateInstance を呼び出し、HttpEndpoint=enabled および HttpTokens=required を指定します。
既存のインスタンスのアップグレード
適用範囲
-
Windows インスタンス:セキュリティ強化モード はサポートされていません。このモードを強制的に適用すると、初期化に失敗し、ホスト名の変更や KMS のアクティベーションが中断されます。
-
Linux インスタンス:サポートされています。アップグレード前に、以下のセクションで依存関係のチェックと修正を完了させてください。
ステップ 1:コードと依存関係のチェックおよびアップグレード
セキュリティ強化モード に切り替える前に、インスタンスおよびすべてのデプロイ済みアプリケーションが次の要件を満たしていることを確認してください。
-
cloud-init のバージョンは 23.2.2 以降である必要があります。
cloud-init --versionコマンドでバージョンを確認できます。23.2.2 より前のバージョンの場合は、まず cloud-init をアップグレードしてください。アップグレードしない場合、モード切り替え後にインスタンスが起動できなくなります。 -
すべてのアプリケーションコードおよびスクリプトは、方法 1:セキュリティ強化モード を使用してインスタンスメタデータにアクセスする必要があります。
重要SDK 構成用の STS トークンを取得するために Credentials ライブラリを使用している場合は、セキュリティ強化モードをサポートするバージョン にアップグレードしてください。
アップグレード後、通常モードでのアクセスが残っていないことを確認してください。「ECS インスタンスが通常モードでアクセスされているかどうかを検出する方法は?」をご参照ください。その後、インスタンスに対して セキュリティ強化モード を有効化します。
ステップ 2:セキュリティ強化モードの有効化
コンソール
-
ECS コンソール - インスタンス ページに移動します。リージョンとリソースグループを選択します。
-
[操作] 列で、 をクリックします。
-
インスタンスメタデータアクセスチャネルを有効化 スイッチをオンにし、インスタンスメタデータアクセスモード を セキュリティ強化モード に設定して、OK をクリックします。

CLI
ModifyInstanceMetadataOptions を呼び出し、HttpEndpoint=enabled および HttpTokens=required を指定して セキュリティ強化モード を有効化します。例:
aliyun ecs ModifyInstanceMetadataOptions \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--InstanceId 'i-bp1******ke' \
--HttpEndpoint enabled \
--HttpTokens required
API
ModifyInstanceMetadataOptions を呼び出し、HttpEndpoint=enabled および HttpTokens=required を指定して セキュリティ強化モード を有効化します。
切り替え後、メタデータアクセスおよびアプリケーションステータスを監視します。問題が発生した場合は、通常モードおよびセキュリティ強化モード に戻してサービスを復元し、再度「ステップ 1:コードと依存関係のチェックおよびアップグレード」を実行してください。
インスタンスメタデータの詳細
メタデータはディレクトリのような階層構造で整理されています。ディレクトリにアクセスすると、そのエントリまたはサブディレクトリが返されます。たとえば、meta-data/instance/ にアクセスすると、instance-name および instance-type が返されます。
|
カテゴリ |
メタデータ |
説明 |
例 |
|
基本的なインスタンス情報 |
|
インスタンス ID。 |
|
|
|
インスタンス名。 |
|
|
|
|
ホスト名。 |
|
|
|
|
インスタンスタイプ。 |
|
|
|
|
シリアル番号。 |
|
|
|
|
インスタンスのリージョン。 |
|
|
|
|
インスタンスのゾーン。 |
|
|
|
|
インスタンス所有者の Alibaba Cloud アカウント ID。 |
|
|
|
|
指定されたインスタンスのタグの値。 この機能を有効にするには、ModifyInstanceMetadataOptions を呼び出して、 |
|
|
|
イメージ情報 |
|
インスタンス作成に使用されたイメージ ID。 |
|
|
|
Alibaba Cloud Marketplace のイメージのプロダクトコード。 |
|
|
|
|
Alibaba Cloud Marketplace のイメージの支払い方法。 |
|
|
|
|
Linux インスタンスが更新に使用するパッケージマネージャのソース(yum や apt など)。 |
|
|
|
基本的なネットワーク構成 |
|
ネットワークタイプ。VPC のみがサポートされています。 |
|
|
|
インスタンスの VPC ID。 |
|
|
|
|
インスタンスの VPC の CIDR ブロック。 |
|
|
|
|
インスタンスの vSwitch ID。 |
|
|
|
|
インスタンスの vSwitch の CIDR ブロック。 |
|
|
|
|
インスタンスタイプの最大アウトバウンド内部帯域幅。単位:Kbit/s。 |
|
|
|
|
DNS 構成。 |
|
|
|
|
NTP サーバーアドレス。 |
|
|
|
プライマリ ENI の IP アドレス |
|
インスタンスの MAC アドレス。複数の NIC を持つインスタンスの場合、eth0 の MAC アドレスのみが返されます。 |
|
|
|
プライマリ ENI のプライベート IPv4 アドレス。 |
|
|
|
|
インスタンスのプライマリ ENI のパブリック IPv4 アドレス。 |
|
|
|
|
プライマリ ENI にアタッチされた静的パブリック IPv4 アドレスまたは EIP。 |
|
|
|
エラスティックネットワークインターフェースの詳細 |
|
ENI ID。 [mac] は、mac メタデータ項目から取得したインスタンスの MAC アドレスに置き換えてください。以下も同様です。 |
|
|
|
ENI の VPC ID。 |
|
|
|
|
ENI の vSwitch ID。 |
|
|
|
|
ENI のプライマリプライベート IP。 |
|
|
|
|
ENI に割り当てられたプライベート IPv4 アドレス。 |
|
|
|
|
ENI に割り当てられたプライベート IPv4 プレフィックス。 |
|
|
|
|
ENI のサブネットマスク。 |
|
|
|
|
ENI の IPv4 ゲートウェイ。 |
|
|
|
|
ENI の vSwitch の IPv4 CIDR ブロック。 |
|
|
|
|
ENI の VPC の IPv4 CIDR ブロック。 |
|
|
|
|
ENI に割り当てられた IPv6 アドレス。IPv6 が構成された VPC タイプのインスタンスでのみ利用可能です。 |
|
|
|
|
ENI に割り当てられた IPv6 プレフィックス。 |
|
|
|
|
ENI の VPC の IPv6 ゲートウェイ。 |
|
|
|
|
ENI の vSwitch の IPv6 CIDR ブロック。IPv6 が構成された VPC タイプのインスタンスでのみ利用可能です。 |
|
|
|
|
ENI の VPC の IPv6 CIDR ブロック。IPv6 が構成された VPC タイプのインスタンスでのみ利用可能です。 |
|
|
|
ディスク情報 |
|
ディスクのシリアル番号。 |
|
|
|
ディスク ID。 |
|
|
|
|
ディスク名。 |
|
|
|
セキュリティと認証情報 |
|
公開鍵。起動時に提供された場合のみ利用可能です。 |
|
|
|
インスタンスに関連付けられた RAM ロールの一時的なセキュリティ認証情報。[role-name] は RAM ロール名に置き換えてください。認証情報は Expiration フィールドの時刻に有効期限が切れます。新しい認証情報を取得するには、再度呼び出してください。 |
|
|
|
高度なインスタンス属性 |
|
ECS 仮想化ソリューション。Virt 1.0 および Virt 2.0 がサポートされています。 |
|
|
|
内部ビルド番号。 |
|
|
|
|
スポットインスタンスの停止およびリリース予定時刻。形式は UTC+0 の yyyy-MM-ddThh:mm:ssZ。 |
|
|
|
Windows 固有の構成 |
|
Windows インスタンスの KMS アクティベーションサーバー。 |
|
|
|
Windows インスタンスの更新サーバー。 |
|
|
|
|
Windows インスタンスの更新ステータス監視サーバー。 |
|
よくある質問
-
SSRF 攻撃とは何ですか?また、セキュリティ強化モードはどのように防御しますか?
SSRF は、攻撃者がサーバーをだまして内部システム(メタデータサービスやデータベースなど)への不正なネットワークリクエストを実行させる脆弱性です。たとえば、攻撃者は
http://100.100.100.200/latest/meta-data/を含む URL を送信し、アプリケーションに機密メタデータをフェッチさせて返させることができます。デフォルトでは、ECS インスタンスはトークン不要のアクセス(通常モード)を許可しています。セキュリティ強化モード ではトークンの検証が必須となり、クライアントはまず一時トークンを取得するための PUT リクエストを送信し、その後の GET リクエストにトークンを含める必要があります。SSRF 攻撃は PUT リクエストを開始できないため、トークンを取得できず、不正アクセスを効果的に阻止します。
-
セキュリティ強化モードでコマンドを使用してインスタンスメタデータにアクセスできません。どうすればよいですか?
一般的なコマンドエラー:
-
インスタンスメタデータアクセス認証情報の TTL が範囲外です(400 - Missing or Invalid Parameters)
TTL は 1 ~ 21,600 秒の範囲内で指定する必要があります。この範囲外の値を指定すると、400 - Missing or Invalid Parameters エラーが返されます。
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds: 21700" -
リクエストに X-Forwarded-For ヘッダーが含まれています(403 - Forbidden)
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-Forwarded-For: www.ba****.com" -
指定されたインスタンスメタデータアクセス認証情報が無効です(401 - Unauthorized)
curl -H "X-aliyun-ecs-metadata-token: aaa" -v http://100.100.100.200/latest/meta-data/
-
-
メタデータサービスへの高頻度アクセスがスロットルされた場合はどうすればよいですか?
メタデータサービスにはレート制限があります。インスタンス ID など、あまり変更されない項目は起動時に一度取得し、適切な TTL でローカルにキャッシュしてください。
-
インスタンスメタデータアクセスモードをセキュリティ強化モードに変更した後、アプリケーションが動作しなくなりました。この問題をトラブルシューティングするにはどうすればよいですか?
インスタンス上のアプリケーションまたはスクリプトがまだ通常モードを使用している可能性があります。「既存のインスタンスのアップグレード」に従って、これらをチェックおよびアップグレードしてください。
-
ローカルホストからメタデータアドレスにアクセスできますか?
いいえ。
100.100.100.200はリンクローカルアドレスであり、ECS インスタンス内の仮想ネットワークインターフェースからのみ到達可能です。インスタンス外からのリクエストはこのアドレスにルーティングできません。 -
カスタムイメージからインスタンスを作成する際にセキュリティ強化モードを選択できません。どうすればよいですか?
Linux のカスタムイメージから ECS インスタンスを作成する際、セキュリティ強化モード が利用できない場合があります。これは、イメージが要件を満たしていないことを意味します。次のようにイメージをアップグレードしてください。
-
一時インスタンスの作成:カスタムイメージを使用して一時的な ECS インスタンスを作成します。
-
一時インスタンスの修正:一時インスタンス上で、次の修正を行います。「既存のインスタンスのアップグレード」をご参照ください。
-
cloud-init のアップグレード:cloud-init をバージョン 23.2.2 以降にアップグレードします。
-
アプリケーションおよびスクリプトの修正:通常モードを使用しているすべてのアプリケーションまたはスクリプトをセキュリティ強化モードに更新します。
-
-
新しいイメージの作成と属性の更新:インスタンスから新しいカスタムイメージを作成します。その後、ModifyImageAttribute を呼び出して、
Features.ImdsSupportを `v2` に設定します。 -
リソースの解放:新しいイメージの作成後、一時インスタンスを解放します。
-
-
Credentials ツールのどのバージョンがセキュリティ強化モードをサポートしていますか?
古いバージョンの Credentials はセキュリティ強化モードでのメタデータアクセスをサポートしていません。モード切り替え前にアップグレードせずに セキュリティ強化モード に切り替えると、SDK が STS トークンを取得できなくなり、サービス中断が発生します。
モード切り替え前に、Credentials 依存関係をサポート対象のバージョンにアップグレードしてください。
-
Java: credentials-java バージョン >=
0.3.10。 -
Node.js: credentials バージョン >=
2.3.1。 -
PHP: credentials バージョン >=
1.2.0。 -
Python: alibabacloud_credentials バージョン >=
0.3.6。 -
Go: credentials-go バージョン >=
1.3.10。
-
-
ECS インスタンスが通常モードでアクセスされているかどうかを検出するにはどうすればよいですか?
次の方法を使用して、通常モードでメタデータにアクセスするプロセスを検出および特定します。
方法 1:CloudMonitor を使用して通常モードのアクセスを確認
CloudMonitor コンソールで ECS メタデータのモニタリングデータを確認し、インスタンスが通常モードでアクセスされているかどうかを判断します。
-
CloudMonitor コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。「ECS メタデータ」モニタリングページを検索して移動します。
-
対象インスタンスの 通常モードでの成功したアクセス回数 メトリックを確認します。
-
このメトリックが 0 でない場合、インスタンスが通常モードでアクセスされています。通常モードを使用しているアプリケーションを特定してアップグレードしてください。
方法 2:クラウドアシスタントプラグインを使用して特定のプロセスを特定
クラウドアシスタントプラグインを使用して、通常モードでメタデータにアクセスするプロセスを特定します。
サポートされるオペレーティングシステム
-
Alibaba Cloud Linux 3
-
Alibaba Cloud Linux 3 Pro
-
Anolis OS 8
-
CentOS Stream 8/9
-
CentOS 8
-
Ubuntu: 20/24
-
Debian:10,11,12
-
Fedora 35+
-
AlmaLinux 8/9
-
Rocky Linux 8/9
-
Red Hat Enterprise Linux 8/9
-
Red Hat の場合は、RPM パッケージをダウンロードしてクラウドアシスタントエージェントをインストールします。
-
SUSE 15.1/15.2/15.3/15.4/15.5/15.6
-
OpenSuse 15.2/15.3/15.4/15.5/15.6
手順
-
クラウドアシスタントプラグインのインストールと有効化
ECS インスタンスにログインし、モニタリングサービスをインストールします。このサービスは一部のインスタンスリソースを消費します。
# モニタリングサービスをデプロイします。 sudo acs-plugin-manager --exec --plugin ACS-ECS-ImdsPacketAnalyzer # モニタリングサービスのステータスを確認します。 sudo systemctl status imds_tracer_tool
-
問題のあるプロセスの特定 まだ通常モードでメタデータにアクセスしているプロセスを確認します。ログにはプロセス ID (PID) が表示されます。
cat /var/log/imds/imds-trace.* | grep WARNING
-
分析と修正 PID に対応するアプリケーションまたはスクリプトを特定し、セキュリティ強化モード にアップグレードします。
-