執筆時点でTOK04でもメタデータサービスの構成は出来ましたが、実際に利用すると「Service unavailable: Unable to connect to the backend service. Please try again later or contact support if the issue persists」と、バックエンドに接続できないというエラーが返ってきました。
サポートに確認したところ、現在、メタデータサービスが実際に稼働しているのは「"in-mum-1", "in-mum-2", "eu-de-1", "eu-de-2", "mon01", "che02", "che03", "mad02", "mad04"」とのことです。
今回の記事では、構成のスクリーンショットはTOK04で取得しましたが、実際の検証はeu-de-1で実施しました。
今回も「(108): ホスト障害時の自動リモート再起動の無効化」に続いて、やはり、リリースノートの「2026年6月24日」分に記載されていた機能拡張からの紹介です。
今回の検証対象はこちらです。
メタデータサービスおよび信頼済みプロファイルのサポート
メタデータサービスを利用すると、インスタンスのメタデータにアクセスしたり、信頼済みプロファイルを使用して、API キーを管理することなく IAM 対応サービスを呼び出したりすることができます。 詳細については、「 Power Virtual Server のメタデータサービスの設定と管理 」を参照してください。
つまり、下記の二つの事が可能です。
- VSIインスタンスのメタ情報の取得
- 信頼済みプロファイルを使用して、API キーを管理することなくIAM対応サービスを呼び出す
「VSIインスタンスのメタ情報の取得」では、OSからは見えていないPowerVSインスタンスとしてのメタ情報が取得できます。
今回の方法で取得できるのは、リクエストを送っているVSIインスタンスのメタ情報です。他のVSIインスタンスの情報は取得できません。
「信頼済みプロファイルを使用」は、PowerVS上からトラステッドプロファイルを利用可能にする機能です。
これまで、COSなどのサービスを呼び出す場合、access keyとsecret keyで認証するHMAC認証や永続的なAPIキーを使ったIAM認証が使われてきました。
しかし、これらは、有効期限が設定できず、漏洩に弱いのが課題でした。
トラステッドプロファイルを利用する場合、APIトークンの有効時間を自由に設定できるため、漏洩対策が強化できます。
今回は「VSIインスタンスの情報の取得」を検証します。
設定
「一般」セクションの「拡張構成」を展開し「Metadata service」を有効にします。
「信頼済みプロファイルを使用」する場合は「Select trusted profile」をクリックすると、デフォルトとして利用するトラステッドプロファイルが、構成済みのものから選択が可能です。
もちろん、デフォルトを指定しないで利用時にトラステッドプロファイルを直接指定することもできます。
構成
メタデータサービスでは、VSI上のIPアドレス「169.254.169.253」を持つリンクローカルネットワークを使用し、「169.254.169.254」にあるメタデータサービスのエンドポイントに接続します。
新規にデプロイする場合
そのため「Metadata service」を有効にして新規にデプロイすると、そのための回線記述が構成され、「169.254.169.253」というIPアドレスが自動的に設定されます。
「169.254.169.252/30」のルートが追加されています。「/30」なので、可能な接続先は「169.254.169.254」だけです。
このIPアドレスは、どのインスタンスでも共通で、ポータル上は表示されません。
既存インスタンスを構成する場合
インスタンスがパワーオフであれば、「仮想サーバー・インスタンスの詳細」の編集で、「Metadata service」を有効に変更できます。
ただし、回線記述とIPアドレス設定は自動的には行われません。手動で構成する必要があります。
手順は「PowerVS IBM i 日記(53): 後からPowerVS IBM i にネットワークを追加しても自動でLINDは作成されないし IP アドレスも追加されない」が参考になると思います。
ただし、前述のようにメタデータサービス用のネットワーク資源は、ポータルに表示されず、MACアドレスも事前には確認できません。
「Metadata service」を有効にする前と後で「WRKHDWRSC *CMN」を実行し、追加されたリソースを確認するのが良いでしょう。
接続確認
「169.254.169.254」への接続を確認します。
PING RMTSYS('169.254.169.254')
メタデータサービスの呼び出し
環境の準備
今回はpase環境からcurlとjqを使って確認します。
ACSを使ってcurlとjqを導入します。
今回の環境はパブリックネットワークへの直接のインターフェースを持っていません。
しかし「PowerVSからインターネットへのアウトバウンド通信をマネージドサービスのみで実現する」の構成で、パブリックネットワークへ接続できるように構成しました。
パブリックネットワークへ接続アクセスが無い場合は「SSH トンネリング」の接続でACSを使ったOSSの導入を試してください。
QP2TERMだとpase環境の使い勝手が不十分なので、IBM i上にsshで接続できる環境を整えて、クライアントからsshで直接接続します。
今回は「PowerVS IBM i 日記(78): PER 環境の利用(6) - VPN for VPC(Client to Site) で PowerVSに 接続する」の構成で、クライアントからVPNでPowerVS上のIBM iに接続しています。
C:\Users\6onoda>ssh ONODA@192.168.170.12
好みですが、bashに切り替えました。
OSSパッケージは「/QOpenSys/pkgs/bin」に導入されますので、PATHに追加しておきます。
$ bash
bash-5.2$ export PATH=/QOpenSys/pkgs/bin:$PATH
bash-5.2$ echo $PATH
/QOpenSys/pkgs/bin:/QOpenSys/usr/bin:/usr/ccs/bin:/QOpenSys/usr/bin/X11:/usr/sbin:.:/usr/bin
export PATH=/QOpenSys/pkgs/bin:$PATH
curlとjqが利用可能になりました。
bash-5.2$ curl -V
curl 8.12.0 (powerpc-ibm-os400) libcurl/8.12.0 OpenSSL/3.0.19 zlib/1.3.1 brotli/1.0.9 libidn2/2.3.0 libssh2/1.11.1
Release-Date: 2025-02-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli HSTS HTTPS-proxy IDN IPv6 Largefile libz NTLM SSL threadsafe TLS-SRP UnixSockets
bash-5.2$ jq -V
jq-1.8.1
メタデータサービスの利用
Power Virtual Servers Metadata Service API
メタデータサービスのAPIのDocsは下記になります。
Endpoint URL
メタデータサービスのAPIのEndpoint URLは下記になります。
一旦、変数に入れましょう
pvs_api_endpoint=https://api.metadata.power-iaas.cloud.ibm.com
bash-5.2$ pvs_api_endpoint=https://api.metadata.power-iaas.cloud.ibm.com
bash-5.2$ echo $pvs_api_endpoint
https://api.metadata.power-iaas.cloud.ibm.com
instance_identity_tokenの取得
メタデータサービスを利用するのにはinstance_identity_tokenが必要です。
instance_identity_tokenを取得し、jqを使って切り出します。
有効期限が指定できます。今回は300秒(5分間)だけ有効なtokenになっています。
identity_token=` \
curl -X PUT "$pvs_api_endpoint/identity/v1/token" \
-H 'content-type: application/json' \
-H "Metadata-Flavor: ibm" \
-H "Accept: application/json" \
-d '{"expires_in": 300}' \
| \
jq -r '(.access_token)'`
-bash-5.2$ identity_token=` \
curl -X PUT "$pvs_api_endpoint/identity/v1/token" \
-H 'content-type: application/json' \
-H "Metadata-Flavor: ibm" \
-H "Accept: application/json" \
-d '{"expires_in": 300}' \
| \
jq -r '(.access_token)'`
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2041 100 2022 100 19 3668 34 --:--:-- --:--:-- --:--:-- 3704
-bash-5.2$ echo $identity_token
eyJhbGciOiJSUzI1NiIsImtpZCI6IlBWUy1DUl9ldS1kZV83YmQxYTlkY2RmOTRjYjUwIiwidHlwIjoiSldUIn0.eyJ3b3Jrc3BhY2VzIjpbeyJuYW1lIjoib25vZGEtZnJhMDQiLCJjcm4iOiJjcm46djE6Ymx1ZW1peDpwdWJsaWM6cG93ZXItaWFhczpldS1kZS0xOmEvMWNmMzVmODYzNGNiNDE5NGFlZGI3Yzg5NjZhZDU2YjI6NDQ2ZjU5YzctNTI2Ni00YzY1LTllYzYtNGEzYmYw...(略)
VSIインスタンスのメタ情報の取得
取得したinstance_identity_tokenを使って「/metadata/v1/instance」にアクセスするとVSIインスタンスのメタ情報が取得できます。
jqを使って出力を整形します。
curl -X GET "$pvs_api_endpoint/metadata/v1/instance" \
-H "Metadata-Flavor: ibm" \
-H "Authorization: Bearer $identity_token" \
| jq .
OSからの情報としては取得できないインスタンスのメタ情報が確認できました。
-bash-5.2$ curl -X GET "$pvs_api_endpoint/metadata/v1/instance" \
-H "Metadata-Flavor: ibm" \
-H "Authorization: Bearer $identity_token" \
| jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2737 100 2737 0 0 208 0 0:00:13 0:00:13 --:--:-- 711
{
"cloudResourceName": {
"account": "0123456789abcdefghijk0123456789l",
"crn": "crn:v1:bluemix:public:power-iaas:eu-de-1:a/1cf35f8634cb4194aedb7c8966ad56b2:446f59c7-5266-4c65-9ec6-4a3bf0a54ffb:pvm-instance:a9648a73-5084-4088-943d-2ba58d3f8245",
"location": "eu-de-1",
"resource": "a9648a73-5084-4088-943d-2ba58d3f8245",
"resourceType": "pvm-instance",
"serviceInstance": "446f59c7-5266-4c65-9ec6-4a3bf0a54ffb",
"workspaceCRN": "crn:v1:bluemix:public:power-iaas:eu-de-1:a/1cf35f8634cb4194aedb7c8966ad56b2:446f59c7-5266-4c65-9ec6-4a3bf0a54ffb::",
"workspaceName": "onoda-fra04"
},
"consoleLanguage": {
"code": "1399",
"language": "1399 Japanese (Latin Unicode Extended)"
},
"creationDate": "2026-07-28T08:53:20Z",
"defaultTrustedProfile": {
"target": {}
},
"diskSize": 100,
"effectiveProcessorCompatibilityMode": "POWER11",
"fault": {},
"health": {
"lastUpdate": "2026-07-28T09:00:21.776427",
"status": "OK"
},
"imageID": "b898b393-3219-4778-848c-29a5e9e9a290",
"location": {
"region": "eu-de-1",
"regionDisplayName": "Frankfurt 04",
"type": "zone",
"url": "https://eu-de.power-iaas.cloud.ibm.com"
},
"maxmem": 16,
"maxproc": 1,
"memory": 2,
"metadataService": {
"enabled": true
},
"minmem": 2,
"minproc": 0.25,
"networks": [
{
"crn": "crn:v1:bluemix:public:power-iaas:eu-de-1:a/1cf35f8634cb4194aedb7c8966ad56b2:446f59c7-5266-4c65-9ec6-4a3bf0a54ffb:network:d2680e5e-c110-484c-86ff-cf5f9ab00ab8",
"href": "/pcloud/v1/cloud-instances/446f59c7-5266-4c65-9ec6-4a3bf0a54ffb/pvm-instances/a9648a73-5084-4088-943d-2ba58d3f8245/networks/d2680e5e-c110-484c-86ff-cf5f9ab00ab8",
"ipAddress": "192.168.170.12",
"macAddress": "fa:16:3e:6b:ae:35",
"networkID": "d2680e5e-c110-484c-86ff-cf5f9ab00ab8",
"networkInterfaceID": "d2d6f03c-3be5-468f-9b5f-edcc3a1afdc6",
"networkName": "fra04-sn",
"type": "fixed",
"version": 4
}
],
"operatingSystem": "V7R6M0 450 1",
"osType": "ibmi",
"pinPolicy": "none",
"placementGroup": "none",
"preferredProcessorCompatibilityMode": "POWER11",
"procType": "shared",
"processors": 0.25,
"pvmInstanceID": "a9648a73-5084-4088-943d-2ba58d3f8245",
"sapProfile": {},
"serverName": "fra04-76-84",
"softwareLicenses": {},
"srcs": [
[
{
"src": "C6004036",
"timestamp": "2026-07-28T08:56:32Z"
},
{
"src": "03B00000",
"timestamp": "2026-07-28T08:56:32Z"
}
]
],
"status": "ACTIVE",
"storagePool": "General-Flash-75",
"storagePoolAffinity": true,
"storageType": "any",
"sysType": "s1122",
"updatedDate": "2026-07-28T08:53:20Z",
"virtualCores": {
"assigned": 1,
"max": 1,
"min": 1
},
"virtualSerialNumber": {
"serial": "VS02VRQ",
"softwareTier": "P05"
},
"volumes": [
{
"crn": "crn:v1:bluemix:public:power-iaas:eu-de-1:a/1cf35f8634cb4194aedb7c8966ad56b2:446f59c7-5266-4c65-9ec6-4a3bf0a54ffb:volume:fe61c1db-2d6b-46c2-b2dd-a2601bc42793",
"diskType": "tier1",
"name": "fra04-76-84-a9648a73-00048f0b-boot-0",
"size": 100,
"volumeID": "fe61c1db-2d6b-46c2-b2dd-a2601bc42793",
"wwn": "60050768108100F36800000000008ECC"
}
]
}
instance_identity_tokenの有効期間切れ
今回のinstance_identity_token有効期間は300秒(5分)に設定しました。
有効期間が切れたinstance_identity_tokenを利用すると「Authentication failed: The JWT token has expired. Please obtain a new token」が返ってきました。
-bash-5.2$ curl -X GET "$pvs_api_endpoint/metadata/v1/instance" -H "Metadata-Flavor: ibm" -H "Authorization: Be
arer $identity_token"
Authentication failed: The JWT token has expired. Please obtain a new token
トラステッドプロファイルを利用したIAM access tokenの取得
今回は検証していませんが、トラステッドプロファイルを使ってIAM access tokenの取得することもできます。
そうすればAPIキーを保持しなくても、そのIAM access tokenを使ってCOSなどのIAM対応サービスにアクセスすることができます。
デフォルトとして指定したトラステッドプロファイルを使ってIAM access tokenを取得する場合、このようなリクエストになります。
curl -X POST "$pvs_api_endpoint/identity/v1/iam_tokens" \
-H "Metadata-Flavor: ibm" \
-H "Authorization: Bearer $identity_token" \
-H "Content-Type: application/json" \
-d '{ }'
デフォルトとして指定していないトラステッドプロファイルを使う場合は、id、crn、nameのいずれかでパラメーターとしてトラステッドプロファイルを指定します。
-d '{ "trusted_profile": { "id" | "crn" | "name" : "xxx" } }
当日記のIndexはこちらです。
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。








