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

GitLabチャートのシークレットを設定する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLabが動作するには、さまざまなシークレットが必要です:

GitLabコンポーネント:

  • レジストリ認証証明書
  • GitLab Shell用のSSHホストキーと証明書
  • 個々のGitLabサービス用パスワード
  • GitLab Pages用TLS証明書

オプションの外部サービス:

  • SMTPサーバー
  • LDAP
  • OmniAuth
  • 受信メール用IMAP (mail_roomサービス経由)
  • サービスデスクメール用IMAP (mail_roomサービス経由)
  • 受信メール用Microsoft Graph with OAuth2 (mail_roomサービス経由)
  • サービスデスクメール用Microsoft Graph with OAuth2 (mail_roomサービス経由)
  • 送信メール用Microsoft Graph with OAuth2
  • S/MIME証明書
  • スマートカード認証
  • OAuthインテグレーション

手動で提供されなかったシークレットは、ランダムな値で自動的に生成されます。HTTPS証明書の自動生成はLet’s Encryptによって提供されます。

自動生成されたシークレットを利用するには、次のステップに進んでください。

独自のシークレットを指定するには、手動シークレット作成に進んでください。

手動シークレット作成 (オプション)

このドキュメントの以前のステップに従った場合は、gitlabをリリース名として使用してください。

レジストリ認証証明書

GitLabとレジストリ間の通信はIngressを介して行われるため、ほとんどの場合、この通信には自己署名証明書で十分です。このトラフィックがネットワーク経由で公開される場合は、公開されている有効な証明書を生成する必要があります。

以下の例では、自己署名証明書が必要であると仮定しています。

証明書とキーペアを生成します:

mkdir -p certs
openssl req -new -newkey rsa:4096 -subj "/CN=gitlab-issuer" -nodes -x509 -keyout certs/registry-example-com.key -out certs/registry-example-com.crt

これらの証明書を含むシークレットを作成します。<name>-registry-secretシークレット内にregistry-auth.keyregistry-auth.crtのキーを作成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-registry-secret --from-file=registry-auth.key=certs/registry-example-com.key --from-file=registry-auth.crt=certs/registry-example-com.crt

このシークレットはglobal.registry.certificate.secret設定で参照されます。

レジストリの機密通知ヘッダー

詳細については、レジストリ通知の設定に関するドキュメントを確認してください。

シークレットの内容は、単一の項目であっても項目リストである必要があります。内容が単なる文字列の場合、チャートは必要に応じてリストに変換WILL NOT

RandomFooBarを持つregistry-authorization-headerシークレットが作成される例を考えてみましょう。

kubectl create secret generic registry-authorization-header --from-literal=value="[RandomFooBar]"

デフォルトでは、シークレット内で使用されるキーは「value」です。ただし、ユーザーは別のキーを使用できますが、ヘッダーマップ項目としてkeyの下に指定されていることを確認する必要があります。

SSHホストキー

OpenSSH証明書キーペアを生成します:

mkdir -p hostKeys
ssh-keygen -t rsa  -f hostKeys/ssh_host_rsa_key -N ""
ssh-keygen -t ecdsa  -f hostKeys/ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519  -f hostKeys/ssh_host_ed25519_key -N ""

これらの証明書を含むシークレットを作成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-shell-host-keys --from-file hostKeys

このシークレットはglobal.shell.hostKeys.secret設定で参照されます。

このシークレットがローテーションされると、すべてのSSHクライアントにhostname mismatchエラーが表示されます。

初期Enterpriseライセンス

GitLabインスタンスのEnterpriseライセンスを保存するためのKubernetesシークレットを作成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-license --from-file=license=/tmp/license.gitlab

次に、--set global.gitlab.license.secret=<name>-gitlab-licenseを使用して、ライセンスを設定に注入します。

global.gitlab.license.keyオプションを使用して、ライセンスシークレット内のライセンスを指すデフォルトのlicenseキーを変更することもできます。

初期rootパスワード

初期rootパスワードを保存するためのKubernetesシークレットを作成します。パスワードは6文字以上である必要があります。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-initial-root-password --from-literal=password=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32)

Redisパスワード

Redis用のランダムな64文字の英数字パスワードを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-redis-secret --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

既存のRedisクラスターでデプロイする場合は、ランダムに生成されたパスワードではなく、base64エンコードされたRedisクラスターにアクセスするためのパスワードを使用してください。

このシークレットはglobal.redis.auth.secret設定で参照されます。

GitLab Shellシークレット

GitLab Shell用のランダムな64文字の英数字シークレットを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-shell-secret --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

このシークレットはglobal.shell.authToken.secret設定で参照されます。

Gitalyシークレット

Gitaly用のランダムな64文字の英数字トークンを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitaly-secret --from-literal=token=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

このシークレットはglobal.gitaly.authToken.secret設定で参照されます。

