シナリオ: IoTデータベースへの直接接続

このシナリオでは、IoTデータベースへの直接接続を確立するためのアクセスを構成する方法を示します。各IoTドメイン・グループは、そのドメイン・グループ内のすべてのIoTドメインで共有される専用のデータベース・インスタンスを使用します。

IoTドメイン・データベース・スキーマには、IoTドメインに関連付けられたデジタル・ツイン・リソースのメタデータとデータが含まれます。

次のステップを実行して、IoTデータベース・スキーマを問い合せてデータベース内の表およびトランザクション・イベント・キューを直接表示できるように、IoTデータへのアクセスを構成します。

この図は、直接データベース接続に必要な構成を示しています。

ステップ1: データ・ホストへの直接データベース接続を許可リストに登録するVCNの作成

サブネットおよびサービス・ゲートウェイを使用してVCNを構成し、データベースへのプライベート接続およびセキュア接続に直接アクセスします。

  1. Internet of Thingsテナンシで、管理者としてログインします。
  2. ナビゲーション・メニューを開き、「ネットワーキング」「Virtual Cloud Networks」の順に選択します。
  3. 「Virtual Cloud Networks」リスト・ページで、「Create VCN」を選択します。
  4. VCNのわかりやすい名前を入力します。必ずしも一意である必要はありませんが、後でコンソールで変更することはできません(ただし、アイデンティティ・ドメインAPIまたはCLIで変更できます)。機密情報を入力しないでください。
  5. VCNを作成するコンパートメントを確認し、必要に応じて別のコンパートメントを選択してください。
    ノート

    VCNは、IoTドメイン・グループ、IoTドメインおよびその他のIoTリソースと同じリージョンにある必要があります。The maximum number of VCNs you can associate to an IoT domain group is 5.
  6. 「IPv4 CIDRブロック」セクションで、データベースへのアクセスを許可するIP範囲を入力します(例: 10.0.0.0/16)。

    設定の完全なリストは、VCNの作成を参照してください。

  7. 「VCNの作成」を選択します。
  8. 「Virtual Cloud Network」詳細ページが開き、「サブネット」タブを選択します。「サブネットの作成」を選択します。

    詳細は、サブネットの作成およびVCNsおよびサブネットの概要を参照してください。

  9. 「サブネットの作成」ページで、次の手順を実行します。
    1. サブネットのわかりやすい名前を入力します。必ずしも一意である必要はありませんが、後でコンソールで変更することはできません(ただし、アイデンティティ・ドメインAPIを使用して後で変更できます)。機密情報を入力しないでください。
    2. サブネットを作成するコンパートメントを確認します。必要に応じて別のコンパートメントを選択します。
    3. サブネット・タイプ「リージョナル」を選択します。リージョナル・サブネットは、サブネットにリージョンの任意の可用性ドメイン内のリソースを含めることができることを意味します。
    4. IPv4 CIDRブロック(10.0.0.0/16など)を入力します。
    5. 「プライベート・サブネット」アクセスを選択して、このサブネット内のインスタンスのパブリックIPアドレスを禁止します。
    6. 「このサブネットでDNSホスト名を使用」チェック・ボックスを選択します。
    7. サブネットDNSラベル名を含むDNSドメイン名を入力します:

      <subnet_DNS_label>.<VCN_DNS_label>.oraclevcn.com

    8. 「Dhcpオプション」コンパートメントで、IoTリソースを含むコンパートメントを選択します。「Dhcpオプション」で、「デフォルトのDhcpオプション」を選択します。
    9. セキュリティ・リスト・コンパートメントに対して、IoTリソースを含むコンパートメントを選択します。「セキュリティ・リスト」を選択します。
    10. 「サブネットの作成」を選択します。
  10. 「Virtual Cloud Network」詳細ページが開き、「ゲートウェイ」タブを選択します。「サービス・ゲートウェイ」で、「サービス・ゲートウェイの作成」を選択します。

    詳細は、サービス・ゲートウェイの作成ページの使用可能なサービスCIDRラベルを参照してください。

  11. サービス・ゲートウェイの名前を入力します。一意である必要はありません。機密情報を入力しないでください。ゲートウェイを作成するコンパートメントを選択します。必要に応じて別のコンパートメントを選択します。
  12. 「サービス」で、「Oracle Services Networkのすべての<region>サービス」オプションを選択します。
  13. 「拡張オプション」を選択し、「ルート表の関連付け」ルート表コンパートメントを選択します。関連付けられたIoTリソースのコンパートメントを使用します。IoTリソースは、異なるコンパートメントに配置でき、同じリージョンに存在する必要があります。
  14. 「サービス・ゲートウェイの作成」を選択します。
  15. 「仮想クラウド・ネットワーク」詳細ページが開き、「ルーティング」タブを選択します。
  16. 「ルート表」で、「デフォルト・ルート表」を選択します。
  17. 「ルート・ルール」タブを選択し、「ルート・ルールの追加」を選択します。
    • 「ターゲット・タイプ」で、「サービス・ゲートウェイ」の順に選択します。
    • 「宛先サービス」で、「Oracle Services Networkのすべての<region>サービス」を選択します。
    • 「ターゲット・サービス・ゲートウェイ・コンパートメント」を選択します: 前のステップでサービス・ゲートウェイを作成したときに選択したものと同じコンパートメントを選択します。
    • 前のステップで作成したターゲット・サービス・ゲートウェイを選択します。
    • 「ルート・ルールの追加」を選択します。
    詳細は、ルーティング・ルールの追加を参照してください。
  18. 「Virtual Cloud Network」詳細ページが開き、「セキュリティ」タブを選択します。「ネットワーク・セキュリティ・グループの作成」を選択します。
    • 名前を入力し、前のステップで選択したものと同じコンパートメントを選択します。
    • 「ルール」セクションで、「方向」「エグレス」を選択します。
    • 「宛先タイプ」で、「CIDR」を選択します。
    • 「宛先CIDR」フィールドに、環境のCIDRを入力します(例: 0.0.0.0/0)。
    • 「IPプロトコル」で、「すべてのプロトコル」を選択します。
  19. 「作成」を選択します。詳細は、ネットワーク・セキュリティ・グループに関する項を参照してください。
  20. ネットワーク・セキュリティ・グループの詳細を表示します。
  21. 「仮想クラウド・ネットワーク」の詳細ページで、VCNまたはVCNsのOCIDをコピーします。次のステップで、このVCN OCIDまたはOCIDsを使用します。

