正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。
ドキュメントに関する現在のご利用体験についてお聞かせください。アンケートにご協力ください

OpenBaoチャート

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed
  • ステータス: 実験的機能

OpenBaoチャートを使用してOpenBaoをインストールできます。OpenBaoは、GitLab Secrets Managerを有効にするために必要です。

既知の問題

  • ダウンタイムなしでOpenBaoをアップグレードすることはできません。ゼロダウンタイムアップグレードについて、OpenBaoチャートのイシュー13で提案されています。
  • GitLab Operatorを使用してOpenBaoをデプロイすることはできません。
  • OpenBaoイメージのFIPSバリアントのビルド作業は進行中ですが、OpenBaoはFIPS検証済みではありません。FIPS検証についてはGitLabイシュー574875で追跡されています。

GitLab Secrets ManagerとOpenBaoをセットアップする

  1. 既存のGitLabインスタンスで、OpenBaoを有効にします:

    # Enable OpenBao integration
    global:
      openbao:
        enabled: true
    # Install bundled OpenBao
    openbao:
      install: true
  2. GitLabの上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。

  3. 設定 > 一般を選択します。

  4. 可視性、プロジェクトの機能、権限を展開します。

  5. シークレットマネージャーの切替をオンにして、Secrets Managerがプロビジョニングされるまで待ちます。

Geo設定

GitLab Geoのデプロイでは、セカンダリサイトはプライマリサイトとは異なるURLを使用してOpenBaoに到達する場合があります。GitLab OpenBaoの認証におけるJWTオーディエンスクレームは、OpenBaoでbound_audiencesに設定されているものと一致する必要があります。各サイトでOpenBaoのURLが異なる場合、jwt_audienceを共有値(通常はプライマリサイトのOpenBao URL)に設定して、JWTがどのサイトで生成されたかに関わらずOpenBaoで受け入れられるようにします。

セカンダリサイトを設定します:

global:
  openbao:
    enabled: true
    # Site-specific URL for this Geo secondary
    url: https://openbao.secondary.example.com:8200
    # Shared audience - must match OpenBao bound_audiences (e.g. primary site URL)
    jwt_audience: https://openbao.shared.example.com:8200

OpenBao config.initialize.boundAudiencesjwt_audienceの値を含むことを確認します。バンドルされたOpenBaoチャートを使用する場合、boundAudiencesは外部OpenBaoホスト名にデフォルトで設定されます。Geoの場合、jwt_audienceとして使用される共有URLを含めるためにこれをオーバーライドする必要がある場合があります。

フェイルオーバーシナリオで、セカンダリサイトがプライマリにプロモートされる場合、設定からjwt_audienceを省略します。プロモートされたプライマリは自身のURLを使用し、オーディエンスは当該URLにデフォルト設定されます。

OpenBaoのアップグレードをロールバックする

OpenBaoのアップグレードでは、下位互換性のないPostgreSQLデータの変更が行われる可能性があります。そのため、OpenBaoのアップグレードをロールバックする必要が生じた場合に互換性の問題を引き起こすことがあります。

OpenBaoをアップグレードする前に、必ずバックアップしてください。OpenBaoのアップグレードをロールバックする必要がある場合は、OpenBaoのバージョンに一致するデータベースバックアップも復元してください。

詳細については、OpenBaoのアップグレードドキュメントを参照してください。

OpenBaoをバックアップする

OpenBaoを完全にバックアップするには、以下が必要です:

  • アンシールキー。これらのキーは、復元後にOpenBaoデータにアクセスするために不可欠です。OpenBaoシークレットのシークレットバックアップ手順に従ってください。
  • PostgreSQLデータベース。

デフォルトでは、OpenBaoのPostgreSQLデータは、チャートの組み込みバックアップ手順の一部としてバックアップされます。

別のデータベース(論理または物理)を使用するようにOpenBaoを設定している場合は、そのデータベースを手動でバックアップする必要があります。デフォルトのバックアップツールは、他の外部データベースを認識しないため、標準のPostgreSQLセットアップのみを対象としています。同期の問題を回避するために、GitLabデータベースとOpenBaoデータベースは同時にバックアップする必要があります。

OpenBaoを復元する

デフォルトでは、OpenBaoのPostgreSQLデータは、チャートの組み込み復元手順の一部として復元されます。

別のデータベース(論理または物理)を使用するようにOpenBaoを設定している場合は、OpenBaoデータベースのバックアップは組み込みのバックアップユーティリティで復元できず、手動で復元する必要があります。

OpenBaoのバックアップを復元する前に、OpenBaoをスケールダウンしていることを確認してください。OpenBaoはデータベーススキーマを再作成しようとするため、予期しないエラーが発生する可能性があります。OpenBaoをスケールダウンするには、以下を実行します:

kubectl scale deploy -lapp=openbao,release=<helm release name> -n <namespace> --replicas=0

OpenBaoの設定オプション

次の表は、利用可能なOpenBaoの設定オプションをすべて示しています。

インストールコマンドラインオプション

以下の表は、--setフラグを使用してhelm installコマンドに指定できるチャート設定をすべて示しています。

パラメータデフォルト説明
logLevelinfoOpenBaoのログレベル。
logRequestLeveloffOpenBaoのリクエストログレベル。リクエストログを有効にするには、これをlogLevelと同じ値、またはそれより高いレベルに設定します。
logFormatjsonOpenBaoのログ形式。jsonまたはstandardのいずれか。
serviceAccount.createtrueOpenBaoのサービスアカウントを作成します。
serviceAccount.automounttrue
serviceAccount.annotations{}追加のサービスアカウントアノテーション。
serviceAccount.name生成されたサービスアカウント名をオーバーライドします。
role.create必要なRBAC権限を持つロールを作成します。
securityContext.capabilities{ drop: ["ALL"] }
securityContext.runAsNonRoottrue
securityContext.allowPrivilegeEscalationfalse
securityContext.runAsUser65532
podSecurityContext.seccompProfileRuntimeDefault
podSecurityContext.runAsUser65532
podSecurityContext.fsGroup65532
serviceActive.typeClusterIPアクティブなOpenBaoポッドのサービスタイプ。
serviceActive.annotations{}アクティブなOpenBaoポッドのサービスアノテーション。
serviceInactive.typeClusterIPスタンバイのOpenBaoポッドのサービスタイプ。
serviceInactive.annotations{}スタンバイのOpenBaoポッドのサービスアノテーション。
resources{}リソースの制限とリクエスト。
autoscaling.minReplicas2OpenBaoの最小レプリカ数。
autoscaling.maxReplicas2OpenBaoの最大レプリカ数。
autoscaling.targetCPUUtilizationPercentage80オートスケールの目標CPU使用率。
autoscaling.targetCPUMemoryPercentageオートスケールの目標メモリ使用率。
livenessProbeOpenBaoのlivenessプローブ。デフォルトについては、OpenBao valuesを確認してください。
readinessProbeOpenBaoのreadinessプローブ。デフォルトについては、OpenBao valuesを確認してください。
nodeSelector{}ノードセレクターラベル。
tolerations[]ポッドの割り当て用のtolerationラベル。
affinity{}ポッドの割り当て用のaffinityラベル。
config.uifalseOpenBao UIを有効にします。
config.clusterPort8201OpenBaoのクラスターポート。
config.apiPort8200OpenBaoのAPIポート。
config.cacheSize8200物理ストレージサブシステムが使用する読み取りキャッシュのサイズ(エントリ数)。
config.maxRequestSize786432最大リクエストサイズ(バイト単位)。デフォルトは768 KBです。
config.maxRequestJsonMemory1048576JSON解析後のリクエストボディの最大サイズ(バイト単位)。デフォルトは1 MBです。

コンテナイメージのオプション

OpenBaoチャートは、OpenBaoをデプロイするためにクラウドネイティブGitLabコンテナイメージをデプロイします。OpenBaoのビルドには、アップストリームバージョンからの修正が含まれています。その結果、一部の機能が標準のOpenBaoリリースと異なる場合があります。

パラメータデフォルト説明
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-openbaoOpenBaoイメージのリポジトリ。
image.pullPolicyIfNotPresentイメージのプルポリシー。
image.tagこれをオーバーライドして、カスタムのOpenBaoバージョンをデプロイします。
imagePullSecrets[]プライベートリポジトリからイメージをプルするためのシークレット。

IngressおよびTLSの設定オプション

OpenBaoチャートは、デフォルトでIngress終端のTLS暗号化を使用します。