Praefectシークレット

Praefect用のランダムな64文字の英数字トークンを生成します。<name>をリリース名に置き換えてください:

kubectl create secret generic <name>-praefect-secret --from-literal=token=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

このシークレットはglobal.praefect.authToken.secret設定で参照されます。

GitLab Railsシークレット

<name>をリリース名に置き換えてください。

cat << EOF > secrets.yml
production:
  secret_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-f0-9' | head -c 128)
  otp_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-f0-9' | head -c 128)
  db_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-f0-9' | head -c 128)
  encrypted_settings_key_base: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-f0-9' | head -c 128)
  openid_connect_signing_key: |
$(openssl genrsa 2048 | awk '{print "    " $0}')
  active_record_encryption_primary_key:
    - $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32)
  active_record_encryption_deterministic_key:
    - $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32)
  active_record_encryption_key_derivation_salt: $(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32)
EOF

kubectl create secret generic <name>-rails-secret --from-file=secrets.yml

このシークレットはglobal.railsSecrets.secret設定で参照されます。

このシークレットにはデータベース暗号化キーが含まれているため、ローテーションすることはお勧めしません。シークレットがローテーションされた場合、その結果はシークレットファイルが失われた場合と同じ動作を示します。

GitLab Workhorseシークレット

Workhorseシークレットを生成します。これは32文字の長さで、base64エンコードされている必要があります。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-workhorse-secret --from-literal=shared_secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)

このシークレットはglobal.workhorse.secret設定で参照されます。

GitLab Runnerシークレット

<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-runner-secret --from-literal=runner-registration-token=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

このシークレットはgitlab-runner.runners.secret設定で参照されます。

GitLabKASシークレット

GitLab Railsでは、KASサブチャートをインストールせずにこのチャートをデプロイする場合でも、KAS用のシークレットが必要です。ただし、以下の手順に従ってこのシークレットを手動で作成することも、チャートにシークレットを自動生成させることもできます。

<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-kas-secret --from-literal=kas_shared_secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)

このシークレットはglobal.appConfig.gitlab_kas.secret設定で参照されます。

GitLabKASAPIシークレット

チャートにシークレットを自動生成させることも、手動でこのシークレットを作成することもできます (<name>をリリース名に置き換えてください):

kubectl create secret generic <name>-kas-private-api --from-literal=kas_private_api_secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)

このシークレットはgitlab.kas.privateApi.secret設定で参照されます。

GitLabKAS WebSocketトークンシークレット

チャートにシークレットを自動生成させることも、手動でこのシークレットを作成することもできます (<name>をリリース名に置き換えてください):

kubectl create secret generic <name>-kas-websocket-token --from-literal=kas_websocket_token_secret=$(head -c 72 /dev/urandom | base64 -w0)

このシークレットはgitlab.kas.websocketToken.secret設定で参照されます。

MinIOシークレット

MinIO用のランダムな20および64文字の英数字キーのセットを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-minio-secret --from-literal=accesskey=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 20) --from-literal=secretkey=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

このシークレットはglobal.minio.credentials.secret設定で参照されます。

PostgreSQLパスワード

ランダムな64文字の英数字パスワードを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-postgresql-password \
    --from-literal=postgresql-password=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64) \
    --from-literal=postgresql-postgres-password=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

このシークレットはglobal.psql.password.secret設定で参照されます。

バンドルされているPostgreSQLサブチャートのPostgreSQLパスワードの変更

バンドルされているPostgreSQLサブチャートは、データベースが最初に作成されるときにのみ、シークレットからのパスワードでデータベースを設定します。既存のデータベースのパスワードを変更するには、追加の手順を実行する必要があります。

変更中はユーザーに影響が出る可能性があることに注意してください。

PostgreSQLシークレットをローテーションするには:

  1. PostgreSQLシークレットの一般的なシークレットのローテーション手順を完了してください。

  2. PostgreSQLポッドにexecして、データベース内のパスワードを更新します:

    # Exec into the PostgreSQL pod
    kubectl exec -it <name>-postgresql-0 -- sh
    
    # Inside the pod, update the passwords in the database
    sed -i 's/^\(local .*\)md5$/\1trust/' /opt/bitnami/postgresql/conf/pg_hba.conf
    pg_ctl reload ; sleep 1
    echo "ALTER USER postgres WITH PASSWORD '$(echo $POSTGRES_POSTGRES_PASSWORD)' ; ALTER USER gitlab WITH PASSWORD '$(echo $POSTGRES_PASSWORD)' ; ALTER USER registry WITH PASSWORD '$(echo $REGISTRY_POSTGRES_PASSWORD)'" | psql -U postgres -d gitlabhq_production -f -
    sed -i 's/^\(local .*\)trust$/\1md5/' /opt/bitnami/postgresql/conf/pg_hba.conf
    pg_ctl reload

    : レジストリユーザーのパスワード更新は、レジストリメタデータデータベース機能が有効になっている場合にのみ必要です。レジストリユーザーが存在しない場合、ALTER USER registryコマンドはエラーを生成しますが、他のパスワード更新には影響しません。

  3. gitlab-exporterpostgresqltoolboxsidekiqwebservice、およびregistryのポッドをkubectl delete podコマンドを使用して削除し、新しいポッドに新しいシークレットを読み込むことで、データベースに接続できるようにします。

