Database Service のバックアップ リポジトリを作成する

このドキュメントでは、Google Distributed Cloud(GDC)エアギャップ データベース サービス(DBS)に必要な BackupRepository を構成する手順について説明します。このリポジトリ(必ず dbs-backup-repository という名前)は、Kubernetes 内のカスタム リソースであり、データベース バックアップを保存する S3 互換オブジェクト ストレージ バケットに GDC バックアップ サービスを転送します。

PostgreSQL、Oracle、AlloyDB Omni などの DBS インスタンスのバックアップと復元機能を有効にするには、適切な設定が不可欠です。

始める前に

開始する前に、次の前提条件を満たしていることを確認してください。

  • プロジェクト: バケットをホストするプロジェクト。通常は database-backups という名前で、サービス アカウント アクセスのみが付与されます。
  • アクセス: 管理 API サーバーとやり取りするための十分な権限。
    • バックアップ リポジトリを作成するには、ユーザーに次の組織レベルのロールが必要です。
      • バケット管理者(bucket-admin
      • プロジェクト作成者(project-creator
      • 組織バックアップ管理者(organization-backup-admin
    • ターゲット プロジェクト内:
      • プロジェクト IAM 管理者(project-iam-admin
      • プロジェクト バケット オブジェクト閲覧者(project-bucket-object-viewer
      • プロジェクト バケット オブジェクト管理者(project-bucket-object-admin
      • プロジェクト バケット管理者(project-bucket-admin
      • Namespace 管理者(namespace-admin
      • バックアップ作成者(backup-creator
  • ツール:
    • GDC コンソール。
    • 管理 API サーバーにアクセスするように構成された kubectl CLI

オブジェクト ストレージ バケットを作成する

以降の手順はすべて管理 API サーバーで実行されます。Bucket リソースを定義して作成します。このドキュメントでは、このストレージ バケットの推奨名 dbs-backupsbackups プロジェクト Namespace 内にあるものとします。バケットに保持ポリシーが設定されていないことを確認します。

コンソール

  1. 組織の GDC コンソールにログインします。
  2. backups プロジェクトにいることを確認します。
  3. [Object Storage] > [バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. バケット名を dbs-backups に設定します。
  6. 説明を Bucket for DBS backups に設定します。
  7. 必要に応じてストレージ クラスを構成します。例: Standard
  8. セキュリティについては、保持ポリシーを設定しないようにしてください。設定すると、データベースとそのバックアップが誤って保持されることになります。
  9. [作成] をクリックします。

API

  • 次のマニフェストを Management API サーバーに適用します。
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: dbs-backups
  namespace: backups
spec:
  description: "Bucket for DBS backups"
  storageClass: "Standard"
EOF

サービス アカウントを作成して権限を設定する

ProjectServiceAccount を作成し、バケットへのアクセス権を付与します。

コンソール

  1. backups プロジェクトで、[ID とアクセス] > [サービス アカウント] に移動します。
  2. [サービス アカウントを作成] をクリックし、dbs-backup-sa という名前を付けます。
  3. 権限を付与する手順は次のとおりです。
    1. [Object Storage] > [バケット] > [dbs-backups] > [権限] に移動します。
    2. [プリンシパルを追加] をクリックします。
    3. [サービス アカウント] を選択します: dbs-backup-sa
    4. ロールを選択: オブジェクトの読み取りと書き込みアクセス権を付与するロール(Storage オブジェクト管理者など)。
    5. [追加] をクリックします。

API

  • これらのマニフェストを管理 API サーバーに適用します。
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: resourcemanager.gdc.goog/v1
kind: ProjectServiceAccount
metadata:
  name: dbs-backup-sa
  namespace: backups
spec: {}
EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dbs-backups-readwrite-role
  namespace: backups
rules:
- apiGroups: ["object.gdc.goog"]
  resources: ["bucket"]
  resourceNames: ["dbs-backups"]
  verbs: ["read-object", "write-object"]
EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dbs-backups-readwrite-rolebinding
  namespace: backups
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: dbs-backups-readwrite-role
subjects:
- kind: ServiceAccount
  name: dbs-backup-sa
  namespace: backups
EOF

サービス アカウントの認証情報シークレットとバケットの詳細を特定する

dbs-backup-sa にバケット アクセス権を付与すると、GDC は 同じ Namespacebackups というシークレットを自動的に作成します。このシークレットには S3 アクセス認証情報が含まれています。この Secret の名前を見つける必要があります。

コンソール

  1. シークレット名を見つけます。
    1. backups プロジェクトの [Kubernetes Engine] > [構成] > [シークレット] に移動します。
    2. object-storage-key-std-sa- で始まるシークレットを探し、アノテーションを調べて object.gdc.goog/subjectdbs-backup-sa であることを確認します。
    3. このシークレット名をメモします。
  2. バケットの詳細を確認します。
    1. [Object Storage] > [バケット] > [dbs-backups] の詳細ページに移動します。
    2. ENDPOINTREGIONFULL_BUCKET_NAME を見つけてメモします。

API

  1. 環境変数を設定します。

    export SA_NAMESPACE="backups"
    export SA_NAME="dbs-backup-sa"
    export KUBECONFIG=MANAGEMENT_API_SERVER
    
  2. シークレット名を確認します。

    export BUCKET_CRED_SECRET_NAME=$(kubectl --kubeconfig=${KUBECONFIG} get secret \
        -n "${SA_NAMESPACE}" -l object.gdc.goog/subject-type=ServiceAccount -o json | \
        jq -r --arg SA_NAME "${SA_NAME}" \
        '.items[] | select(.metadata.annotations["object.gdc.goog/subject"] == $SA_NAME and (.metadata.name |startswith("object-storage-key-std-sa-"))) | .metadata.name')
    echo "Bucket Credential Secret Name: ${BUCKET_CRED_SECRET_NAME}"
    

    このコマンドは、backups Namespace の Secret をフィルタして、dbs-backup-sa 用にアノテーションが付けられ、標準の命名規則に一致する Secret を見つけます。

  3. バケットのエンドポイントとリージョンの詳細を取得します。

    export BUCKET_NAME=dbs-backups
    export FULL_BUCKET_NAME=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.fullyQualifiedName}')
    export ENDPOINT=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.endpoint}')
    export REGION=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.region}')
    
    echo "FULL_BUCKET_NAME: ${FULL_BUCKET_NAME}"
    echo "ENDPOINT: ${ENDPOINT}"
    echo "REGION: ${REGION}"'
    

BackupRepository を作成する

前のセクションのサービス アカウントの認証情報シークレットとバケットの詳細を確認するで特定したシークレットを参照して、BackupRepository リソースを作成します。この手順は、kubectl CLI(API)を使用して完了する必要があります。

  • 前のセクションの変数を置き換えて、backup-repo.yaml などの YAML ファイルを作成します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
    <<EOF
    apiVersion: backup.gdc.goog/v1
    kind: BackupRepository
    metadata:
      name: dbs-backup-repository # This specific name is required for DBS
    spec:
      secretReference:
        namespace: "backups" # Namespace of the Service Account and the auto-generated secret
        name: BUCKET_CRED_SECRET_NAME
      endpoint: ENDPOINT
      type: "S3"
      s3Options:
        bucket: FULL_BUCKET_NAME"
        region: REGION
        forcePathStyle: true
      importPolicy: "ReadWrite"
      force: true
      EOF
    

    次のように置き換えます。

    • BUCKET_CRED_SECRET_NAME: シークレット名
    • ENDPOINT: バケットのエンドポイント。
    • FULL_BUCKET_NAME": バケットの完全修飾名。
    • REGION: バケットのリージョン。

バックアップの検証

リポジトリのステータスを確認して、正しく設定されていることを確認します。

  1. バックアップ リポジトリの情報を出力します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .status
    
  2. 次のような出力が表示されることを確認します。NoError メッセージは、リポジトリが想定どおりに設定されたことを示すシグナルです。

    NAME                    TYPE   POLICY      ERROR
    dbs-backup-repository   S3     ReadWrite   NoError
    status:
      conditions:
      - lastTransitionTime: "2025-11-13T00:36:09Z"
        message: Backup Repository reconciled successfully
        reason: Ready
        status: "True"
        type: Ready
      initialImportDone: true
      reconciliationError: NoError
      sentinelEtag: 9b82fbb7-6ea2-444d-8878-ab91397ae961