鍵バージョンの破棄を制御する

Google Cloud には、組織全体に鍵バージョンの破棄ポリシーを設定する 2 つの組織のポリシー制約があります。

  • constraints/cloudkms.minimumDestroyScheduledDuration は、組織内の新しい鍵に対して破棄がスケジュールされている期間の最小長を設定するために使用します。
  • constraints/cloudkms.disableBeforeDestroy は、鍵バージョンを破棄するためにスケジュールする前に無効にする必要があります。

準備

このページの説明は、制約の使用に精通し、必要なリソースとロールを持っていることを前提としています。

必要なリソース

このページの手順を完了するには、次のリソースが必要となります。

  • 組織。
  • (省略可)組織内のフォルダまたはプロジェクト リソース。

必要なロール

組織のポリシーを管理するために必要な権限を取得するには、組織の組織ポリシー管理者roles/orgpolicy.policyAdmin)の IAM ロールを付与するよう管理者に依頼してください。 ロールの付与の詳細については、アクセスの管理をご覧ください。

この事前定義ロールには、組織のポリシーを管理するために必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。

必要な権限

組織のポリシーを管理するには、次の権限が必要です。

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

最小の破棄がスケジュールされている期間が必要

鍵あたりの最小破棄スケジュール期間の制約(constraints/cloudkms.minimumDestroyScheduledDuration)を使用して、新しい鍵の破棄の予定の最小期間の長さを設定するために使用されます。この制約は、プロジェクト、フォルダ、または組織レベルで、最小の破棄の予定期間をオーバーライドします。この制約により、引き続き必要な鍵が誤って破棄される可能性が低くなります。この制約を高い値に設定すると、鍵の破棄が元に戻せなくなる前に時間を確保できます。

データ保持要件の対象となる本番環境データなど、不要な鍵の破棄がより有害な場合は、この制約に高い値を使用します。開発環境やテスト環境など、不要な鍵の破棄が問題にならない場合は、この制約に小さい値を使用します。また、低い値を使用して、タイムリーな暗号シュレッディングを許可することもできます。ただし、最小値として、この制約では、短い破棄の予定期間で新しい鍵が作成されることを保証できません。

破棄の予定期間を最小にするには、次の手順を行います。

  1. describe コマンドを使用して、組織リソースに関する現在のポリシーを取得します。このコマンドを実行すると、このリソースに直接適用されたポリシーが返されます。

    gcloud org-policies describe \
      constraints/cloudkms.minimumDestroyScheduledDuration \
      --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID は、組織リソースの固有識別子に置き換えます。組織 IDは 10 進数で表示され、先頭にゼロを付けることはできません。

    --folder または --project フラグ、およびフォルダ ID またはプロジェクト ID をそれぞれ使用して、フォルダやプロジェクトの組織ポリシーを表示することもできます。

    現在の組織ポリシーがある場合は、レスポンスで返されます。出力は次のようになります。

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      etag: COTP+KYGELiCmsoB
      inheritFromParent: true
      rules:
      - values:
          allowedValues:
          - in:7d
      updateTime: '2023-08-17T14:00:04.424051Z'
    

    ポリシーが設定されていない場合は、describe コマンドは NOT_FOUND エラーを返します。

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. set-policy コマンドを使用して、組織にポリシーを設定します。このコマンドを実行すると、現在リソースに適用されているポリシーが上書きされます。

    1. ポリシーを保存する一時ファイル /tmp/policy.yaml を作成します。

      name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
      spec:
        rules:
        - values:
            allowedValues:
            - in:MINIMUM_DURATION
      

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

      • ORGANIZATION_ID: 組織の数値 ID。
      • MINIMUM_DURATION: この組織の鍵の破棄の予定状態の最小期間(日数)。7d15d30d60d90d120d のいずれかの値にする必要があります。
    2. set-policy コマンドを実行します。

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. describe --effective を使用して、現在の有効なポリシーを表示します。このコマンドを実行すると、その時点でリソース階層において継承可能と評価された組織のポリシーが返されます。

    gcloud org-policies describe \
      constraints/cloudkms.minimumDestroyScheduledDuration --effective \
      --organization=ORGANIZATION_ID
    

    出力は次のようになります。

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      rules:
        - values:
            allowedValues:
            - 30d
            - 15d
            - 90d
            - 60d
            - 7d
            - 120d
    

    この組織ポリシーは組織レベルで設定されているため、継承が許可されているすべての子リソースで継承されます。

破棄の前に鍵の無効化を要求する

鍵の破棄を無効な鍵に制限する制約(constraints/cloudkms.disableBeforeDestroy)では、鍵の破棄をスケジュールする前に鍵を無効にする必要があります。鍵は、使用していない前に検証できるため、破棄する前に無効にすることをおすすめします。この制約を重要な Identity and Access Management ポリシーと組み合わせることで、複数のロールからの協力を必要とする複数のステップからなる破棄プロセスを作成できます。

この制約を使用して複数ステップの破棄プロセスを作成するには、ユーザーが cloudkms.cryptoKeyVersions.update 権限と cloudkms.cryptoKeyVersions.destroy 権限の両方を持たないことを確認してください。このユースケースでは、カスタムロールを使用する必要があります。

鍵の破棄をスケジュールする前に、鍵を無効状態にするには、次の手順を行います。

gcloud

  1. describe コマンドを使用して、組織リソースに関する現在のポリシーを取得します。このコマンドを実行すると、このリソースに直接適用されたポリシーが返されます。

    gcloud org-policies describe \
      constraints/cloudkms.disableBeforeDestroy \
      --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID は、組織リソースの固有識別子に置き換えます。組織 IDは 10 進数で表示され、先頭にゼロを付けることはできません。

    --folder または --project フラグ、およびフォルダ ID またはプロジェクト ID をそれぞれ使用して、フォルダやプロジェクトの組織ポリシーを表示することもできます。

    現在の組織ポリシーがある場合は、レスポンスで返されます。出力は次のようになります。

    name: organizations/ORGANIZATION_ID/policies/cloudkms.disableBeforeDestroy
    spec:
      etag: CPvY+KYGENDwgxA=
      rules:
      - enforce: true
      updateTime: '2023-08-17T14:19:39.033618Z'
    

    ポリシーが設定されていない場合は、describe コマンドは NOT_FOUND エラーを返します。

    ERROR: (gcloud.org-policies.describe) NOT_FOUND: Requested entity was not found.
    
  2. set-policy コマンドを使用して、組織にポリシーを設定します。このコマンドは、リソースにすでに接続されているポリシーを上書きします。

    1. ポリシーを保存する一時ファイル /tmp/policy.yaml を作成します。

      name: organizations/ORGANIZATION_ID/policies/cloudkms.disableBeforeDestroy
      spec:
        rules:
        - enforce: true
      

      ORGANIZATION_ID は、組織リソースの一意の識別子に置き換えます。

    2. set-policy コマンドを実行します。

      gcloud org-policies set-policy /tmp/policy.yaml
      
  3. describe --effective を使用して、現在の有効なポリシーを表示します。このコマンドを実行すると、その時点でリソース階層において継承可能と評価された組織のポリシーが返されます。

    gcloud org-policies describe \
      constraints/cloudkms.disableBeforeDestroy --effective \
      --organization=ORGANIZATION_ID
    

    出力は次のようになります。

    name: organizations/ORGANIZATION_ID/policies/cloudkms.minimumDestroyScheduledDuration
    spec:
      rules:
      - enforce: true
    

    この組織ポリシーは組織レベルで設定されているため、継承が許可されているすべての子リソースで継承されます。

次のステップ