パラメータデフォルト説明
global.openbao.hostopenbao.<GitLab Domain>OpenBaoホスト。GitLab webserviceとOpenBaoチャートの設定に使用されます。
global.openbao.urlホストから派生GitLab用OpenBao URL。存在する場合は、完全なURIである必要があります。
global.openbao.jwt_audienceurlと同じOpenBao認証用のJWTオーディエンスクレーム。サイトが異なるURLを使用する場合、Geoデプロイのために設定します。OpenBao bound_audiencesと一致する必要があります。
global.openbao.psql{}OpenBaoデータベース設定 (ホスト、データベース、ユーザー名、パスワード)。
ingress.enabledtrueRunnerがOpenBaoに到達できるように、OpenBao Ingressを有効にします。
ingress.hostnameグローバルホスト設定に基づく外部OpenBaoホスト。Ingressでマッチさせるホスト名。
ingress.tls.enabledtrueIngress TLSを有効にします。
ingress.tls.secretNameKubernetes TLSシークレットの名前。デフォルトではcertmanagerによって管理されます。
ingress.annotationstrueIngressにレンダリングされるアノテーション。NGINX以外のIngressコントローラー用にOpenBaoを設定する場合に使用します。
ingress.configureCertmanagerグローバルcertmanager設定certmanagerを使用してTLS証明書を管理します。
ingress.certmanagerIssuer<release>-issuercertmanager発行者の名前。
ingress.sslPassthroughNginxfalse受信TLS接続をOpenBaoにパススルーするように、Ingressにアノテーションを付与します。certmanagerが設定されている場合、新しいHTTP01チャレンジは別のIngress経由で行われます。
config.tlsDisabletrue内部TLSを無効にします。無効にすると、Ingress TLSパススルーも無効になります。
config.metricsListener.tlsDisabletrueメトリクスリスナーの内部TLSを無効にします。

OpenBaoは、エンドツーエンドでTLS暗号化した状態で運用する必要があります。エンドツーエンドTLSを有効にするには、OpenBaoがTLS接続を受け付けるように設定し、NGINX Ingressを介してTLS接続をパススルーさせます:

global:
  ingress:
    useNewIngressForCerts: true
config:
  tlsDisable: false
ingress:
  sslPassthroughNginx: true

ゲートウェイAPI

OpenBaoチャートでは、HTTPRouteを介してトラフィックを公開できます。ゲートウェイAPIがグローバルに有効になっている場合、管理対象のGatewayリソース内にOpenBao用のリスナーが作成されます。

パラメータデフォルト説明
gatewayRoute.enabledデフォルトはglobal.gatewayApi.enabledの値です。HTTPRouteを介してOpenBaoを公開できるようにします。
gatewayRoute.sectionNameopenbao-webHTTPRouteが使用するゲートウェイセクション。
gatewayRoute.gatewayNameGitLabチャートが管理するゲートウェイHTTPRouteが使用するゲートウェイ名。
gatewayRoute.annotations{}HTTPRouteの追加のアノテーション。
gatewayRoute.timeouts{}HTTPRouteのカスタムタイムアウト設定。

モニタリングの設定オプション

OpenBaoは、Prometheusメトリクスを公開するように事前設定されています。これらのメトリクスは、バンドルされているPrometheusサブチャートによってスクレイプされます。

パラメータデフォルト説明
config.telemetry.enabledtrueテレメトリとモニタリングを有効にします。
config.telemetry.disableHostnametrueゲージ値のプレフィックスとしてローカルホスト名を付与します。
config.telemetry.prometheusRetentionTime24hメトリクスの保持期間。
config.telemetry.metricsPrefixopenbaoすべてのメトリクスのプレフィックス。
config.telemetry.usageGaugePeriod0トークン数、エンティティ数、シークレット数など、高カーディナリティの使用状況データを収集する間隔。
config.telemetry.numLeaseMetricsBuckets1リースの期限切れバケット数。
config.metricsListener.enabledtrueメトリクスのリクエストを処理するために2番目のAPIポートを有効にします。このリスナーはすべてのAPIリクエストを処理できますが、メトリクスのリクエストは認証なしで処理します。
config.metricsListener.tlsDisabletrueメトリクスリスナーの内部TLSを無効にします。
config.metricsListener.port8209メトリクスリスナーのポート。
config.metricsListener.unauthenticatedMetricsAccesstrueメトリクスのリクエストを認証なしで処理できるようにします。
podMonitor.enabledfalsePrometheus Operator用のPodMonitorリソースを有効にします。クラスターにPrometheus Operatorがインストールされている必要があります。
podMonitor.additionalLabels{}PodMonitorリソースに追加するラベル。
podMonitor.selectorLabels{}スクレイプ対象のポッドを絞り込むための追加のセレクターラベル。
podMonitor.endpointConfig{}追加のエンドポイント設定(例: intervalscrapeTimeout)。

アンシールおよび初期化オプション

OpenBaoチャートは、相互に排他的な2つの自動アンシール方式をサポートしています:

また、OpenBaoの宣言的な自己初期化も使用します。

