このドキュメントでは、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)
- プロジェクト IAM 管理者(
- バックアップ リポジトリを作成するには、ユーザーに次の組織レベルのロールが必要です。
- ツール:
- GDC コンソール。
- 管理 API サーバーにアクセスするように構成された kubectl CLI。
オブジェクト ストレージ バケットを作成する
以降の手順はすべて管理 API サーバーで実行されます。Bucket リソースを定義して作成します。このドキュメントでは、このストレージ バケットの推奨名 dbs-backups が backups プロジェクト Namespace 内にあるものとします。バケットに保持ポリシーが設定されていないことを確認します。
コンソール
- 組織の GDC コンソールにログインします。
backupsプロジェクトにいることを確認します。- [Object Storage] > [バケット] に移動します。
- [バケットを作成] をクリックします。
- バケット名を
dbs-backupsに設定します。 - 説明を
Bucket for DBS backupsに設定します。 - 必要に応じてストレージ クラスを構成します。例:
Standard - セキュリティについては、保持ポリシーを設定しないようにしてください。設定すると、データベースとそのバックアップが誤って保持されることになります。
- [作成] をクリックします。
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 を作成し、バケットへのアクセス権を付与します。
コンソール
backupsプロジェクトで、[ID とアクセス] > [サービス アカウント] に移動します。- [サービス アカウントを作成] をクリックし、
dbs-backup-saという名前を付けます。 - 権限を付与する手順は次のとおりです。
- [Object Storage] > [バケット] > [dbs-backups] > [権限] に移動します。
- [プリンシパルを追加] をクリックします。
- [サービス アカウント] を選択します:
dbs-backup-sa。 - ロールを選択: オブジェクトの読み取りと書き込みアクセス権を付与するロール(Storage オブジェクト管理者など)。
- [追加] をクリックします。
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 は 同じ Namespace に backups というシークレットを自動的に作成します。このシークレットには S3 アクセス認証情報が含まれています。この Secret の名前を見つける必要があります。
コンソール
- シークレット名を見つけます。
backupsプロジェクトの [Kubernetes Engine] > [構成] > [シークレット] に移動します。object-storage-key-std-sa-で始まるシークレットを探し、アノテーションを調べてobject.gdc.goog/subjectがdbs-backup-saであることを確認します。- このシークレット名をメモします。
- バケットの詳細を確認します。
- [Object Storage] > [バケット] > [dbs-backups] の詳細ページに移動します。
ENDPOINT、REGION、FULL_BUCKET_NAMEを見つけてメモします。
API
環境変数を設定します。
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERシークレット名を確認します。
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}"このコマンドは、
backupsNamespace の Secret をフィルタして、dbs-backup-sa用にアノテーションが付けられ、標準の命名規則に一致する Secret を見つけます。バケットのエンドポイントとリージョンの詳細を取得します。
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: バケットのリージョン。
バックアップの検証
リポジトリのステータスを確認して、正しく設定されていることを確認します。
バックアップ リポジトリの情報を出力します。
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .status次のような出力が表示されることを確認します。
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