ステップ2: VCN OCIDのIoTドメイン・グループへの追加

次のステップを完了するには、IoTドメイン・グループに追加するVCNまたはVCNsに対する読取りアクセス権が少なくともユーザーに必要です。To confirm if you have read access to the VCN, see Getting a VCN's Details to view the VCNs you have access to.

管理者は、任意のユーザーにVCNへの読取りアクセス権を付与するポリシーを作成する必要があります。これにより、IoTドメイン・グループはVCNの特定のコンパートメントへの読取りアクセス権を許可します。
Allow any-user to {VCN_READ} in compartment <compartment-name> where request.principal.type = 'iotdomain'
  1. oci iot domain-group configure-data-accessコマンドおよび必須パラメータを使用して、IoTドメイン・グループのデータ・アクセスを構成します。<vcn-ocids>を、IoTドメイン・グループのVCNsのOCIDsに置き換えます。構成に応じて、次の形式を使用して、1つのVCN OCIDまたは複数のVCN OCIDsを含めることができます:

    oci iot domain-group configure-data-access --db-allow-listed-vcn-ids '["ocid1.vcn.OCID","ocid2.vcn.OCID"]' --iot-domain-group-id <domain-group-OCID>
    コンソールまたはAPIを使用してVCNをIoTドメイン・グループに追加する手順は、IoTドメイン・グループのデータ・アクセスの構成を参照してください。
    Note

    The maximum number of VCNs you can associate to an IoT domain group is 5.
  2. 数分後、oci iot domain-group getコマンドおよび必須パラメータを使用して、ドメイン・グループのデータベース接続の詳細を含むIoTドメイン・グループの詳細を取得し、構成を確認します。<iot-domain-group-OCID>を、IoTドメイン・グループのOCIDに置き換えます。

    oci iot domain-group get --iot-domain-group-id <iot-domain-group-OCID>

    このレスポンス例では、ドメイン・グループがアクティブである"lifecycleState": "ACTIVE"を示し、それが構成されている場合、このレスポンスにはドメイン・グループのデータベース接続の詳細が含まれます:

    db-allow-listed-vcn-ids: VCNが表示されます。

    db-connection-string

    db-token-scope

    {
      "data": {
        "compartment-id": "<compartment-OCID>",
        "data-host": "<domain-group-short-id>.iot-data.<region>.oci.oraclecloud.com",
        "db-allow-listed-vcn-ids": '["<vcn-OCID>"]',
        "db-connection-string": null,
        "db-token-scope": null,
        "defined-tags": {
          "Oracle-Tags": {
            "CreatedBy": "default/user",
            "CreatedOn": "2025-08-05T18:15:41.260Z"
          }
        },
        "description": null,
        "display-name": "<your-iot-domain-group-name>",
        "freeform-tags": {},
        "id": "<domain-group-OCID>",
        "lifecycle-state": "ACTIVE",
        "system-tags": {},
        "time-created": "2025-08-05T18:15:43.054000+00:00",
        "time-updated": "2025-08-05T18:27:53.655000+00:00"
      },
      "etag": "<unique-id>"
    }
    