パラメータデフォルト説明
config.unseal.static.enabledtrue静的自動アンシールを有効にします。
config.unseal.static.currentKeyIdstatic-unseal-0現在の静的アンシールキーのID。
config.unseal.static.currentKey/srv/openbao/keys/static-unseal-0現在の静的アンシールキーのパス。
config.unseal.static.previousKeyId以前の静的アンシールキーのID。
config.unseal.static.previousKey/srv/openbao/keys/static-unseal-1以前の静的アンシールキーのパス。以前のキーIDも設定されている場合にのみレンダリングされます。
config.unseal.awskms.enabledfalseAWS KMS自動アンシールを有効にします。
config.unseal.awskms.kmsKeyIdKMSキーID、ARN、またはエイリアス(例:alias/my-openbao-key)。config.unseal.awskms.enabledtrueの場合に必須です。
config.unseal.awskms.regionKMSキーが存在するAWSリージョン。
config.unseal.awskms.endpointオプションのカスタムKMSエンドポイントURL(例: VPCエンドポイント)。
config.initialize.enabledtrueOpenBaoの自己初期化を有効にします。
config.initialize.oidcDiscoveryUrl外部GitLabホストOIDCディスカバリURL。デフォルトは外部GitLabホスト名です。
config.initialize.boundIssuer外部GitLabホスト発行者URL。デフォルトは外部GitLabホスト名です。
config.initialize.boundAudiences外部OpenBaoホストOIDCロールのオーディエンス。デフォルトは外部OpenBaoホスト名です。
staticUnsealSecret.generatefalseOpenBaoを自動アンシールするための静的キーを生成します。GitLabチャートのshared-secretチャートによって管理されるため、デフォルトはfalseです。
initializeTplOpenBaoを自己初期化するために渡されるテンプレート。デフォルトについては、OpenBao valuesを確認してください。

AWS KMSアンシール

AWS KMSアンシールは、アンシールキーをAWS KMSキーに委任し、静的キーシークレットを管理する必要をなくします。

AWS (EKS、EC2)で実行する場合、明示的なAWS認証情報が不要となるように、IRSAまたはインスタンスプロファイルを使用します。OpenBaoサービスアカウントにIAMロールのARNをアノテーション付けします:

openbao:
  serviceAccount:
    annotations:
      eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<role-name>"
  config:
    unseal:
      static:
        enabled: false
      awskms:
        enabled: true
        kmsKeyId: "alias/my-openbao-key"
        region: "us-east-1"

IAMロールには、KMSキーに対するkms:Encryptkms:Decrypt、およびkms:DescribeKeyのパーミッションが必要です。

監査イベントストリーミングオプション

OpenBaoチャートは、イベントをGitLabにストリーミングするための監査デバイスを設定します。

パラメータデフォルト説明
global.openbao.httpAudit.secret<release>-openbao-audit-secretOpenBaoとGitLab間で共有するトークンを保存するシークレットの名前。
global.openbao.httpAudit.keytoken共有トークンを保存するシークレットキー。
config.audit.http.enabledtrueHTTPを使用して監査イベントをGitLabにストリーミングする機能を有効にします。
config.audit.http.streamingUri内部workhorseのURL監査イベントのストリーミング先のエンドポイント。
config.audit.http.authTokenPath/srv/openbao/audit/gitlab-authGitLabと共有するトークンがマウントされるパス。
httpAuditSecret.generatefalse認証付き監査のためにGitLabと共有するシークレットを生成します。GitLabチャートのshared-secretチャートによって管理されるため、デフォルトはfalseです。
initializeTplOpenBao監査を設定するために渡されるテンプレート。デフォルトについては、OpenBao valuesを確認してください。

データベース設定

OpenBaoは、Railsバックエンドからのデータ分離のために、separate logical database (openbaoをデフォルト) を使用します。

ホスト、データベース、ユーザー名、パスワードでglobal.openbao.psqlまたはopenbao.config.storage.postgresql.connectionを設定します。データベースは手動で作成する必要があります。パスワードが必要です。メインのGitLabデータベースからは継承されません。

外部データベースを設定するには:

  1. データベースサーバーでPostgreSQLユーザーとデータベースを作成します:

    -- Create the OpenBao user
    CREATE USER openbao WITH PASSWORD '<password>';
    
    -- Create the OpenBao database
    CREATE DATABASE openbao OWNER openbao;
  2. パスワードを含むKubernetesシークレットを作成します:

    kubectl create secret -n bao generic openbao-db-password --from-literal=password="<password>"
  3. 外部データベースに接続するようにOpenBaoを設定します:

    global:
      openbao:
        psql:
          host: "psql.openbao.example.com"
          port: 5432
          database: openbao
          username: openbao
          password:
            secret: openbao-db-password
            key: password

    これはglobal.openbao.psqlを使用します。これは、Toolboxからバックアップおよび復元する操作のためにアクセスできるため、推奨される場所です。高度な接続オプション(sslModeconnectTimeout、またはキープアライブチューニングなど)を設定するには、グローバル設定とともにopenbao.config.storage.postgresql.connectionを使用します。

  4. OpenBaoをデプロイまたはアップグレードします。起動すると、OpenBaoは指定されたデータベース内にデータベーススキーマを自動的に作成します。