インスタンス・メタデータ・サービスの使用
インスタンス ID アクセストークンを取得すると、メタデータサービスにアクセスして仮想サーバーインスタンスのメタデータを取得できます。 インスタンスのメタデータには、初期化データ、ネットワーク・インターフェイス、ボリューム・アタッチメント、パブリックSSHキー、配置グループなどの情報が含まれる。
インスタンス・メタデータ・サービスにAPIリクエストを行うと、監査に使用できるイベントがトリガーされる。 詳しくは、『インスタンス・メタデータ・サービス・イベント』を参照してください。
開始前に
デフォルトでは、メタデータ・サービスは無効になっています。 有効にするには、「 メタデータ・サービスを有効にする 」トピックの手順に従います。
Windowsユーザーは、メタデータ・サービスにアクセスして使用するための特別な要件がある。 詳細については、 メタデータ・サービスを使用するためのウィンドウズ・サーバーのセットアップを 参照してください。
メタデータ・サービスにアクセスしてインスタンスIDのアクセストークンを作成する
インスタンス・メタデータ・サービスにアクセスするには、まずインスタンスIDアクセストークンを取得する必要があります。 仮想サーバーから メタデータサービス API へ PUT /instance_identity/v1/token
リクエストを行います。
インスタンスとメタデータ・サービス間の通信がホストを離れることはない。 インスタンス内からトークンを取得します。 インスタンス・メタデータ・サービスへのセキュアなアクセスがインスタンスで有効になっている場合は、「http」プロトコルの代わりに「https」プロトコルを使用します。
リクエストでは、トークンの有効期限を指定できます。 デフォルトの有効期限は5分ですが、5秒から1時間の間で任意の値を指定できます。
curl -X PUT "http://api.metadata.cloud.ibm.com/instance_identity/v1/token?version=2025-04-22" -H "Metadata-Flavor: ibm" -d '{"expires_in": 3600}'
API レスポンスには、インスタンス ID アクセストークンが含まれます。 インスタンス ID アクセストークンの文字列、作成日時、有効期限、設定した有効期限が表示されます。 このトークンを使ってメタデータ・サービスにアクセスしたり、アプリケーションがIAM対応サービスにアクセスするためのIAMトークンを生成したりできる。 詳しくは、『インスタンス識別アクセス・トークンから IAM トークンを生成する』を参照してください。
{
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlZTSS1DUl91cy1lYXN0X2I5...",
"created_at": "2025-04-22T11:08:39.363Z",
"expires_at": "2025-04-22T11:13:39.363Z",
"expires_in": 3600
}
次のIAMトークン作成リクエストで使用する環境変数を作成することができます。 以下の例を参照してください。
instance_identity_token=`curl -X PUT "http://api.metadata.cloud.ibm.com/instance_identity/v1/token?version=2024-11-12" -H "Metadata-Flavor: ibm" -d '{"expires_in": 3600}' | jq -r '(.instance_identity_token)'`
この例では、 jq
をパーサーとして使用しています。 jq
は、 MIT ライセンスの 下でライセンスされたサードパーティツールです。インスタンスの作成時に利用可能なすべての VPC イメージにプリインストールされているとは限りません。 使用する前に jq
をインストールするか、他のパーサーを使用する必要があるかもしれません。
インスタンス ID アクセストークンから IAM トークンを生成する
アカウントの IBM Cloud IAM対応サービスにアクセスするには、信頼できるプロファイル情報を使用して、インスタンスのIDアクセストークンからIAMトークンを生成できます。 コンピュートリソースIDの 信頼されたプロファイルを 使用して、 IBM Cloud® IAM IDを仮想サーバーインスタンスに割り当てることができます。
IAMトークンを生成した後は、IAMシークレットをインスタンスに管理・配布することなく、それを使ってIAM対応サービスにアクセスできる。 トークンは複数回再利用できます。 トラステッド・プロファイルは、インスタンスの作成時にリンクすることも、要求本体で指定することもできます。
POST /instance_identity/v1/iam_token
、信頼できるプロファイルのIDを指定する。 要求の例を以下に示します。
iam_token=`curl -X POST "$vpc_metadata_api_endpoint/instance_identity/v1/iam_token?version=2025-04-22" -H "Authorization: Bearer $instance_identity_token" -d '{
"trusted_profile": {
"id": "Profile-8dd84246-7df4-4667-94e4-8cede51d5ac5"
}
}' | jq -r '(.iam_token)'`
API レスポンスには IAM トークンが表示される。
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aGVfYmVzdCI6I8...",
"created_at": "2025-04-22T14:10:15Z",
"expires_at": "2025-04-22T15:10:15Z",
"expires_in": 3600
}
詳細については、「 信頼済みプロファイルを使用してIAM対応サービスを要求する 」を参照してください。
実行中の仮想サーバーインスタンスからインスタンスメタデータを取得する
インスタンス・メタデータ・サービスを使用して、インスタンス、初期化情報、SSH 鍵、および配置グループに関するメタデータを取得します。
インスタンス情報の取得
インスタンスの詳細情報を取得するために GET "/metadata/v1/instance"
リクエストを行う。
curl -X GET "$vpc_metadata_api_endpoint/metadata/v1/instance?version=2025-04-22" -H "Authorization: Bearer $instance_identity_token"
応答には、ネットワーク・インターフェース、コンピュート・プロファイル、ボリューム接続を含む、インスタンスに関するすべての詳細がリストされます。
{
"boot_volume_attachment": {
"id": "a8a15363-a6f7-4f01-af60-715e85b28141",
"name": "my-boot-volume-attachment",
"volume": {
"crn": "crn:[...]",
"id": "49c5d61b-41e7-4c01-9b7a-1a97366c6916",
"name": "my-boot-volume"
}
},
"created_at": "2021-10-19T16:11:57Z",
"crn": "crn:[...]",
"disks": [],
"id": "eb1b7391-2ca2-4ab5-84a8-b92157a633b0",
"image": {
"crn": "crn:[...]",
"id": "9aaf3bcb-dcd7-4de7-bb60-24e39ff9d366",
"name": "my-image"
},
"memory": 8,
"name": "my-instance",
"network_interfaces": [
{
"id": "7ca88dfb-8962-469d-b1de-1dd56f4c3275",
"name": "my-network-interface",
"primary_ipv4_address": "10.0.0.32",
"resource_type": "network_interface",
"subnet": {
"crn": "crn:[...]",
"id": "bea6a632-5e13-42a4-b4b8-31dc877abfe4",
"name": "my-subnet",
"resource_type": "subnet"
}
}
],
"primary_network_interface": {
"id": "7ca88dfb-8962-469d-b1de-1dd56f4c3275",
"name": "my-network-interface",
"primary_ipv4_address": "10.0.0.32",
"resource_type": "network_interface",
"subnet": {
"crn": "crn:[...]",
"id": "bea6a632-5e13-42a4-b4b8-31dc877abfe4",
"name": "my-subnet",
"resource_type": "subnet"
}
},
"profile": {
"name": "bx2-2x8"
},
"resource_type": "instance",
"vcpu": {
"architecture": "amd64",
"count": 2
},
"volume_attachments": [
{
"id": "a8a15363-a6f7-4f01-af60-715e85b28141",
"name": "my-boot-volume-attachment",
"volume": {
"crn": "crn:[...]",
"id": "49c5d61b-41e7-4c01-9b7a-1a97366c6916",
"name": "my-boot-volume"
}
},
{
"id": "e77125cb-4df0-4988-a878-531ae0ae0b70",
"name": "my-volume-attachment-1",
"volume": {
"crn": "crn:[...]",
"id": "2cc091f5-4d46-48f3-99b7-3527ae3f4392",
"name": "my-data-volume"
}
}
],
"vpc": {
"crn": "crn:[...]",
"id": "f0aae929-7047-46d1-92e1-9102b07a7f6f",
"name": "my-vpc",
"resource_type": "vpc"
},
"zone": {
"name": "us-south-1"
}
}
インスタンス初期化情報の取得
インスタンスの初期化情報をプログラムで取得するには、 GET /metadata/v1/instance/initialization
。 以下の例を参照してください。
curl -X GET "$vpc_metadata_api_endpoint/metadata/v1/instance/initialization?version=2025-04-22" -H "Authorization: Bearer $instance_identity_token" | jq -r '(.user_data)'
この例では、コマンドの返り値はユーザー・データであり、 jq
によって抽出され、 user_data
環境変数に置かれる。
レスポンスは、インスタンスの初期化時に使用されたパブリックSSHキーをリストアップし、インスタンスのプロビジョニング時に利用可能になったその他のユーザーデータを抽出する。 レスポンスには、SSH鍵を識別する SHA256。
{
"keys": [
{
"crn": "crn:[...]",
"fingerprint": "SHA256:RJ+YWs3rupwGFiJuLqY43tvmdeLOUjcIc9cA6IR8n8E",
"id": "dadae729-1d81-4a13-966e-f5d92699f103",
"name": "my-key-1",
"resource_type": "key"
}
],
"user_data": "Content-Type: multipart/form-data; boundary=3efa30189c9e0e8ebc24a4decbbf4c2be7b26120c1cdd7cb7bc2ecb0c07c\nMIME-Version: 1.0\n\n--3efa30189c9e0e8ebc24a4decbbf4c2be7b26120c1cdd7cb7bc2ecb0c07c\nContent-Type: text/cloud-config\n\n#cloud-config\ndisable_root: false\nchpasswd:\n list: |\n root:genes1s\n expire: false\nusers:\n- default\n- name: root\n lock-passwd: false\n ssh_pwauth: true\n\n--3efa30189c9e0e8ebc24a4decbbf4c2be7b26120c1cdd7cb7bc2ecb0c07c--"
}
詳細はAPIリファレンスを参照のこと: 初期化情報の取得
その他のインスタンス・メタデータ・メソッド
次の表は、インスタンスに関する特定の情報を取得するために実行できるAPI GETリクエストのメソッドをさらに示したものです。
API エンドポイント | 説明 |
---|---|
/metadata/v1/instance/cluster_network_attachments |
クラスターネットワークのアタッチメントを一覧表示 |
/metadata/v1/instance/cluster_network_attachments/{id} |
クラスタ・ネットワーク・アタッチメントの取得 |
/metadata/v1/instance/network_attachments |
ネットワークの添付ファイルを一覧表示 |
/metadata/v1/instance/network_attachments/{id} |
ネットワーク添付ファイルの取得 |
/metadata/v1/instance/network_interfaces |
インスタンスのすべてのネットワーク・インターフェースのメタデータをリストします。 |
/metadata/v1/instance/network_interfaces/{id} |
ID ごとのネットワーク・インターフェースのメタデータを取得します。 |
/metadata/v1/instance/volume_attachments |
インスタンスのすべてのボリューム接続のメタデータをリストします。 |
/metadata/v1/instance/volume_attachment/{id} |
ID ごとのボリューム接続のメタデータを取得します。 |
必要なパラメータや例についての詳細は、 メタデータ・サービスAPIリファレンス・ガイドを 参照のこと。
SSH鍵のメタデータを取得する
インスタンスに設定されているすべてのSSH鍵に関する情報を取得するために、 GET /metadata/v1/keys
。
curl -X GET "$vpc_metadata_api_endpoint/metadata/v1/keys?version=2025-04-22" -H "Authorization: Bearer $instance_identity_token"
出力例は1つのSSHキーを示している。
{
"keys": [
{
"created_at": "2024-10-19T16:39:23.000Z",
"crn": "crn:bluemix:public:is:us-south:a/a1234567::key:r006-44e5e06b-9450-4f5f-a9be-96feebf770d8",
"fingerprint": "SHA256:lZmocJFsWfJcIl8Jdp8r6Ak8gzMqxrFb9UtwWCk27CM",
"id": "r006-44e5e06b-9450-4f5f-a9be-96feebf770d8",
"length": 4096,
"name": "my-key-1",
"public_key": "ssh-rsa AAAAB...n",
"resource_type": "key",
"type": "rsa"
}
]
}
複数のSSH鍵を持っている場合は、いずれかのSSH鍵のIDで GET /metadata/v1/keys/{id}
。 応答は、指定されたSSH鍵に関する情報を提供する。
配置グループに関するメタデータの取得
インスタンスに設定された配置グループに関する情報を取得するために、 GET /metadata/v1/placement_groups
リクエストを行う。 この例では、コマンドの返り値は、配置グループのリストである。
curl -X GET "$vpc_metadata_api_endpoint/metadata/v1/placement_groups?version=2025-04-22" -H "Authorization: Bearer $instance_identity_token" -d '{"start": "first","limit": 50}'
出力例では、プレースメント・グループを1つだけ示している。
{
"first": {
"href": "http://169.254.169.254/v1/placement_groups?limit=50"
},
"limit": 50,
"placement_groups": [
{
"created_at": "2022-10-12T19:55:00Z",
"crn": "crn:[...]",
"id": "r018-418fe842-a3e9-47b9-a938-1aa5bd632871",
"lifecycle_state": "stable",
"name": "my-placement-group",
"resource_type": "placement_group",
"strategy": "host_spread"
}
],
"total_count": 1
}
インスタンスで使用されている特定の配置グループの詳細を要求することもできます。 特定の配置グループの情報を取得するには、 GET "/metadata/v1/placement_groups/{id}"
リクエストを行い、 {id}
を配置グループの実際の ID に置き換える。
次のステップ
- 実行中のインスタンスからメタデータにアクセスし、そのメタデータを使用して新しいインスタンスをブートストラップします。
- トラステッド・プロファイルを作成し、それを使用して IAM 対応サービスにアクセスします。