ステップ3: SSHアクセス用のコンピュート・インスタンスの作成

Oracle Cloud Infrastructureでコンピュート・インスタンスとVirtual Cloud Network (VCN)を作成すると、コンピュート・リソースへのSecure Shell (SSH)アクセスが提供され、仮想マシン用にセキュアな分離ネットワーク環境が作成されます。VCNはインスタンスへのアクセス方法を決定します。一方、コンピュート・インスタンスは接続する必要がある仮想サーバーです。

アプリケーションをホストするコンピュート・インスタンスを作成し、ワークロードにコンピューティング能力を提供し、Virtual Cloud Network (VCN)をターゲットにして、クラウド内のプライベートでセキュアなネットワークにインスタンスを作成し、他のネットワークおよびパブリック・インターネットからの接続と分離を制御できます。VCNの使用は、ネットワーク・セキュリティおよび接続に不可欠であり、インスタンスと他のリソースとの通信方法を管理するためのサブネット、ゲートウェイおよびルールを定義できます。For more information, see Overview of VCNs and Subnets and Overview of the Compute Service.

  1. ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。「インスタンスの作成」を選択します。
  2. インスタンスの名前を入力します。名前は後で追加または変更できます。Oracle Cloud Identifier (OCID)でインスタンスを一意に識別するため、この名前は一意である必要はありません。機密情報を入力しないでください。インスタンスを作成するコンパートメントを選択します。すべてのIoTリソースは同じリージョンに存在する必要があります。
  3. 場合によっては、デフォルトのオプションが適用されることがあります。コンピュート・インスタンスの特定のオプションを構成する場合は、インスタンスの作成を参照してください。インスタンスを作成する可用性ドメイン名を選択します。「次へ」を選択します。
  4. 「セキュリティ」で、スイッチを切り替えて「保護インスタンス」をオンにします。「次へ」を選択します。
  5. 「既存の仮想クラウド・ネットワークの選択」オプションが選択されていることを確認します。
  6. 仮想クラウド・ネットワーク・コンパートメントと、前のステップで作成した仮想クラウド・ネットワークを選択します。
  7. 「サブネット」で、「既存のサブネットの選択」オプションが選択されていることを確認します。前のステップで作成したリージョナル・サブネットを選択します。
  8. 「SSHキーの追加」で、「キー・ペアの生成」のオプションを確認します。
  9. 「Download private key」を選択します。Oracle Cloud Infrastructureによって、インスタンスのRSAキー・ペアが生成されます。SSHを使用してインスタンスに接続できるように、秘密キーがダウンロードされます。「次へ」を選択します。
  10. 「作成」を選択します。

ステップ4: アイデンティティ・ドメイン動的グループの作成

管理者として、Identity and Access Management (IAM)サービスで、データベース・トークンの取得を許可されたコンピュート・インスタンスを含む動的グループを作成する必要があります。グループのメンバーとなるインスタンスを指定するルールを定義できます。詳細は、Oracle Cloud InfrastructureコンソールでのOracle Identity Cloud Serviceユーザーおよびグループの管理を参照してください。
  1. IoTテナンシで、管理者としてOracle Cloud Infrastructure Consoleにサインインします。
  2. ナビゲーション・メニューを開き、「アイデンティティおよびセキュリティ」を選択します。「アイデンティティ」で、「ドメイン」を選択します。
  3. 「動的グループ」タブを選択し、「動的グループの作成」を選択します。
  4. 名前を入力し、オプションで摘要を入力します。「下で定義したいずれかのルールに一致」を選択します。
  5. ルール1で、前のステップで作成したコンピュート・インスタンスのOCIDで、次の置換instance-OCIDを入力します。

    any{instance.id='instance-OCID'}

    コンピュート・インスタンスOCIDは、「インスタンスの詳細」ページで確認できます。ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。「インスタンスの詳細」ページを開くために使用する「インスタンス」を選択します。

    インスタンスは、すべてのIoTリソースと同じリージョンに存在する必要があります。

  6. 「作成」を選択します。動的グループ情報が動的グループOCIDとともに表示されます。

