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

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
    

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

次のステップ