GitLab Pagesシークレット

GitLab Pagesシークレットを生成します。これは32文字の長さで、base64エンコードされている必要があります。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-gitlab-pages-secret --from-literal=shared_secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)

このシークレットはglobal.pages.apiSecret.secret設定で参照されます。

レジストリHTTPシークレット

すべてのレジストリポッドで共有されるランダムな64文字の英数字キーを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-registry-httpsecret --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64 | base64)

このシークレットはglobal.registry.httpSecret.secret設定で参照されます。

レジストリ通知シークレット

すべてのレジストリポッドとGitLabウェブサービスポッドで共有されるランダムな32文字の英数字キーを生成します。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-registry-notification --from-literal=secret=[\"$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32)\"]

このシークレットはglobal.registry.notificationSecret.secret設定で参照されます。

Praefect DBパスワード

ランダムな64文字の英数字パスワードを生成します。<name>をリリース名に置き換えてください:

kubectl create secret generic <name>-praefect-dbsecret \
    --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64) \

このシークレットはglobal.praefect.dbSecret設定で参照されます。

外部サービス

一部のチャートには、自動的に生成できない機能を有効にするためのさらなるシークレットがあります。

OmniAuth

デプロイされたGitLabでOmniAuthプロバイダーの使用を有効にするには、Globalsチャート内の指示に従ってください。

LDAPパスワード

LDAPサーバーに接続するためにパスワード認証が必要な場合は、パスワードをKubernetesシークレットに保存する必要があります。

kubectl create secret generic ldap-main-password --from-literal=password=yourpasswordhere

次に、--set global.appConfig.ldap.servers.main.password.secret=ldap-main-passwordを使用してパスワードを設定に注入します。

SMTPパスワード

認証が必要なSMTPサーバーを使用している場合は、パスワードをKubernetesシークレットに保存します。

kubectl create secret generic smtp-password --from-literal=password=yourpasswordhere

次に、--set global.smtp.password.secret=smtp-passwordをHelmコマンドで使用します。

受信メール用IMAPパスワード

GitLabは、受信メールにアクセスするために、アプリパスワード、トークン、IMAPパスワードなどの認証文字列を使用します。

GitLab受信メールドキュメントでメールプロバイダーを見つけて、必要な認証文字列をKubernetesシークレットとして設定します。

kubectl create secret generic incoming-email-password --from-literal="password=auth_string_for_your_provider_here"

次に、--set global.appConfig.incomingEmail.password.secret=incoming-email-passwordをHelmコマンドで、ドキュメントで指定されている他の必要な設定とともに使用します。

サービスデスクメール用IMAPパスワード

GitLabは、サービスデスクメールにアクセスするために、アプリパスワード、トークン、IMAPパスワードなどの認証文字列を使用します。

GitLab受信メールドキュメントでメールプロバイダーを見つけて、必要な認証文字列をKubernetesシークレットとして設定します。

kubectl create secret generic service-desk-email-password --from-literal="password=auth_string_for_your_provider_here"

次に、--set global.appConfig.serviceDeskEmail.password.secret=service-desk-email-passwordをHelmコマンドで、ドキュメントで指定されている他の必要な設定とともに使用します。

GitLab受信メール認証トークン

受信メールがWebhook配信方法を使用するように設定されている場合、mail_roomサービスとウェブサービス間で共有シークレットが必要です。これは32文字の長さで、base64エンコードされている必要があります。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-incoming-email-auth-token --from-literal=authToken=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)

このシークレットはglobal.incomingEmail.authToken設定で参照されます。

GitLabサービスデスクメール認証トークン

サービスデスクメールがWebhook配信方法を使用するように設定されている場合、mail_roomサービスとウェブサービス間で共有シークレットが必要です。これは32文字の長さで、base64エンコードされている必要があります。<name>をリリース名に置き換えてください。

kubectl create secret generic <name>-service-desk-email-auth-token --from-literal=authToken=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 32 | base64)

このシークレットはglobal.serviceDeskEmail.authToken設定で参照されます。

Zoektインデクサー内部APIシークレット

GitLab-Zoektサブチャートがインストールされている場合、ZoektインデクサーはJWTを使用してGitLab内部APIに認証するします。デフォルトでは、このシークレットは自動生成されたGitLab Shellシークレットを再利用します。