ステップ5: 要塞の作成

ターゲットVirtual Cloud Network (VCN)に要塞を作成し、パブリック・エンドポイントのないVCN内のターゲット・データベースへのセキュアで制御された時間限定アクセスを提供します。要塞はゲートウェイとして機能し、認可されたユーザーは、インターネットに直接公開することなく、このプライベート・リソースへの安全なSSH接続を確立できます。詳細は、要塞を使用したプライベート・サブネットのインスタンスへの接続に関する項を参照してください。
  1. IoTテナンシで、管理者としてOracle Cloud Infrastructure Consoleにサインインします。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」「要塞」の順に選択します。
  3. 「ネットワーキングの構成」で、「ターゲット仮想クラウド・ネットワーク・コンパートメント」を選択し、前のステップで作成した「ターゲット仮想クラウド・ネットワーク」を選択します。
  4. 「ターゲット・サブネット・コンパートメント」を選択し、前のステップで作成した「ターゲット・サブネット」を選択します。
  5. 「CIDRブロック許可リスト」では、この要塞がホストするセッションへの接続を許可する1つ以上のアドレス範囲(0.0.0.0/0など)をCIDR表記に追加します。

    CIDRブロックを入力フィールドに入力し、値を選択するか、[Enter]を押して値をリストに追加します。CIDRブロックの最大許容数は20です。オプションの完全なリストについては、要塞の作成を参照してください。

    アドレス範囲が制限されるほど、セキュリティが向上します。

  6. 「リストに追加」を選択します。
  7. 「要塞の作成」を選択します。
  8. 要塞の詳細ページが開き、この要塞のOCIDが表示されます。
  9. 「セッション」タブを選択し、「セッションの作成」を選択します。
  10. 「セッション・タイプ」で、「SSHポート番号転送セッション」を選択します。セッションの名前を入力します。詳細は、要塞でのポート転送セッションの作成を参照してください。
  11. 「次を使用してターゲット・ホストに接続」で、「インスタンス名」を選択します。
  12. 前のステップで作成したコンピュート・インスタンス・コンパートメントおよびコンピュート・インスタンスを選択します。
  13. ターゲット・リソースで接続するポート番号を入力します。たとえば、Linuxインスタンス上のSSHサーバー: 22 (デフォルト)
  14. 「SSHキーの追加」で、「SSHキー・ペアの生成」を選択します。「秘密キーの保存」および「公開キーの保存」を選択します。
  15. 「拡張」オプションでは、セッション構成の「最大セッション存続時間」180で、間隔はです。「セッションの作成」を選択します。セッション・リスト・ページが開きます。
  16. 使用するセッションの行の末尾で、「アクション」メニューを選択し、「SSHコマンドのコピー」を選択します。
  17. 仮想マシンであるSSHポート転送トンネルへのSSHポート転送セッションの構築。そのためには、ローカル・コマンドラインまたはターミナルを開き、環境に合せてカスタマイズされたSSHコマンドを実行します。

    <path-to-SSH-private-Key>: を、前のステップでポート転送セッションを作成したときにダウンロードした公開キーに対応する秘密キー・ファイルへのフルパスに置き換えます。<localPort>: を、トンネルに使用するマシン上の使用可能なローカル・ポートに置き換えます。これは、転送されたサービスにアクセスするためにローカルに接続するポートです。

     ssh -i <path-to-SSH-private-Key> -p <localPort>:<targetResourceIP>:<targetPort> <sessionOCID>@<bastionPublicIP> -N
    たとえば:
     ssh -i <privateKey> -p 1224:opc@127.0.0.1
    プロンプトに従って接続します。SSHコマンドが実行され、要塞ホストへのトンネルが確立されると、前のステップで設定した要塞ホストに接続することで、ターゲット・リソースのサービスにアクセスできます。
    [opc@compute-instance-name ~]$
  18. OCI CLIをインストールします。

    次に、Oracle Linux 9の場合の例を示します。

    dnfコマンドを使用して、Oracle Cloud Infrastructure (OCI)コマンドライン・インタフェース(CLI)インストーラ・スクリプトを実行します。詳細は、「コマンド・ライン・インタフェース(CLI)」を参照してください。他のオペレーティング・システムおよび環境にCLIをインストールするには、CLIのインストールを参照してください。
    sudo dnf install -y python39-oci-cli
  19. これで、oci iot CLIコマンドを使用できます。

