プロジェクトのストレージ バケットを作成する

このページでは、Google Distributed Cloud(GDC)エアギャップ ストレージ バケットを作成する方法について説明します。

始める前に

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

必要な IAM のロール

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

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

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

環境を準備する

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

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

ストレージ バケットの命名ガイドライン

バケット名は、次の命名規則に沿って付ける必要があります。

  • プロジェクト内で一意である。管理 API サーバーは、バケットの完全修飾名に一意の接頭辞を付加して、組織内で競合が発生しないようにします。組織間で接頭辞とバケット名が競合する可能性は低いですが、競合が発生した場合は、バケットの作成が失敗し、「バケット名が使用中」というエラーが表示されます。
  • 個人を特定できる情報(PII)は含めないでください。
  • DNS に準拠している。
  • 1 ~ 55 文字で指定します。
  • 先頭は英字にし、英字、数字、ハイフンのみを使用してください。

バケットの作成

デフォルトでは、バケットは Standard ストレージ クラスを使用します。インフラストラクチャ オペレーター(IO)によって Nearline Storage が有効になっている場合は、アクセス頻度の低いデータに Nearline ストレージ クラスを選択することもできます。Nearline Storage は、シングルゾーン バケットとデュアルゾーン バケットの両方でサポートされています。

コンソール

  1. ナビゲーション メニューで [オブジェクト ストレージ] をクリックします。
  2. プロジェクト セレクタで、バケットを作成するプロジェクトを選択します。
  3. [バケットを作成] をクリックします。
  4. バケット作成フローで、プロジェクト内のすべてのバケットで一意の名前を割り当てます。
  5. 内容を入力してください。
  6. [ストレージ クラス] で、[Standard] または [Nearline] を選択します。[Nearline] オプションは、Nearline Storage が有効になっている場合にのみ表示されます。
  7. 省略可: toggle_off 切り替えボタンをクリックして保持ポリシーを設定し、希望する日数を入力します。保持ポリシーの上限を超える必要がある場合は、IO にお問い合わせください。
  8. [作成] をクリックします。成功メッセージが表示され、[バケット] ページに戻ります。

新しいバケットが正常に作成されたことを確認するには、数分後に [バケット] ページを更新し、バケットの状態が Not ready から Ready に更新されていることを確認します。

gdcloud

Nearline ストレージ クラスを使用して gdcloud でシングルゾーン バケットを作成するには:

gdcloud storage buckets create BUCKET_NAME \
    --location=ZONE_NAME \
    --location-type=SingleZone \
    --storage-class=Nearline

グローバル ロケーションを使用して gdcloud でデュアルゾーン バケットを作成するには:

gdcloud storage buckets create BUCKET_NAME \
    --location=ZONE_1,ZONE_2 \
    --location-type=AsyncDualZone \
    --storage-class=Nearline

--storage-class を省略すると、デフォルトで Standard が使用されます。

詳細については、gdcloud storage buckets create をご覧ください。

API

ゾーンバケットを作成するには、プロジェクトの名前空間にバケット仕様を適用します。

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f bucket.yaml

Standard ストレージ クラスを使用したバケット仕様の例を次に示します。

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
spec:
  description: DESCRIPTION
  storageClass: Standard
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

Nearline ストレージ クラスを使用したバケット仕様の例を次に示します。

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
spec:
  description: DESCRIPTION
  storageClass: Nearline
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

暗号化バージョンが v1 のバケット仕様の例を次に示します。

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
  labels:
    object.gdc.goog/encryption-version: v1
spec:
  description: DESCRIPTION
  storageClass: Standard
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

詳細については、Bucket API リファレンスをご覧ください。

グローバル API サーバーのデュアルゾーン バケット仕様の例を次に示します。

apiVersion: object.global.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: PROJECT_NAME
spec:
  location: LOCATION_NAME
  description: Sample DZ Bucket
  storageClass: Standard

Nearline Storage を使用してデュアルゾーン バケットを作成するには、storageClass: Nearline を設定します。

デュアルゾーン バケットでサポートされているのは V2 暗号化のみです。デュアルゾーン バケット リソースの作成、更新、削除のすべてのオペレーションは、グローバル API サーバーに対して実行する必要があります。

デュアルゾーン バケットを作成するには、グローバル API サーバーに仕様を適用します。

kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f bucket.yaml

バケットを作成したら、次のコマンドを実行してバケットの詳細を確認します。

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG describe buckets BUCKET_NAME -n PROJECT_NAMESPACE

[ステータス] セクションには、[暗号化](暗号化の詳細)と [完全修飾名](FULLY_QUALIFIED_BUCKET_NAME を含む)という 2 つの重要なフィールドがあります。

暗号化 v1

この情報は、obj-FULLY_QUALIFIED_BUCKET_NAME という名前の AEADKey に関するもので、バケットに保存されているオブジェクトの暗号化に使用される暗号鍵への参照として機能します。以下に例を示します。

Status:
  Encryption:
    Key Ref:
      Kind: AEADKey
      Name: obj-FULLY_QUALIFIED_BUCKET_NAME
      Namespace: PROJECT_NAMESPACE
    Type: CMEK

暗号化 v2

この情報は、アクティブなデフォルトの AEADKeys の参照として機能する kek-ref-FULLY_QUALIFIED_BUCKET_NAME という名前の Secret に関連しています。特定の AEADKey が指定されていない場合、バケットにアップロードされたオブジェクトを暗号化するために、アクティブなデフォルトの AEADKey がランダムに選択されます。

以下に例を示します。

Status:
  Encryption:
    Key Ref:
      Kind: Secret
      Name: kek-ref-FULLY_QUALIFIED_BUCKET_NAME
      Namespace: PROJECT_NAMESPACE
    Type: CMEK

次のコマンドを実行して、必要な AEADKeys が作成されていることを確認することもできます。

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get aeadkeys -n PROJECT_NAMESPACE -l  cmek.security.gdc.goog/resource-name=FULLY_QUALIFIED_BUCKET_NAME