インスタンス内のインスタンス・メタデータの取得
Compute Cloud@Customerでは、インスタンス・メタデータ・サービス(IMDS)は、実行中のインスタンスに関する情報を、そのインスタンスにログインしているユーザーに提供します。また、IMDSは、様々なシステム初期化タスクに使用できる情報もcloud-initに提供します。
IMDSメタデータにアクセスするには、Oracleによって提供されるインスタンス・イメージを使用します。
IMDSメタデータには、次のようなインスタンス情報が含まれています:
-
ユーザーがインスタンスにログインできるようにするSSH公開キー
-
インスタンスのアタッチされたVNIC、VNIC ID
-
インスタンスCIDRブロック
一般に、IMDSインスタンス・メタデータには次の情報が含まれます。
-
Compute Cloud@Customerコンソールおよびインスタンス
get
CLIの出力でインスタンスの詳細ページに表示される情報と同じ情報。 -
インスタンス
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
エンドポイントを使用する場合は、「認可: 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のいずれかのすべてのデータを表示するには、その VNICデータのアレイインデックスを指定します。または、その指定された VNICの単一値を取得できます。
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/vnics/0/privateIp privateIp