インスタンス内からのインスタンス・メタデータの取得
Roving Edgeデバイスでは、インスタンス・メタデータ・サービス(IMDS)は、実行中のインスタンスに関する情報を、そのインスタンスにログインしているユーザーに提供します。また、IMDSは、様々なシステム初期化タスクに使用できる情報もcloud-initに提供します。
IMDSメタデータにアクセスするには、Oracleによって提供されるインスタンス・イメージを使用します。
IMDSメタデータには、次のようなインスタンス情報が含まれます。
-
ユーザーがインスタンスにログインできるようにするSSH公開キー
-
インスタンス・アタッチ済VNIC、VNIC ID
-
インスタンスCIDRブロック
一般に、IMDSインスタンス・メタデータには次の情報が含まれます。
-
デバイス・コンソールのインスタンスの詳細ページおよびインスタンス
getCLIの出力に表示される情報と同じです。 -
インスタンス
launchコマンドの--metadata、--extended-metadata、--ssh-authorized-keys-fileおよび--user-data-fileオプションを使用して、インスタンスに追加するカスタム情報。このメタデータは、インスタンスの起動後に更新できません。インスタンスにログインしたユーザーの場合、インスタンス・メタデータは読取り専用です。
IMDSバージョン2エンドポイントへのアップグレード
インスタンス・メタデータのサービスは、バージョン1とバージョン2という2つのバージョンで使用できます。
メタデータ・リクエストのセキュリティを強化するには、イメージでサポートされている場合、すべてのアプリケーションをアップグレードしてIMDSバージョン2エンドポイントを使用します。次に、IMDSバージョン1エンドポイントの使用を無効にします。
IMDSバージョン2エンドポイント(IMDSv2)は、「ゲスト・オペレーティング・システム・マトリックス」にリストされているOracle Linuxイメージでサポートされています。その他のプラットフォーム・イメージおよびその他のほとんどのイメージは、IMDSv2をサポートしていません。
インスタンスごとに、次のステップを実行してIMDSv2にアップグレードします。
-
IMDSv1リクエストを行っているアプリケーションを識別します。
たとえば、
cloud-initは/v#インスタンス・エンドポイントにリクエストを作成します。 -
特定されたアプリケーションを移行して、IMDSv2エンドポイントをサポートします。
/v2エンドポイントを使用する場合は、「Authorization: Bearer Oracle」ヘッダーを含める必要があります。IMDSインスタンス・メタデータの取得の例を参照してください。 -
IMDSv1エンドポイントを無効にします。
インスタンスの作成の説明に従って、次のいずれかのステップを実行します。
-
インスタンスの詳細ページの「インスタンスの詳細」で、「レガシー・インスタンス・メタデータ・サービス・エンドポイント」の値を確認します。「レガシー・インスタンス・メタデータ・サービス・エンドポイント」の値が「有効」の場合は、「コントロール」メニューで「編集」を選択し、「レガシー・インスタンス・メタデータ・サービス・エンドポイントが無効」のボックスを選択します。
-
instance listまたはinstance getからの出力で、instance-optionsの下にあるare-legacy-imds-endpoints-disabledの値を確認します。are-legacy-imds-endpoints-disabledの値がnullまたはfalseの場合は、instance updateコマンドを使用して次のオプションを指定します。--instance-options '{"areLegacyImdsEndpointsDisabled": true}'
レガシー(
v1)エンドポイントへの今後のリクエストは、404 not foundエラーで拒否されます。 -
IMDSインスタンス・メタデータの取得
IMDSインスタンス・メタデータを取得するには、次のステップを実行します。
-
インスタンスにログインします。
-
cURLコマンドを使用して、HTTPエンドポイントからメタデータ情報を取得します。
情報は、169.254.169.254をリスニングするHTTPエンドポイントを介して提供されます。インスタンスに複数のVNICがある場合は、プライマリVNICを使用してリクエストを送信する必要があります。
instanceコマンドを使用して、インスタンス・メタデータを取得します。vnicsコマンドを使用して、VNICデータを取得します。次の例に示すように、
/v2エンドポイントを使用している場合は、「認可: Bearer Oracle」ヘッダーを含める必要があります。例: インスタンス・メタデータ
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/instance/ { "availabilityDomain": "AD-1", "faultDomain": "FAULT-DOMAIN-1", "compartmentId": "ocid1.compartment.unique_ID", "displayName": "dev1", "hostname": "hostname", "id": "ocid1.instance.unique_ID", "image": "ocid1.image.unique_ID", "metadata": { "ssh_authorized_keys": "public_SSH_key" }, "region": "PCA", "canonicalRegionName": "PCA", "ociAdName": "PCA", "regionInfo": null, "shape": "VM.PCAStandard.E5.Flex", "state": "RUNNING", "timeCreated": 1634943279000, "agentConfig": null }単一の値を取得するには、次の例に示すようにキー名を指定します。
例: VNICメタデータ
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/vnics/ [ { "vnicId": "ocid1.vnic.unique_ID", "privateIp": "privateIp", "vlanTag": 0, "macAddr": "00:13:97:9f:16:32", "virtualRouterIp": "virtualRouterIp", "subnetCidrBlock": "subnetCidrBlock" } ]複数のVNICの1つのデータすべてを表示するには、そのVNICデータの配列索引を指定します。または、指定したVNICの単一値を取得できます:
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/vnics/0/privateIp privateIp