Zoekt用に別のシークレットを使用したい場合は、手動で作成できます (<name>をリリース名に置き換えてください):

kubectl create secret generic <name>-zoekt-internal-api --from-literal=secret=$(head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64)

次に、チャートを設定して使用します:

--set global.zoekt.indexer.internalApi.secretName=<name>-zoekt-internal-api \
--set global.zoekt.indexer.internalApi.secretKey=secret

指定されていない場合、global.zoekt.indexer.internalApi.secretNameはGitLab Shell認証トークンシークレット (global.shell.authToken.secret) にデフォルト設定されます。

受信メール用Microsoft Graphクライアントシークレット

GitLabが受信メールにアクセスできるように、IMAPアカウントのパスワードをKubernetesシークレットに保存します:

kubectl create secret generic incoming-email-client-secret --from-literal=secret=your-secret-here

次に、--set global.appConfig.incomingEmail.clientSecret.secret=incoming-email-client-secretをHelmコマンドで、ドキュメントで指定されている他の必要な設定とともに使用します。

サービスデスクメール用Microsoft Graphクライアントシークレット

GitLabがサービスデスクメールにアクセスできるように、IMAPアカウントのパスワードをKubernetesシークレットに保存します:

kubectl create secret generic service-desk-email-client-secret --from-literal=secret=your-secret-here

次に、--set global.appConfig.serviceDeskEmail.clientSecret.secret=service-desk-email-client-secretをHelmコマンドで、ドキュメントで指定されている他の必要な設定とともに使用します。

送信メール用Microsoft Graphクライアントシークレット

パスワードをKubernetesシークレットに保存します:

kubectl create secret generic microsoft-graph-mailer-client-secret --from-literal=secret=your-secret-here

次に、--set global.appConfig.microsoft_graph_mailer.client_secret.secret=microsoft-graph-mailer-client-secretをHelmコマンドで使用します。

S/MIME証明書

送信メールメッセージは、S/MIME標準を使用してデジタル署名できます。S/MIME証明書は、TLSタイプのKubernetesシークレットとして保存する必要があります。

kubectl create secret tls smime-certificate --key=file.key --cert file.crt

不透明なタイプとして既存のシークレットがある場合は、特定のシークレットに合わせてglobal.email.smime.keyNameglobal.email.smime.certNameの値を調整する必要があります。

S/MIME設定は、values.yamlファイルまたはコマンドラインで設定できます。S/MIMEを有効にするには--set global.email.smime.enabled=trueを使用し、S/MIME証明書を含むシークレットを指定するには--set global.email.smime.secretName=smime-certificateを使用します。

スマートカード認証

スマートカード認証は、カスタム認証局 (CA) を使用してクライアント証明書に署名します。このカスタムCAの証明書は、クライアント証明書が有効かどうかを検証するために、ウェブサービスポッドに注入する必要があります。これはK8sシークレットとして提供されます。

kubectl create secret generic <secret name> --from-file=ca.crt=<path to CA certificate>

証明書が保存されているシークレット内のキー名はca.crtでなければなりません。

OAuthインテグレーション

GitLab PagesのようなさまざまなサービスのOAuthインテグレーションを設定するには、OAuth認証情報を含むシークレットが必要です。シークレットには、App ID (通常、appidキーの下にデフォルトで保存されます) とApp Secret (通常、appsecretキーの下にデフォルトで保存されます) を含める必要があります。これらは両方とも、少なくとも64文字の英数字文字列であることが推奨されます。

kubectl create secret generic oauth-gitlab-pages-secret --from-literal=appid=<app id> --from-literal=appsecret=<app secret>

このシークレットは、global.oauth.<service name>.secret設定を使用して指定できます。appidappsecret以外のキーが使用されている場合は、global.oauth.<service name>.appIdKeyglobal.oauth.<service name>.appSecretKey設定を使用して指定できます。

次の手順

すべてのシークレットが生成され保存されたら、GitLabをデプロイできます。

シークレットのローテーション

シークレットは、セキュリティ上の目的で必要な場合にローテーションできます。

  1. 現在のシークレットをバックアップします。
  2. 便宜上、ローテーションしたい各シークレットの手動シークレット作成手順に従って、-v2 (例: gitlab-shell-host-keys-v2) がサフィックスとして付加された新しいシークレットを作成してください。
  3. values.yamlファイル内のシークレットキーを更新して、新しいシークレット名を指すようにします。ほとんどのシークレット名は、手動シークレット作成セクションの各シークレットの下にドキュメント化されています。
  4. 更新されたvalues.yamlファイルでGitLabチャートリリースをアップグレードします。
  5. PostgreSQLシークレットをローテーションする場合は、ローテーションを完了するための追加手順があります。
  6. GitLabが期待どおりに動作していることを確認します。そうなった場合、古いシークレットを削除しても安全です。