インスタンス内のインスタンス・メタデータの取得

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にアップグレードします。

  1. IMDSv1リクエストを行っているアプリケーションを識別します。

    たとえば、cloud-initは、/v#インスタンス・エンドポイントへのリクエストを行います。

  2. IMDSv2エンドポイントをサポートするように、識別されたアプリケーションを移行します。

    /v2エンドポイントを使用する場合は、「認可: Bearer Oracle」ヘッダーを含める必要があります。IMDSインスタンス・メタデータの取得の例を参照してください。

  3. 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インスタンス・メタデータを取得するには、次のステップを実行します。

  1. インスタンスにログインします。

  2. 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": "PCA",
        "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