ストレージ WORM バケットを作成する

このページでは、Google Distributed Cloud(GDC)のエアギャップ環境で Write Once Read Many(WORM)ストレージ バケットを作成する方法について説明します。ここでは、保持期間が定義された WORM バケットを作成するための前提条件と手順、ロール バインディングを使用してアクセス権限を付与する手順について説明します。この情報を使用すると、厳格なデータ保持と不変性を適用し、監査ロギングなどのレコードやユースケースに対して堅牢でコンプライアンスに準拠したデータ ストレージを提供できます。

このページは、インフラストラクチャ オペレーター グループの IT 管理者や、GDC エアギャップ環境でストレージ バケットのデータの保持とコンプライアンスの設定を管理するアプリケーション オペレーター グループのデベロッパーなど、読者を対象としています。詳細については、GDC エアギャップの対象読者に関するドキュメントをご覧ください。

始める前に

ストレージ バケットは、特定プロジェクトにスコープ設定されたリソースです。プロジェクトはコンテナとして機能し、バケットをグループ化して、Management API サーバーを介した管理を可能にします。このページでオペレーションを実行する前に、新しいプロジェクトを作成するか、十分な権限を持つ既存のプロジェクトを選択する必要があります。

必要な IAM のロール

IAM プロジェクト管理者に連絡して、プロジェクトの Namespace で次のロールをリクエストします。

  • プロジェクト バケット管理者(project-bucket-admin): ストレージ バケットの作成、更新、削除。
  • プロジェクト バケット オブジェクト閲覧者(project-bucket-object-viewer): ストレージ バケットとオブジェクトの詳細を表示して確認します。

詳細については、バケットへのアクセス権を付与するをご覧ください。

環境を準備する

管理 API サーバーまたはグローバル API サーバーに対してコマンドを実行するには、次の操作を行います。

  1. ゾーン管理 API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
  2. デュアルゾーン バケットの場合は、次の操作を行います。
    • インフラストラクチャ オペレーター(IO)に、ペア設定されたゾーンの BucketLocationConfig カスタム リソースが作成されていることを確認します。
    • グローバル API サーバーの kubeconfig ファイルを生成します。

WORM バケットを作成する

WORM バケットでは、オブジェクトが上書きされることはなく、最小期間保持されます。監査ロギングは、WORM バケットのユースケースの一例です。

WORM バケットを作成する手順は次のとおりです。

  1. バケットの作成時に保持期間を設定します。保持期間は、各オブジェクト バージョンが削除や変更からロックされる日数を定義します。この保持期間は、ストレージ クラスの最小保存期間(Standard ストレージ クラスの 30 日間など)とは異なります。たとえば、次のバケットは保持期間を 365 日に設定します。保持ポリシーの上限を超える必要がある場合は、インフラストラクチャ オペレーター(IO)にお問い合わせください。

    apiVersion: object.gdc.goog/v1
    kind: Bucket
    metadata:
      name: foo-logging-bucket
      namespace: foo-service
    spec:
      description: "Audit logs for foo"
      storageClass: Standard
      bucketPolicy:
        lockingPolicy:
          defaultObjectRetentionDays: 365
    
  2. 読み取り専用アクセスが必要なすべてのユーザーに project-bucket-object-viewer ロールを付与します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: foo-service
      name: object-readonly-access
    roleRef:
      kind: Role
      name: project-bucket-object-viewer
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: foo-service
      name: foo-log-processor
    - kind: User
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
    
  3. バケットにコンテンツを書き込む必要があるユーザーに project-bucket-object-admin ロールを付与します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: foo-service
      name: object-write-access
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: foo-service
      name: foo-service-account