ウォレット関数を使用するデータベース・シークレット・ローテーション

OCI FunctionsでWalletの事前組込み関数を使用したデータベース・シークレット・ローテーションを使用して、データベースへのmTLS接続を使用してシークレットをローテーションする方法をご覧ください。

一般的な使用方法のシナリオ

Wallet PBFを使用したデータベース・シークレット・ローテーションを使用して、ウォレット(mTLS)とのJDBC接続を作成することで、データベースのシークレットを自動的にローテーションします。

Database Secret Rotation with Wallet関数に関連するサービスは次のとおりです。

有効範囲

この関数のスコープに関する考慮事項は次のとおりです。

  • 事前組込み関数は、JDBC URLをサポートする任意のデータベースで使用できます。
  • シークレット・サービスは、事前組込みファンクションによって作成されたファンクションを使用して、データベース・シークレットをローテーションします。
  • Wallet PBFを使用したデータベース・シークレット・ローテーションは、Autonomous Databaseで使用されます。Autonomous Databaseの詳細は、Autonomous Databaseを参照してください。

前提条件と推奨事項

この事前作成機能を使用する場合のベスト・プラクティスを次に示します。

  • 事前構築済み関数のタイムアウトを300秒に設定します。
  • アプリケーションにリンクされたVCNは、サービス・ゲートウェイ、インターネット・ゲートウェイまたはNATゲートウェイを使用して他のOCIサービスへのアクセスを容易にします。

Wallet関数を使用したデータベース・シークレット・ローテーションの構成

ウォレット関数を使用してデータベース・シークレット・ローテーションを構成するには、次のステップを実行します:

  1. 「事前構築済ファンクション」ページで、「Walletを使用したデータベース・シークレット・ローテーション」「ファンクションの作成」の順に選択します。
  2. 次のようにして、「名前」「コンパートメント」および「アプリケーション」を構成します:
    • 名前:新しいファンクションの名前。名前は、文字またはアンダースコアで始まり、文字、数字、ハイフンまたはアンダースコアが続く必要があります。長さは1から255文字です。機密情報の入力は避けてください。

      別のコンパートメントにファンクションを作成するには、「コンパートメントの変更」を選択します。

    • アプリケーション:関数を作成するアプリケーションを選択します。

      適切なアプリケーションが現在のコンパートメントにまだ存在しない場合は、「新規アプリケーションの作成」を選択し、次の詳細を指定します:

      • 名前:新しいアプリケーションの名前。機密情報の入力は避けてください。
      • VCN:アプリケーションでファンクションを実行するVCN (仮想クラウド・ネットワーク)。オプションで、「コンパートメントの変更」を選択して、別のコンパートメントからVCNを選択します。
      • サブネット:ファンクションを実行するサブネット(最大3つ)。オプションで、「コンパートメントの変更」を選択して、別のコンパートメントからサブネットを選択します。
      • シェイプ:アプリケーションでファンクションをデプロイおよび実行するコンピュート・インスタンスのプロセッサ・アーキテクチャ。アプリケーション内のすべてのファンクションは、同じアーキテクチャのコンピュート・インスタンスにデプロイされ、実行されます。ファンクションのイメージには、選択するアーキテクチャに必要な依存関係が含まれている必要があります。
      • タグ付けオプション: リソースの作成権限がある場合は、フリーフォーム・タグをそのリソースに適用する権限もあります。定義済タグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後で適用できます。
  3. 事前構築済ファンクションのIAMポリシーを構成します。

    デフォルトでは、OCI Functionsは、事前構築済ファンクションの実行に必要なポリシー・ステートメントを使用して、動的グループおよびIAMポリシーを作成します。変更を行わずに、デフォルトの動作を受け入れます。

    OCI Functionsで動的グループとポリシーを自動的に作成しない場合は、「動的グループとIAMポリシーを作成しないでください」を選択します。

    重要

    「動的グループとIAMポリシーを作成しない」オプションを選択した場合は、動的グループとIAMポリシーを自分で定義する必要があります。
  4. 関数メモリーおよびタイムアウト値を次のように構成します。
    • メモリー:関数の実行時に使用できるメモリーの最大数(メガバイト)。これは、ファンクション・イメージで使用可能なメモリーです。(デフォルト: 512MB)
    • タイムアウト:ファンクションを実行できる最大時間(秒)。指定した時間に関数が完了しなかった場合、システムは関数を取り消します。(デフォルト: 300)
  5. (オプション)プロビジョニングされた同時実行性を構成して、実行インフラストラクチャを常に使用可能にする同時ファンクション呼出しの最小数を指定することで、ファンクションの起動時の初期遅延を最小限に抑えます。(デフォルト: 未選択)

    選択した場合、このファンクションに割り当てられるプロビジョニングされた同時実行ユニットの数を指定します。デフォルト: 20

    プロビジョニングされた同時実行性の詳細は、プロビジョニングされた同時実行性を使用した初期レイテンシの削減を参照してください。

  6. オプションで、「タグ付けオプション」セクションに任意のタグを入力します。リソースの作成権限がある場合は、フリーフォーム・タグをそのリソースに適用する権限もあります。定義済タグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後で適用できます。
  7. 「作成」を選択します。

デプロイ・ダイアログに、ファンクションをデプロイするタスクが表示されます(「事前構築済ファンクション・デプロイメントの終了」を参照)。

