ECS (Elastic Compute Service) インスタンスのメタデータは、メタデータサービスを使用してインスタンスから取得される情報 (インスタンス属性など) です。 インスタンス属性には、インスタンスID、仮想プライベートクラウド (VPC) 情報、およびネットワークインターフェイスコントローラ (NIC) 情報が含まれます。 メタデータサービスを使用すると、ECSコンソールにログインしたり、API操作を呼び出したりすることなく、ECSインスタンス内の情報にアクセスできます。 メタデータサービスを使用すると、実行中状態のECSインスタンス、またはECSインスタンスでホストされているアプリケーションをより便利で安全な方法で設定または管理することもできます。 たとえば、ECSインスタンスで実行されるアプリケーションは、インスタンスメタデータにアクセスして、インスタンスにアタッチされているRAM (Resource access Management) ロールのSTS (Security Token Service) トークンを取得できます。 その後、アプリケーションはトークンを使用して、Object Storage Service (OSS) リソース、Key Management Service (KMS) リソース、その他のECSリソースなどのリソースにアクセスできます。
制限事項
VPCに存在するECSインスタンスのみがインスタンスメタデータをサポートします。
ECSインスタンスのメタデータにアクセスするには、インスタンスからメタデータサーバーにアクセスし、インスタンスが [実行中] 状態であることを確認する必要があります。
単一のECSインスタンスからメタデータサーバーに頻繁にアクセスする場合、アクセスリクエストが抑制される可能性があります。
1つのECSインスタンスのメタデータに頻繁にアクセスする場合は、上記の問題を防ぐために、取得したインスタンスメタデータをキャッシュすることをお勧めします。 たとえば、一時的なRAMアクセス資格情報を取得した後、資格情報をキャッシュし、資格情報の有効期限が切れる前に資格情報を再取得することをお勧めします。
インスタンスメタデータの取得
メタデータサービスにアクセスして、インスタンスメタデータを取得できます。 インスタンスメタデータには、インスタンスID、VPC情報、NIC情報が含まれます。
手順
ECSインスタンスまたはインスタンスのメタデータに機密データが含まれている場合は、アクセス制御やデータ暗号化などの適切な方法を使用してデータを保護することを推奨します。
通常モードまたはセキュリティ強化モードでメタデータサーバーにアクセスして、インスタンスメタデータを取得できます。 モードの詳細については、このトピックの「インスタンスメタデータアクセスモード」をご参照ください。
セキュリティ強化モード
メタデータを取得するECSインスタンスにcloud-init 23.2.2がインストールされていることを確認します。 ECSインスタンスにインストールされているcloud-initのバージョンが23.2.2でない場合、cloud-initをバージョン23.2.2にアップグレードします。 ECSインスタンスのcloud-initのバージョンを確認およびアップグレードする方法については、「cloud-initのインストール」をご参照ください。
Linuxインスタンス
# Obtain metadata server access credentials and specify a validity period for the credentials. Do not include the X-Forwarded-For header in the access request. TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<Validity period of the metadata server access credentials>"` # Access the instance metadata. curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/<metadata>
Windowsインスタンス
# Obtain metadata server access credentials and specify a validity period for the credentials. Do not include the X-Forwarded-For header in the access request. $token=Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<Validity period of the metadata server access credentials>"} -Method PUT -Uri http://100.100.100.200/latest/api/token # Access the instance metadata. Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/<metadata>
<メタデータサーバーのアクセス資格情報の有効期間>
: データセキュリティを強化するために、メタデータサーバーのアクセス資格情報の有効期間を指定します。 有効な値: 1 ~ 21600 単位は秒です。上記のコマンドを繰り返し実行して、メタデータサーバーのアクセス資格情報の有効期間内にECSインスタンスのメタデータアイテムにアクセスできます。 有効期間が終了したら、メタデータサーバーのアクセス資格情報を再取得します。 メタデータサーバーのアクセス資格情報を再取得しない場合、インスタンスのメタデータにアクセスできません。
メタデータサーバーのアクセス資格情報はECSインスタンスに関連付けられています。 ECSインスタンスのメタデータサーバーアクセス資格情報をコピーして別のECSインスタンスにアクセスすると、アクセスは拒否されます。
<metadata>
: このパラメーターを、アクセスするメタデータ項目に置き換えます。 インスタンスメタデータ項目の詳細については、このトピックの「インスタンスメタデータ項目」をご参照ください。
通常モード
通常モードでは、リクエストはIPアドレスに基づいて認証されます。 正しくないリバースプロキシ設定やパッチを適用されていないサーバー側のリクエストフォージェリ (SSRF) の脆弱性など、ECSインスタンスに問題が存在する場合、インスタンスにアタッチされているRAMロールのSTS一時アクセス資格情報が漏洩する可能性があります。
Linuxインスタンス
curl http://100.100.100.200/latest/meta-data/<metadata>
Windowsインスタンス (PowerShell)
Invoke-RestMethod http://100.100.100.200/latest/meta-data/<metadata>
<metadata>
: このパラメーターを、アクセスするメタデータ項目に置き換えます。 インスタンスメタデータ項目の詳細については、このトピックの「インスタンスメタデータ項目」をご参照ください。
例
次の例では、ECSインスタンスのVPC IDが取得されます。
セキュリティ強化モード
次の例では、<メタデータサーバーのアクセス資格情報の有効期間>
を180秒に設定します。
Linuxインスタンス
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:180"` curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/vpc-id
Windowsインスタンス
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "180"} -Method PUT –Uri http://100.100.100.200/latest/api/token Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/vpc-id
通常モード
Linuxインスタンス
curl http://100.100.100.200/latest/meta-data/vpc-id
Windowsインスタンス
Invoke-RestMethod http://100.100.100.200/latest/meta-data/vpc-id
インスタンスメタデータのアクセスモード
デフォルトでは、通常モードとセキュリティ強化モードでインスタンスメタデータにアクセスできます。 セキュリティを強化するために、セキュリティ強化モードのみをサポートするようにECSインスタンスを設定できます。
違い通常モードとセキュリティ強化モード
項目 | 通常モード | セキュリティ強化モード |
相互作用パターン | リクエスト-レスポンス。 | セッション指向。 |
認証方法 | 認証には同じVPC内の送信元IPアドレスを使用します。 | 同じVPC内の送信元IPアドレスと、認証にメタデータサーバーのアクセス資格情報を使用します。 メタデータサーバーのアクセス資格情報には、次の特徴があります。
|
アクセス方式 | コマンドを使用して、アクセス資格情報を使用せずにエンドポイントにアクセスできます。 | インスタンスメタデータのセキュリティを強化するには、認証用のメタデータサーバーアクセス資格情報を取得してから、エンドポイントにアクセスします。 |
セキュリティレベル | 低 リクエストはIPアドレスに基づいて認証されます。 攻撃者は、リクエストでソースIPアドレスを偽造して、IPアドレスベースの認証を回避し、SSRF攻撃を開始できます。 その結果、インスタンスメタデータが漏洩する可能性がある。 | 高い インスタンスメタデータにアクセスする前に、認証と承認のために有効なメタデータサーバーアクセス資格情報を取得する必要があります。 メタデータサーバーのアクセス資格情報はECSインスタンスで生成され、ECSインスタンスに関連付けられます。 メタデータサーバーのアクセス資格情報には有効期間があります。 メタデータサーバーのアクセス資格情報は、攻撃者が推測または偽造して、ほとんどのSSRF攻撃から防御するのに役立ちます。 |
cloud-initバージョンの要件 | なし | cloud-init 23.2.2がECSインスタンスにインストールされていることを確認します。 重要
|
インスタンスメタデータアクセスモードの設定
新しいインスタンス
ECSコンソールの使用
ECSコンソールでECSインスタンスを作成すると、Metadata Access Modeパラメーターは自動的に通常モードとセキュリティ強化モードに設定されます。
API操作の呼び出し
RunInstancesまたはCreateInstance操作を呼び出してECSインスタンスを作成する場合、
HttpTokens
パラメーターを使用してインスタンスメタデータアクセスモードを指定します。 HttpTokensパラメータの有効値:optional
: セキュリティ強化モードを強制的に使用しません。 通常モードとセキュリティ強化モードでインスタンスメタデータにアクセスできます。required
: セキュリティ強化モードを強制的に使用します。 このパラメーターを必須に設定すると、通常モードでインスタンスメタデータにアクセスできなくなります。
既存インスタンス
ECSコンソールの使用
インスタンスリストページで、管理するECSインスタンスを見つけます。 [操作] 列で、[] > [インスタンス設定] [インスタンスメタデータアクセス情報の変更] を選択します。
[インスタンスメタデータのアクセスチャネルの有効化] をオンにし、[インスタンスメタデータアクセスモード] パラメーターを設定します。 Instance Metadata Access Modeパラメータの有効値:
通常モード: 通常モードまたはセキュリティ強化モードでインスタンスメタデータにアクセスできます。
セキュリティ強化モード (推奨): セキュリティ強化モードでのみインスタンスメタデータにアクセスできます。
API操作の呼び出し
ModifyInstanceMetadataOptions操作を呼び出して既存のECSインスタンスのメタデータを変更する場合は、
HttpTokens
パラメーターを使用してインスタンスメタデータアクセスモードを指定します。 HttpTokensパラメータの有効値:optional
: セキュリティ強化モードを強制的に使用しません。 通常モードとセキュリティ強化モードでインスタンスメタデータにアクセスできます。required
: セキュリティ強化モードを強制的に使用します。 このパラメーターを必須に設定すると、通常モードでインスタンスメタデータにアクセスできなくなります。
RAMユーザーのメタデータサーバーアクセスモードをセキュリティ強化モードに制限
権限ポリシーを使用して、Alibaba CloudアカウントのすべてのRAMユーザーがRunInstancesまたはCreateInstance操作を呼び出してECSインスタンスを作成する場合、またはModifyInstanceMetadataOptions操作を呼び出して既存のECSインスタンスのメタデータを変更する場合にのみ、セキュリティ強化モードでインスタンスメタデータにアクセスできるようにすることができます。 次のサンプルコードは、ポリシーの内容の例を示しています。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ecs:RunInstances",
"ecs:CreateInstance",
"ecs:ModifyInstanceMetadataOptions"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ecs:SecurityHardeningMode": [
"false"
]
}
}
}
]
}
権限ポリシーの作成方法については、「カスタムポリシーの作成」トピックの [JSON] タブでカスタムポリシーを作成するセクションをご参照ください。
セキュリティ強化モードのみをサポートするECSインスタンスのメタデータにアクセスする前に、cloud-init 23.2.2がインスタンスにインストールされていることを確認してください。 ECSインスタンスのcloud-initのバージョンが23.2.2でない場合、インスタンスが起動できない可能性があります。 ECSインスタンスのcloud-initのバージョンを確認およびアップグレードする方法については、「cloud-initのインストール」をご参照ください。
インスタンスメタデータ項目
メタデータアイテム | 説明 | 例 |
dns-conf/nameservers | インスタンスのドメインネームシステム (DNS) 設定。 | 100.100.XX.XX |
hostname | インスタンスのホスト名。 | iZbp13znx0m0me8cquu **** |
インスタンス /インスタンスタイプ | インスタンスタイプです。 | ecs.g6e.large |
インスタンス /インスタンス名 | インスタンスの名前です。 | iZbp1bfqfsvqzxhmnd5 **** |
image-id | インスタンスの作成に使用されるイメージのID。 | aliyun_3_x64_20G_alibase_20210425.vhd |
image/market-place/product-code | Alibaba Cloud Marketplaceイメージの製品コード。 | cmjj01 **** |
image/market-place/charge-type | Alibaba Cloud Marketplaceイメージの課金方法。 | PrePaid |
instance-id | インスタンスの ID です。 | i-bp13znx0m0me8cquu **** |
mac | インスタンスのメディアアクセス制御 (MAC) アドレス。 インスタンスに複数のNICがある場合、eth0 NICのMACアドレスのみが表示されます。 | 00:16:3e:0f:XX:XX |
network-type | インスタンスのネットワークタイプです。 VPCにデプロイされたインスタンスのみがこのメタデータ項目をサポートします。 | vpc |
network/interfaces/macs/[mac]/network-interface-id | NICの識別子。 [mac] をインスタンスのMACアドレスに置き換えます。 | eni-bp1b2c0jvnj0g17b **** |
ネットワーク /インターフェイス /macs/[mac]/netmask | NICのサブネットマスク。 | 255.255.XX.XX |
ネットワーク /インターフェイス /macs/[mac]/vswitch-cidr-block | NICが接続されているvSwitchのIPv4 CIDRブロック。 | 192.168.XX.XX/24 |
ネットワーク /インターフェイス /macs/[mac]/vpc-cidr-block | NICが属するVPCのIPv4 CIDRブロック。 | 192.168.XX.XX/16 |
ネットワーク /インターフェース /macs/[mac]/private-ipv4s | NICに割り当てられているプライベートIPv4アドレス。 | ["192.168.XX.XX"] |
network/interfaces/macs/[mac]/vswitch-id | NICのセキュリティグループに関連付けられているvSwitchのID。 | vsw-bp1ygryo03m39xhsy **** |
ネットワーク /インターフェイス /macs/[mac]/vpc-id | NICのセキュリティグループが属するVPCのID。 | vpc-bp1e0g399hkd7c8q3 **** |
network/interfaces/macs/[mac]/primary-ip-address | NICのプライマリプライベートIPアドレス。 | 192.168.XX.XX |
ネットワーク /インターフェイス /macs/[mac]/gateway | NICのIPv4ゲートウェイアドレス。 | 192.168.XX.XX |
インスタンス /max-netbw-egress | インスタンスの最大アウトバウンド内部帯域幅。 単位:Kbit/秒 | 1228800 |
ネットワーク /インターフェース /macs/[mac]/ipv4-prefixes | NICに割り当てられているプライベートIPv4プレフィックスリスト。 | 192.168.XX.XX/28 |
ネットワーク /インターフェース /macs/[mac]/ipv6-prefixes | NICに割り当てられているプライベートIPv6プレフィックスリスト。 | 2001:db8:1234:1a00:XXXX::/80 |
ディスク / | ディスクのシリアル番号。 | bp131n0q38u3a4zi **** |
ディスク /[ディスクシリアル]/id | ディスクの ID です。 | d-bp131n0q38u3a4zi **** |
ディスク /[ディスクシリアル] /名前 | ディスクのパラメーター名 | testDiskName |
private-ipv4 | プライマリNICのプライベートIPv4アドレス。 | 192.168.XX.XX |
public-ipv4 | プライマリNICのパブリックIPv4アドレス。 | 120.55.XX.XX |
eipv4 | このメタデータアイテムは、次の情報を取得するために使用されます。
| 120.55.XX.XX |
ntp-conf/ntp-servers | ネットワークタイムプロトコル (NTP) サーバーのアドレス。 | ntp1.aliyun.com |
owner-account-id | インスタンスが属するAlibaba CloudアカウントのID。 | 1609 **** |
region-id | インスタンスのリージョン ID です。 | cn-hangzhou |
zone-id | インスタンスのゾーン ID です。 | cn-hangzhou-i |
public-keys/[keypair-id]/openssh-key | インスタンスの公開キー。 このメタデータアイテムは、インスタンスの作成中に公開キーがインスタンスにバインドされている場合にのみ使用できます。 | ssh-rsa **** 3NzaC1yc2EAAAADAQABAAABAQDLNbE7pS **** @ ****.com |
serial-number | インスタンスのシリアル番号。 | 4acd2b47-b328-4762-852f-998 **** |
source-address | YUMまたはAPTイメージリポジトリのアドレス。 Linuxインスタンスのパッケージ管理ソフトウェアは、イメージリポジトリから更新を取得できます。 | http://mirrors.cloud.aliyuncs.com |
kms-server | WindowsインスタンスがWindowsをアクティブ化するために使用するKey Management Service (KMS) サーバー。 | kms.cloud.aliyuncs.com |
wsus-server/wu-server | Windowsインスタンスの更新サーバー。 | http://update.cloud.aliyuncs.com |
wsus-server/wu-status-server | Windowsインスタンスの更新ステータスを監視するサーバー。 | http://update.cloud.aliyuncs.com |
vpc-id | インスタンスが属する VPC の ID。 | vpc-bp1e0g399hkd7c8q **** |
vpc-cidr-block | インスタンスが属するVPCのCIDRブロック。 | 192.168.XX.XX/16 |
vswitch-cidr-block | インスタンスが接続されているvSwitchのCIDRブロック。 | 192.168.XX.XX/24 |
vswitch-id | インスタンスが接続されているvSwitchのID。 | vsw-bp1ygryo03m39xhsy **** |
ram/security-credentials/[role-name] | インスタンスのRAMロール。 RAMロールがインスタンスにアタッチされている場合、 |
|
instance/spot/termination-time | プリエンプティブルインスタンスのオペレーティングシステムで設定されている停止時間とリリース時間。 時刻はyyyy-MM-ddThh:mm:ssZ形式です。 時刻は UTC で表示されます。 | 2020-04-07T17:03:00Z |
instance/virtualization-solution | ECS仮想化ソリューション。 Virt 1.0とVirt 2.0がサポートされています。 | ECSヴァルト |
instance/virtualization-solution-version | ECS仮想化ソリューションのバージョン。 | 2.0 |