ステップ6: IoTドメインへのOCIアイデンティティ・ドメイン動的グループの追加

IoTドメインのデータ・アクセスがすでに構成されている場合は、oci iot domain getコマンドを使用して、既存のIoTドメインのデータベース接続の詳細を確認します。詳細は、「IoTドメインの詳細の取得」を参照してください。

または、このoci iot domain configure-direct-data-accessコマンドおよび必須パラメータを使用して、データベースに直接接続するためのIoTドメインのアクセスを構成します。

次のガイドラインに従って、テナンシOCIDを環境のIoTテナンシOCIDに置き換え、アイデンティティ・グループ名をアイデンティティ動的グループに置き換えます。

<identity-group-name>パラメータでは、ユーザーのアイデンティティ・グループまたはアイデンティティ動的グループのいずれかを参照できます。この例では、前の手順で設定した動的グループが参照されます。

oci iot domain configure-direct-data-access --iot-domain-id <iot-domain-OCID> --db-allow-listed-identity-group-names '["<tenancy-OCID>:<identity-group-name>"]'

<identity-domain-name>がデフォルトのアイデンティティ・ドメインにない場合は、<identity-domain-name>を指定する必要があります。たとえば: <tenancy-OCID>:<identity-domain-name>/<identity-group-name>

oci iot domain configure-direct-data-access --iot-domain-id <iot-domain-OCID> --db-allow-listed-identity-group-names '["<tenancy-OCID>:<identity-domain-name>/<identity-group-name>"]'

ステップ7: db-token-scopeを使用したアイデンティティ・サービスからのdb-tokenの取得によるデータベースへの接続

許可リストに登録されたVCNにある仮想マシンで実行されているユーザーまたはアプリケーションの両方で、インスタンス・プリンシパルを使用してdb-token-scopeを使用して、IAMアイデンティティ・サービスからdb-tokenを取得できます。

次のコマンドを使用します: oci iam db-token get --scope --auth instance_principal

詳細は、Instance Principal認証を参照してください

IoTドメイン・グループの仮想マシンにログインし、oci iam db-token getコマンドを使用してインスタンス・トークンを取得します。urn:oracle:db::id::<database-compartment-OCID>を、IoTドメイン・グループのデータベース・トークン・スコープに置き換えます。
oci iam db-token get --scope <urn:oracle:db::id::<database-compartment-OCID> --auth instance_principal
たとえば:
iam db-token get --auth instance_principal --scope urn:oracle:db::id::<database-compartment-OCID>

Private key written at /home/opc/.oci/db-token/oci_db_key.pem
db-token written at: /home/opc/.oci/db-token/token
db-token is valid until 2025-08-30 21:09:45

ステップ8: Walletを使用しないJDBC ThinドライバでのJDBC URL TLS接続文字列を使用したデータベースへの接続

ユーザーもアプリケーションも、db-connection-stringおよびOCIトークンを使用してデータ・ホストへの接続を確立し、IoTドメイン・データを問い合せることができます。

取得されたdb-tokenは、SQL*Plus、SQLcl、JDBCドライバなどのデータベース・クライアントによって使用され、IAMトークン認証用に構成されたOracleデータベースへの接続を認証します。

データベースへの接続中に、JDBCアプリケーションはデータベースにトークンを提供します。データベースは、認証サービスからリクエストする公開キーでトークンを検証し、対応するユーザー・グループ・メンバーシップ情報を取得し、データベース・スキーマとロール・マッピングを検索してデータベースへのユーザー認証を完了します。

./sql /@"jdbc:oracle:thin:@tcps:adb.<region>.oraclecloud.com:<port>/<database-host-name>.adb.<region>.oraclecloud.com?TOKEN_AUTH=OCI_TOKEN"

さらに、アプリケーションは署名済ヘッダーを送信することで、トークンに埋め込まれた公開キーとペアになる秘密キーを保有していることを証明します。トークンと署名の両方が有効で、IAMユーザーとデータベース・ユーザーの間にマッピングが存在している場合は、JDBCアプリケーションにデータベースへのアクセスが許可されます。

SQLclの使用方法の詳細は、Oracle SQLclのドキュメントを参照してください。

これで、データベース内のIoTドメイン・データを直接問い合せることができます。