構成オプション

この関数の起動

シークレット・サービスは、このPBFを使用して作成された関数を使用してシークレットをローテーションします。
  1. このPBFを使用してファンクションを作成し、ファンクションIDをコピーします。
    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」「Vault」の順に選択します。
    2. 「リスト範囲」で、ボールトに作成したシークレットを含むコンパートメントを選択します。
    3. シークレットのリストから、このPBFを使用してローテーションする必要があるシークレット名を選択するか、新しいシークレットを作成します。
  2. 交代勤務の場合、[ターゲット システム タイプ][関数]を選択します。
  3. ステップ1からコピーしたファンクションIDを「ターゲット・システムID」として追加します。
  4. シークレットが次の要件に従っていることを確認します。
    • シークレットでは自動生成が有効になっている必要があります。
    • シークレット・コンテンツは、次の形式のJSON文字列である必要があります:
      {
       ‘username’: <required: username>,
       ‘password’: <required: password>,
       ‘adbId’: <required: adbId>,
       ‘tnsName’: <required: tnsName (adbName + ‘_high/_low/_medium’)>
      }
    • ユーザー名とパスワードは、jdbc:oracle:thin:@<tnsName>?TNS_ADMIN=<walletDirectory>という形式を使用してデータベースとの接続を確立する必要があります。
    • シークレットは、シークレット・コンテンツの一部としてtnsName (adbName + '_high/_low/_medium')およびadbIdを持つ必要があります。
    • mTLS接続を使用してください。Wallet (mTLS)を使用したJDBC Thin接続を参照してください

トラブルシューティング

事前構築済ファンクションの実行では、事前構築済ファンクションのコードで問題が発生した場合に502エラー・コードが返されます。原因を特定するには、事前構築済み関数のロギング機能を有効にします(Invoking a function failed message and a 502 errorを参照)。

ヒント

関数のトラブルシューティングの詳細は、OCI関数のトラブルシューティングを参照してください。

ログ分析のヒント

  • アプリケーションには複数の関数があるため、事前に作成された関数ログエントリは接頭辞「PBF | <PBF NAME>」で識別されます。

    たとえば、Database Secret Rotation with Walletの事前構築済関数のログ・エントリは次のようになります。

    "PBF | Database Secret Rotation with Wallet | INFO | 2024-01-31T18:06:50.809Z | Fetching details from Events JSON"
  • すべての組み込み関数は、ロギングレベルを構成パラメータとして指定するオプションを提供します。ロギング・レベルをDEBUGに設定して、詳細情報を取得できます。

次の表に、事前作成関数を使用するときに発生する可能性のある一般的なエラーの概要を示します。

エラー・コード Error Message アクション
404 NotAuthorizedOrNotFound 必要なポリシーが構成されていることを確認します。

次の表に、この事前作成機能の使用時に発生する可能性があるレスポンス・ステータス・コードの概要を示します。

ステップ ステータス・コード レスポンス・メッセージ 説明
VERIFY_CONNECTION 200 保留中のシークレット・バージョンを使用した接続に成功しました! シークレットの保留中バージョンが存在し、そのバージョンを使用してデータベース接続が正常に確立されました。
現在のシークレット・バージョンを使用した接続に成功しました! 現在のシークレット・バージョンでデータベース接続に成功しました。
400 現在のシークレット・バージョンを使用した接続は失敗しました。 現在のシークレット・バージョンまたは保留中のバージョン(存在する場合)の資格証明が無効です。
404 シークレットの現在のバージョンが見つかりません 指定されたsecretIdのシークレットの現在のバージョンが存在しません。
500 <例外メッセージ> 接続の検証中に例外が発生したときにスローされます。
CREATE_PENDING_VERSION 200 保留中のバージョンがすでに存在します。 シークレットの保留中バージョンはすでに存在します。新規待ち状態バージョンを作成しません。
保留中のバージョンが正常に作成されました。 待ち状態のバージョンが存在しません。シークレットの新規待ち状態バージョンが作成されます。
<例外コード> 保留中のバージョンの作成に失敗しました。 シークレットの新しい保留中バージョンを作成しようとしているときにDPクライアントから例外が発生しました。
500 <例外メッセージ> 新規バージョンの作成中に例外が発生したときにスローされます。
UPDATE_TARGET_SYSTEM 200 ターゲット・システムはすでに更新されています。 データベースは、このバージョンがデータベース資格証明の更新に以前使用されていたことを示す、保留中のシークレット・バージョンを使用して接続できます。
ターゲット・システムは正常に更新されました。 データベース資格証明は、シークレットの保留中のバージョンで更新されました。
404 保留中のバージョンが存在しません。 ターゲット・システムの更新に使用できるシークレットの保留中のバージョンが存在しません。
500 ターゲット・システムの更新に失敗しました。 ターゲット・システムを新しい保留中のバージョン資格証明で更新しようとしましたが、これらの資格証明を使用したデータベース接続の検証に失敗しました。
<例外メッセージ> ターゲット・システムの更新中に例外が発生したときにスローされます。
PROMOTE_PENDING_VERSION 200 保留中のバージョンがプロモートされました! 保留中のバージョンが現在のバージョンにプロモートされました。
500 <例外メッセージ> 保留バージョンの昇格中に例外が発生したときにスローされます。