Cloud KMS Autokey を有効にする

このドキュメントでは、 Google Cloud コンソール、Google Cloud CLI、Cloud KMS API、または Terraform を使用して Cloud KMS Autokey を有効にして構成する方法について説明します。フォルダに対して専用プロジェクトの鍵ストレージで Autokey を有効にするか、個々のプロジェクトまたはフォルダ内のすべてのプロジェクトに対して同じプロジェクトの鍵ストレージで Autokey を有効にできます。Autokey の詳細については、 Autokey の概要をご覧ください。

このドキュメントは管理者を対象としています。

Autokey 構成の継承

フォルダで Autokey を構成すると、そのフォルダ内の子フォルダとプロジェクトは、親フォルダの Autokey 構成を継承します。子フォルダまたはプロジェクトで Autokey を構成する場合は、親リソースから構成を継承するか、そのリソースの新しい Autokey 構成を作成するかを決定します。子リソースに適用された Autokey 構成は、親フォルダの構成をオーバーライドします。

次の表に、サポートされている Autokey 構成のユースケースを示します。

リソースの種類 Autokey の構成 説明
組織 該当なし 組織で Autokey を有効にすることはできません。組織内の子リソースは、空の AutokeyConfig リソースを継承します。 Google Cloud コンソールでは、これらのリソースの Autokey のステータスが [有効になっていません] と表示されます。組織内で Autokey の使用を制限したり、完全に無効にしたりする場合は、組織のポリシーを使用できます。詳細については、Autokey の使用を制御するをご覧ください。
フォルダ DEDICATED_KEY_PROJECT フォルダ内のリソース プロジェクトに対して、専用プロジェクトの鍵ストレージを使用する Autokey が有効になっています。この構成を継承するリソース プロジェクトの場合、Autokey は専用の鍵プロジェクトに鍵を作成します。
フォルダ RESOURCE_PROJECT フォルダ内のリソース プロジェクトに対して、同じプロジェクトの鍵ストレージを使用する Autokey が有効になっています。この構成を継承するリソース プロジェクトの場合、Autokey は保護対象のリソースと同じプロジェクトに鍵を作成します。
フォルダ DISABLED フォルダ内で Autokey は無効になりますが、子フォルダとプロジェクトは引き続きこの構成をオーバーライドできます。フォルダ内で Autokey を制限したり、完全に無効にしたりする場合は、組織のポリシーを使用できます。詳細については、Autokey の使用を制御するをご覧ください。
フォルダ KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED フォルダは、親フォルダまたは組織から Autokey 構成を継承します。
プロジェクト RESOURCE_PROJECT リソース プロジェクトで、同じプロジェクトの鍵ストレージを使用する Autokey が有効になっています。このプロジェクトで作成されたリソースの場合、Autokey は同じプロジェクトに鍵を作成します。
プロジェクト DISABLED リソース プロジェクトで Autokey が無効になっています。このプロジェクトでリソースを作成するデベロッパーは、作成するリソースに CMEK を使用する場合は、鍵を手動で作成してプロビジョニングする必要があります。
プロジェクト KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED プロジェクトは、親フォルダから Autokey 構成を継承します。

始める前に

フォルダの専用プロジェクトの鍵ストレージで Autokey を有効にするには、次のものが必要です。

  • Autokey を有効にするフォルダを含む組織のリソース。Autokey を有効にするフォルダがない場合は、新しいリソース フォルダを作成できます。このフォルダで Autokey を有効にすると、フォルダ内のすべてのリソース プロジェクトで Autokey が有効になります。

  • 専用プロジェクトの鍵ストレージで Autokey を使用するリソース プロジェクトがあるが、Autokey を有効にするフォルダ内にない場合は、既存のリソース プロジェクトを新しいフォルダに移動できます。

同じプロジェクトの鍵ストレージで Autokey を有効にするには、次のいずれかが必要です。

  • Autokey を有効にするプロジェクト。keyHandles.create 権限が IAM 拒否ポリシーによってブロックされていないプロジェクト。 Google Cloud
  • Autokey を有効にするフォルダ。このフォルダには、keyHandles.create 権限が IAM 拒否ポリシーによってブロックされていないプロジェクトが少なくとも 1 つ含まれています。 Google Cloud

必要なロール

Autokey を有効にして構成するために必要な権限を取得するには、フォルダ、プロジェクト、または親リソースに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、Autokey を有効にして構成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

Autokey を有効にして構成するには、次の権限が必要です。

  • Autokey を有効にするには:
    • cloudkms.autokeyConfigs.*
    • serviceusage.services.enable
  • 専用プロジェクトの鍵ストレージで Autokey を有効にするには:
    • resourcemanager.folders.get
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
    • billing.resourceAssociations.create
  • Autokey の構成を表示する:
    • cloudkms.folders.showEffectiveAutokeyConfig
    • cloudkms.projects.showEffectiveAutokeyConfig
  • 有効な Autokey 構成をすべて表示するには:
    • cloudasset.assets.query
    • serviceusage.services.use

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

Terraform の設定

このセクションには、このドキュメントの残りの Terraform サンプルの前提条件となる Terraform 変数とリソースの例が記載されています。Terraform を使用して Autokey 構成を作成または管理していない場合は、このセクションをスキップしてください。

ここをクリックすると、Terraform の設定例の表示と非表示を切り替えることができます

このサンプルでは、次の設定手順が完了します。

  1. 以降の Terraform サンプルで使用する変数を定義します。
  2. リソース フォルダを作成します。個々のプロジェクトで同じプロジェクトのキー ストレージのみを使用する場合は、この手順をスキップできます。
  3. Autokey の管理者ロールとユーザーロールを付与します。
  variable "organization_ID" {
    description = "Your Google Cloud Org ID"
    type        = string
    default     = "ORGANIZATION_ID"
  }

  variable "billing_account" {
    description = "Your Google Cloud Billing Account ID"
    type        = string
    default     = "BILLING_ACCOUNT_ID"
  }

  /* List the users who should have the authority to enable and configure
    Autokey at a folder level */
  variable "autokey_folder_admins" {
    type    = list(string)
    default = [AUTOKEY_ADMIN_USER_IDS]
  }

  /* List the users who should have the authority to protect their resources
    with Autokey */
  variable "autokey_folder_users" {
    type    = list(string)
    default = [AUTOKEY_DEVELOPER_USER_IDS]
  }

  /* List the users who should have the authority to manage crypto operations
    in the Autokey key project */
  variable "autokey_project_kms_admins" {
    type    = list(string)
    default = [KEY_PROJECT_ADMIN_USER_IDS]
  }

  # Create a new folder
  resource "google_folder" "autokey_folder" {
    parent       = "organizations/${var.organization_ID}"
    display_name = "autokey_folder"
  }
  /* To use a folder that already exists, omit this block and instead create a
     variable for the folder ID instead, and then update subsequent resources
     to use the variable. */

  # Set permissions for key admins to use Autokey in this folder
  resource "google_folder_iam_binding" "autokey_folder_admin" {
    folder  = google_folder.autokey_folder.name
    role    = "roles/cloudkms.autokeyAdmin"
    members = var.autokey_folder_admins
  }

  /* Set permissions for users to protect resources with Autokey in
    this folder */
  resource "google_folder_iam_binding" "autokey_folder_users" {
    folder  = google_folder.autokey_folder.name
    role    = "roles/cloudkms.autokeyUser"
    members = var.autokey_folder_users
  }
  

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

  1. BILLING_ACCOUNT_ID: Google Cloud 請求先アカウント ID。請求先アカウント ID は、ダッシュで区切られた 18 文字の英数字の値です(例: 010101-F0FFF0-10XX01)。
  2. AUTOKEY_ADMIN_USER_IDS: `roles/cloudkms.autokeyAdmin` ロールを持つ必要があるユーザーのメールアドレスのリスト(例: "Ariel@example.com", "Charlie@example.com")。
  3. AUTOKEY_DEVELOPER_USER_IDS: `roles/cloudkms.autokeyUser` ロールを持つ必要があるユーザーのメールアドレスのリスト(例: "Kalani@example.com", "Mahan@example.com")。
  4. KEY_PROJECT_ADMIN_USER_IDS: `roles/cloudkms.admin` ロールを持つ必要があるユーザーのメールアドレスのリスト(例: "Sasha@example.com", "Nur@example.com")。

専用プロジェクトの鍵ストレージを使用して Autokey を設定する

フォルダで専用プロジェクトの鍵ストレージを使用して Autokey を使用する場合は、そのフォルダの Autokey によって作成されたすべての鍵を含む単一の鍵プロジェクトを選択する必要があります。同じプロジェクトの鍵ストレージを使用している場合は、専用の鍵プロジェクトは必要ありません。同じプロジェクトの鍵ストレージで Autokey を有効にするから続行します。

Autokey で作成された Cloud KMS リソースを格納する新しい鍵プロジェクトを作成することをおすすめします。鍵プロジェクトは組織のリソース内に作成する必要があります。Autokey によって作成された鍵に使用する鍵プロジェクトがすでにある場合は、鍵プロジェクトを作成するのセクションをスキップして、このページの Autokey 鍵プロジェクトを構成するから続けてください。

鍵プロジェクトは、Autokey を有効にするフォルダと同じフォルダ内に作成できます。鍵プロジェクト内に他のリソースを作成しないでください。鍵プロジェクトに Autokey で保護されたリソースを作成しようとすると、Autokey は新しい鍵のリクエストを拒否します。

将来的に Assured Workloads への移行を検討している場合は、これらの鍵で保護されているリソースと同じフォルダ内に鍵プロジェクトを作成します。

組織で constraints/gcp.restrictCmekCryptoKeyProjects 組織のポリシーの制約を使用して、すべての CMEK が指定された鍵プロジェクトからのものであることを確認している場合は、許可されているプロジェクトのリストに鍵プロジェクトを追加する必要があります。CMEK の組織のポリシーの詳細については、CMEK の組織のポリシーをご覧ください。

鍵プロジェクトを作成する

コンソール

  1. Google Cloud コンソールで [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. [組織の選択] で、プロジェクトを作成する組織リソースを選択します。
  3. [プロジェクトの作成] をクリックします。
  4. 表示される [新しいプロジェクト] ウィンドウで、プロジェクト名を入力し、請求先アカウントを選択します。プロジェクト名には文字、数字、単一引用符、ハイフン、スペース、感嘆符のみを使用でき、4~30 文字にする必要があります。
  5. [ロケーション] で、キー プロジェクトの親にするリソースを選択します。
  6. プロジェクトの作成を完了するには、[作成] をクリックします。

gcloud

  • 新しいプロジェクトを作成します。

    gcloud projects create PROJECT_ID \
        --PARENT_TYPE=PARENT_ID
    

    以下を置き換えます。

    • PROJECT_ID: キーリングを含むプロジェクトの ID。
    • PARENT_TYPE: 新しい鍵プロジェクトを作成するリソースのタイプ。organization を入力して、指定された組織の下に新しいキー プロジェクトを作成します。または、folder を入力して、指定されたフォルダの下に新しいキー プロジェクトを作成します。
    • PARENT_ID: キー プロジェクトを作成する組織またはフォルダの ID。

REST

  • 新しいプロジェクトを作成します。

    curl "https://cloudresourcemanager.googleapis.com/v3/projects/"
        --request "POST" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --data '{ "projectId": "PROJECT_ID", "name": "PROJECT_NAME", "parent": "PARENT_TYPE/PARENT_ID" }'
    

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

    • PROJECT_ID: 専用鍵プロジェクトに使用する識別子。
    • PROJECT_NAME: 専用キー プロジェクトに使用する名前。
    • PARENT_TYPE: 専用の鍵プロジェクトを作成する親リソースのリソースタイプ(例: organizationsfolders)。
    • PARENT_ID": 専用の鍵プロジェクトを作成する親リソースのリソース識別子。

Terraform

次の Terraform サンプルでは、前に作成したフォルダに専用の鍵プロジェクトを作成します。

/* Define the project ID to use for the dedicated key project. The project
  ID must be 6 to 30 characters with lowercase letters, digits, hyphens. The
  project ID must start with a letter. Trailing hyphens are prohibited */
variable "key_management_project_ID" {
  description = "Sets the project ID for the dedicated key project. This project will contain the Key Rings and Keys generated by Cloud KMS Autokey"
  type        = string
  default     = "KEY_PROJECT_ID"
}

# Create a key project to store keys created by Autokey
resource "google_project" "key_management_project" {
  project_id      = var.key_management_project_ID
  name            = var.key_management_project_ID
  billing_account = var.billing_account
  folder_id       = google_folder.autokey_folder.name
}

output "project_number" {
  value = google_project.key_management_project.number
}

KEY_PROJECT_ID は、専用の鍵プロジェクトに使用する ID(autokey-key-project など)に置き換えます。

プロジェクトのリーエンを設定する

Cloud KMS プロジェクトを作成したら、誤って削除されないように、リーエンでプロジェクトを保護プレビュー)することをおすすめします。プロジェクト リーエンが適用されると、リーエンが削除されるまで Cloud KMS プロジェクトは削除できなくなります。

専用の鍵プロジェクトを準備する

コンソール

  1. 鍵プロジェクトに対する Cloud KMS API を有効にします。

    API の有効化

  2. 新しい鍵プロジェクトを使用している場合は、鍵プロジェクトに対する Cloud KMS 管理者の権限を付与します。次の手順を繰り返して、自分自身と他の各 Cloud KMS 管理者ユーザーに Cloud KMS 管理者ロールを付与します。

    1. Google Cloud コンソールで、[IAM] ページに移動します。

      [IAM] に移動

    2. 鍵プロジェクトを選択します。

    3. [アクセス権を付与] をクリックし、ユーザーのメールアドレスを入力します。

    4. [Cloud KMS 管理者] ロールを選択します。

    5. [保存] をクリックします。

gcloud

  1. 鍵プロジェクトに対する Cloud KMS API を有効にします。

    gcloud services enable cloudkms.googleapis.com
    
  2. 鍵プロジェクトに対する Cloud KMS 管理者の権限を付与します。次のコマンドを繰り返して、自分自身と他の各 Cloud KMS 管理者ユーザーに roles/cloudkms.admin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=user:KEY_ADMIN_EMAIL
    

    以下を置き換えます。

    • PROJECT_NUMBER: 鍵プロジェクトのプロジェクト番号。
    • KEY_ADMIN_EMAIL: Cloud KMS 鍵の管理を担当するユーザーのメールアドレス。

REST

  1. 鍵プロジェクトに対する Cloud KMS API を有効にします。

    curl "https://serviceusage.googleapis.com/v1/projects/PROJECT_ID/services/cloudkms.googleapis.com:enable" \
        --request "POST" \
        --header "authorization: Bearer TOKEN"
    

    PROJECT_ID は、専用の鍵プロジェクトの ID に置き換えます。

  2. 専用鍵プロジェクトの現在の IAM ポリシーを取得します。

    curl "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy" \
        --request POST \
        --header "authorization: Bearer TOKEN"
        --header "Content-Type: application/json; charset=utf-8" \
        --data '{"options": {"requestedPolicyVersion": 3}}'
    

    レスポンスには、プロジェクトの現在の許可ポリシーが含まれます。

  3. 次のロール バインディングをガイドとして使用して、返された許可ポリシーを変更し、自分自身を含む各 Cloud KMS 管理者ユーザーの roles/cloudkms.admin ロールを追加します。json { "role": "roles/cloudkms.admin", "members": [ "PRINCIPAL_LIST" ], }

    PRINCIPAL_LIST は、ユーザー プリンシパルのカンマ区切りのリストに置き換えます(例: admin_1@example.com,admin_2@example.com)。

    この変更は、新しいポリシーを設定するまで有効になりません。

  4. 新しい許可ポリシーを設定します。

    curl "https://cloudresourcemanager.googleapis.com/1/projects/PROJECT_ID:setIamPolicy" \
        --request POST \
        --header "authorization: Bearer TOKEN" \
        --header "Content-Type: application/json; charset=utf-8" \
        --data 'ALLOW_POLICY'
    

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

    • PROJECT_ID: 専用鍵プロジェクトの ID。
    • ALLOW_POLICY: 前の手順で作成した更新後の許可ポリシー JSON。既存のロール付与と、追加したロール付与が含まれます。

Terraform

次の Terraform サンプルでは、専用の鍵プロジェクトで Cloud KMS API を有効にし、前に特定した Cloud KMS 管理者プリンシパルに roles/cloudkms.admin を付与します。

# Enable the Cloud KMS API in the key project
resource "google_project_service" "enable_api" {
  service                    = "cloudkms.googleapis.com"
  project                    = google_project.key_management_project.project_id
  disable_on_destroy         = false
  disable_dependent_services = false
  depends_on                 = [google_project.key_management_project]
}

/* Grant role for Cloud KMS admins to use Autokey in the
   dedicated key project */
resource "google_project_iam_binding" "autokey_project_admin" {
  project    = google_project.key_management_project.project_id
  role       = "roles/cloudkms.admin"
  members    = var.autokey_project_kms_admins
  depends_on = [ google_project.key_management_project ]
}

リソース フォルダで Cloud KMS Autokey を有効にする

コンソール

  1. Google Cloud コンソールで、[鍵管理コントロール] ページに移動します。

    鍵管理コントロールに移動

  2. コンテキスト選択ツールから、専用プロジェクト キー ストレージで Autokey を有効にするフォルダを選択します。
  3. [Autokey] セクションで、[管理] をクリックします。
  4. [構成] をクリックします。
  5. [構成ソース] で [フォルダの構成] を選択します。
  6. [構成] で、[専用プロジェクトの鍵ストレージを有効にする] を選択します。
  7. 鍵プロジェクトを選択し、[送信] をクリックします。

    Cloud KMS Autokey がフォルダで有効であることを確認するメッセージが表示されます。

gcloud

  1. 次の AutokeyConfig を含む YAML ファイルを作成します。

    name: folders/FOLDER_NUMBER/autokeyConfig
    keyProjectResolutionMode: DEDICATED_KEY_PROJECT
    keyProject: projects/PROJECT_ID
    

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

    • FOLDER_NUMBER: 専用プロジェクトの鍵ストレージで Autokey を有効にするフォルダの番号。
    • PROJECT_ID: 専用鍵プロジェクトの ID。
  2. フォルダに AutokeyConfig を適用します。

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    AUTOKEY_CONFIG_PATH は、前の手順で作成した YAML ファイルのパスで置き換えます。

REST

専用プロジェクトの鍵ストレージで Autokey を有効にするフォルダの AutokeyConfig を作成します。

curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_ID/autokeyConfig?updateMask=keyProject,keyProjectResolutionMode" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"keyProject": "projects/PROJECT_ID", "keyProjectResolutionMode": "DEDICATED_KEY_PROJECT"}'

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

  • FOLDER_ID: Autokey を有効にするフォルダの ID。
  • PROJECT_ID: 鍵プロジェクトの ID。

Terraform

/* Enable AutokeyConfig for dedicated-project key storage in the
   folder */
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = "projects/${google_project.key_management_project.project_id}"
  key_project_resolution_mode = "DEDICATED_KEY_PROJECT"
  /* For folder scope, valid values are DEDICATED_KEY_PROJECT,
     RESOURCE_PROJECT, and DISABLED. With DEDICATED_KEY_PROJECT, define the
    key_project as well. With RESOURCE_PROJECT, omit key_project. Keys will
    be created in the same project as the protected resource. */
}

Cloud KMS サービス エージェントを設定する

鍵プロジェクトの Cloud KMS サービス エージェントは、リソースの作成時に、Cloud KMS 管理者に代わって鍵を作成し、IAM ポリシー バインディングを適用します。鍵を作成して割り当てるには、Cloud KMS サービス エージェントに Cloud KMS 管理者の権限が必要です。

gcloud

  1. Cloud KMS サービス エージェントを作成します。

    gcloud beta services identity create --service=cloudkms.googleapis.com \
        --project=PROJECT_NUMBER
    

    PROJECT_NUMBER は、鍵プロジェクトのプロジェクト番号に置き換えます。

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

    Service identity created: service-PROJECT_NUMBER@gcp-sa-ekms.iam.gserviceaccount.com
    

    コマンドの出力は、Cloud EKM サービス アカウントgcp-sa-ekms サブドメイン付き)が作成されたことを示しています。ただし、このコマンドは、これらの手順で後で使用するサービス エージェントである Cloud KMS サービス エージェントgcp-sa-cloudkms サブドメイン付き)も作成します。

  2. サービス エージェントに Cloud KMS 管理者の権限を付与します。

    gcloud projects add-iam-policy-binding PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
    

    PROJECT_NUMBER は、鍵プロジェクトのプロジェクト番号に置き換えます。

Terraform

# Create the Cloud KMS service agent
resource "google_project_service_identity" "KMS_Service_Agent" {
  provider   = google-beta
  service    = "cloudkms.googleapis.com"
  project    = google_project.key_management_project.project_id
  depends_on = [google_project.key_management_project]
}

/* Grant role for the Cloud KMS service agent to use delegated
  Cloud KMS administrator permissions */
resource "google_project_iam_member" "autokey_project_admin" {
  project = google_project.key_management_project.project_id
  role    = "roles/cloudkms.admin"
  member  = "serviceAccount:service-${google_project.key_management_project.number}@gcp-sa-cloudkms.iam.gserviceaccount.com"
}

同じプロジェクトの鍵ストレージで Autokey を有効にする

同じプロジェクトの鍵ストレージで Autokey を使用すると、Autokey は保護するリソースと同じプロジェクト内に鍵を作成します。同じプロジェクトの鍵ストレージを使用するプロジェクトは、専用プロジェクトの鍵ストレージを使用するフォルダ内に存在できます。プロジェクトで Autokey が有効になっている場合、プロジェクト レベルの Autokey 構成は親フォルダの Autokey 構成をオーバーライドします。

個々のプロジェクトで同じプロジェクトの鍵ストレージを使用して Autokey を有効にするには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで、[鍵管理コントロール] ページに移動します。

    鍵管理コントロールに移動

  2. コンテキスト選択ツールで、同じプロジェクトの鍵ストレージで Autokey を有効にするプロジェクトを選択します。
  3. [Autokey] セクションで、[管理] をクリックします。
  4. [構成] をクリックします。
  5. [構成ソース] で [プロジェクト用に構成] を選択します。
  6. [構成] で、[同じプロジェクトの鍵ストレージを有効にする] を選択します。
  7. [送信] をクリックします。

    Cloud KMS Autokey がプロジェクトで有効であることを確認するメッセージが表示されます。

gcloud

  1. 次の AutokeyConfig を含む YAML ファイルを作成します。

    name: projects/PROJECT_ID/autokeyConfig
    keyProjectResolutionMode: RESOURCE_PROJECT
    keyProject:
    

    PROJECT_ID は、同じプロジェクトの鍵ストレージで Autokey を有効にするプロジェクトの識別子に置き換えます。

  2. AutokeyConfig をプロジェクトに適用します。

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    AUTOKEY_CONFIG_PATH は、前の手順で作成した YAML ファイルのパスで置き換えます。

  3. プロジェクトで Cloud KMS API を有効にします。

    gcloud services enable cloudkms.googleapis.com
    

REST

  1. REST API を使用して、同じプロジェクトの鍵ストレージで Autokey を有効にするプロジェクトの AutokeyConfig を作成します。

    curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/autokeyConfig?updateMask=keyProjectResolutionMode,keyProject" \
        --request "PATCH" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --data '{"keyProjectResolutionMode": "RESOURCE_PROJECT", "keyProject": ""}'
    

    PROJECT_ID は、Autokey を有効にするプロジェクトの ID に置き換えます。

  2. gcloud CLI で、プロジェクトに対する Cloud KMS API を有効にします。

    gcloud services enable cloudkms.googleapis.com
    

Terraform

個々のプロジェクトで同じプロジェクトの鍵ストレージを使用して Autokey を有効にするには、次のような autokey_config_project リソースを使用します。

/* To set autokey config for a project */
resource "google_kms_autokey_config" "autokey_config_project" {
  provider = google-beta
  project = "projects/${google_project.key_management_project.project_id}"
  key_project_resolution_mode = "RESOURCE_PROJECT"
  # For project scope, valid values are RESOURCE_PROJECT or DISABLED
}

フォルダ内のすべてのプロジェクトで、同じプロジェクトの鍵ストレージを使用して Autokey を有効にするには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで、[鍵管理コントロール] ページに移動します。

    鍵管理コントロールに移動

  2. コンテキスト選択ツールで、同じプロジェクトの鍵ストレージで Autokey を有効にするフォルダを選択します。
  3. [構成] をクリックします。
  4. [構成ソース] で [フォルダの構成] を選択します。
  5. [構成] で、[同じプロジェクトの鍵ストレージを有効にする] を選択します。
  6. [送信] をクリックします。

    Cloud KMS Autokey がフォルダで有効であることを確認するメッセージが表示されます。

gcloud

  1. 次の AutokeyConfig を含む YAML ファイルを作成します。

    name: folders/FOLDER_NUMBER/autokeyConfig
    keyProjectResolutionMode: RESOURCE_PROJECT
    keyProject:
    

    FOLDER_NUMBER は、同じプロジェクトの鍵ストレージで Autokey を有効にするフォルダの番号に置き換えます。

  2. フォルダに AutokeyConfig を適用します。

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    AUTOKEY_CONFIG_PATH は、前の手順で作成した YAML ファイルのパスで置き換えます。

REST

  1. REST API を使用して、同じプロジェクトの鍵ストレージで Autokey を有効にするフォルダの AutokeyConfig を作成します。

    curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_ID/autokeyConfig?updateMask=keyProjectResolutionMode,keyProject" \
        --request "PATCH" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --data '{"keyProjectResolutionMode": "RESOURCE_PROJECT", "keyProject": ""}'
    

    FOLDER_ID は、Autokey を有効にするフォルダの ID に置き換えます。このコマンドは、フォルダ内のすべてのプロジェクトに対して、同じプロジェクトの鍵ストレージで Autokey を有効にします。

  2. gcloud CLI で、同じプロジェクトの鍵ストレージで Autokey を使用する各プロジェクトで Cloud KMS API を有効にします。

    gcloud services enable cloudkms.googleapis.com
    

    各プロジェクトで Cloud KMS API を一度に有効にするか、必要に応じて個々のプロジェクトで API を有効にできます。デベロッパーは、プロジェクトで Cloud KMS API が有効になるまで、そのプロジェクトで Autokey を使用できません。

Terraform

フォルダ内のすべてのプロジェクトで同じプロジェクトの鍵ストレージを使用して Autokey を有効にするには、次のような folder_config リソースを使用します。

/* Enable AutokeyConfig on a folder */
resource "google_kms_autokey_config" "folder_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.name
  key_project_resolution_mode = "RESOURCE_PROJECT"
  /* For folder scope, valid values are DEDICATED_KEY_PROJECT,
     RESOURCE_PROJECT, or DISABLED. With DEDICATED_KEY_PROJECT, define the
     key_project as well. With RESOURCE_PROJECT, omit key_project. Keys will
     be created in the same project as the protected resource. */
}

Autokey 構成をクリア

フォルダまたはプロジェクトの Autokey 構成をクリアして、親フォルダの構成を使用するように戻すことができます。

コンソール

  1. Google Cloud コンソールで、[鍵管理コントロール] ページに移動します。

    鍵管理コントロールに移動

  2. コンテキスト選択ツールから、Autokey 構成をクリアするフォルダまたはプロジェクトを選択します。
  3. [Autokey] セクションで、[管理] をクリックします。
  4. [構成] をクリックします。
  5. [構成ソース] で [継承] を選択します。
  6. [送信] をクリックします。

gcloud

  1. 次の AutokeyConfig を含む YAML ファイルを作成します。

    name: RESOURCE_TYPE/RESOURCE_ID/autokeyConfig
    keyProjectResolutionMode: KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED
    keyProject:
    

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

    • RESOURCE_TYPE: Autokey 構成をクリアするリソースのタイプ。folders または projects に設定します。
    • RESOURCE_ID: Autokey 構成をクリアするフォルダの識別子。
  2. AutokeyConfig をフォルダまたはプロジェクトに適用します。

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    AUTOKEY_CONFIG_PATH は、前の手順で作成した YAML ファイルのパスで置き換えます。

REST

継承された Autokey 構成に戻すフォルダまたはプロジェクトの AutokeyConfig をクリアします。

curl "https://cloudkms.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/autokeyConfig?updateMask:keyProjectResolutionMode,keyProject" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"keyProjectResolutionMode": "KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED", "keyProject": ""}'

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

  • RESOURCE_TYPE: Autokey を無効にするリソースのタイプ。folders または projects に設定します。
  • RESOURCE_ID: 同じプロジェクトの鍵ストレージで Autokey を無効にするフォルダの ID。

Terraform

# Clear AutokeyConfig for the folder
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = ""
  key_project_resolution_mode = "KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED"
}

有効な Autokey 構成を表示する

フォルダまたはプロジェクトの有効な Autokey 構成を表示できます。有効な Autokey 構成は、次のことを示します。

  • 選択したリソースで Autokey が有効になっているかどうか。
  • Autokey が有効になっている場合、選択したリソースが専用プロジェクトの鍵ストレージを使用するか、同じプロジェクトの鍵ストレージを使用するか。
  • 選択したリソースが専用プロジェクトの鍵ストレージを使用している場合は、専用鍵プロジェクトのリソース識別子。
  • この Autokey 構成が親フォルダから継承されたものか、選択したリソースで構成されたものか。

コンソール

  1. Google Cloud コンソールで、[鍵管理コントロール] ページに移動します。

    鍵管理コントロールに移動

  2. コンテキスト選択ツールから、Autokey の設定を表示するフォルダまたはプロジェクトを選択します。
  3. [Autokey] セクションで、[管理] をクリックします。

gcloud

有効な AutokeyConfig を表示します。

gcloud kms autokey-config show-effective-config \
    --RESOURCE_TYPE=RESOURCE_ID

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

  • RESOURCE_TYPE: 有効な Autokey 構成を表示するリソースのタイプ。folder または project に設定します。
  • RESOURCE_ID: 有効な Autokey 構成を表示するリソースの識別子。

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

keyProject: KEY_PROJECT
keyProjectResolutionMode: KEY_PROJECT_RESOLUTION_MODE
source:
  name: RESOURCE_IDENTIFIER

この出力には次の値が含まれます。

  • KEY_PROJECT: 鍵プロジェクトのリソース識別子(例: projects/PROJECT_ID)。Autokey が無効になっている場合、または同じプロジェクトの鍵ストレージが有効になっているフォルダがリソースの場合、このフィールドは省略されます。
  • KEY_PROJECT_RESOLUTION_MODE: リソースの keyProjectResolutionModeRESOURCE_PROJECTDEDICATED_KEY_PROJECTDISABLED など)。リソースまたは親リソースで Autokey が有効になっていない場合、このフィールドは省略されます。
  • RESOURCE_IDENTIFIER: AutokeyConfig が構成されているリソースのリソース識別子。これにより、AutokeyConfig が親リソースから継承されたものか、クエリしたリソースで構成されたものかを判断できます。

REST

フォルダまたはプロジェクトの有効な AutokeyConfig を表示します。

curl "https://cloudkms.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:showEffectiveAutokeyConfig" \
    --request "GET" \
    --header "authorization: Bearer TOKEN"
  ```

Replace the following:
  • RESOURCE_TYPE: Autokey 構成を表示するリソースのタイプ。folders または projects に設定します。
  • RESOURCE_ID: Autokey 構成を表示するリソースの識別子。

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

{
  "keyProject": KEY_PROJECT,
  "keyProjectResolutionMode": KEY_PROJECT_RESOLUTION_MODE,
  "source": {
    RESOURCE_IDENTIFIER
  }
}

この出力には次の値が含まれます。

  • KEY_PROJECT: 鍵プロジェクトのリソース識別子(例: projects/PROJECT_ID)。Autokey が無効になっている場合、またはリソースが同じプロジェクトの鍵ストレージが有効になっているフォルダの場合、このフィールドは省略されます。
  • KEY_PROJECT_RESOLUTION_MODE: リソースの keyProjectResolutionModeRESOURCE_PROJECTDEDICATED_KEY_PROJECTDISABLED など)。リソースまたは親リソースで Autokey が有効になっていない場合、このフィールドは省略されます。
  • RESOURCE_IDENTIFIER: AutokeyConfig が構成されているリソースのリソース識別子。これにより、AutokeyConfig が親リソースから継承されたものか、クエリしたリソースで構成されたものかを判断できます。

SQL

Cloud Asset Inventory で SQL クエリを使用して、フォルダまたは組織内のすべてのプロジェクトの有効な Autokey 構成を評価できます。

  1. 組織 ID と検索スコープの bash 環境変数を設定します。

    export ORG_ID="ORGANIZATION_ID"
    export TARGET_SCOPE="RESOURCE_TYPE/RESOURCE_ID" 
    

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

    • ORGANIZATION_ID: 組織の数値識別子。
    • RESOURCE_TYPE: 有効な Autokey 構成を表示するリソースのタイプ。組織内のすべてのプロジェクトの構成を表示する場合は organizations に設定し、特定のフォルダ内のすべてのプロジェクトの構成を表示する場合は folders に設定します。
    • RESOURCE_ID: 有効な Autokey 構成を表示する組織またはフォルダの数値 ID。
  2. gcloud asset query コマンドを使用してクエリを実行します。

    gcloud asset query \
        --organization="${ORG_ID}" \
        --statement="
    WITH ProjectConfigs AS (
      SELECT
        p.name AS project_name,
        ARRAY_AGG(
          STRUCT(
            ancestor AS config_source,
            c.resource.data.state AS state,
            c.resource.data.keyProjectResolutionMode AS resolution_mode,
            c.resource.data.keyProject AS key_project
          )
          ORDER BY offset
          LIMIT 1
        )[SAFE_OFFSET(0)] AS effective_config
      FROM
        STANDARD_METADATA p
      CROSS JOIN
        UNNEST(p.ancestors) AS ancestor WITH OFFSET AS offset
      JOIN
        cloudkms_googleapis_com_AutokeyConfig c
      ON
        ancestor = REGEXP_REPLACE(c.name, r'^//cloudkms\.googleapis\.com/([^/]+/\d+)/autokeyConfig$', r'\1')
      WHERE
        p.assetType = 'cloudresourcemanager.googleapis.com/Project'
      GROUP BY
        p.name
    )
    SELECT
      REPLACE(r.name, '//cloudresourcemanager.googleapis.com/', '') AS project_name,
      p.resource.data.projectId AS project_id,
      COALESCE(rc.effective_config.config_source, 'No Autokey') AS effective_config_source,
      rc.effective_config.state AS autokey_config_state,
      rc.effective_config.resolution_mode AS resolution_mode,
      CASE 
        WHEN rc.effective_config.resolution_mode = 'RESOURCE_PROJECT' THEN p.resource.data.projectId
        ELSE COALESCE(REPLACE(rc.effective_config.key_project, 'projects/', ''), 'No Key Project')
      END AS key_project
    FROM
      STANDARD_METADATA r
    LEFT JOIN
      ProjectConfigs rc
    ON
      r.name = rc.project_name
    LEFT JOIN
      cloudresourcemanager_googleapis_com_Project p
    ON
      r.name = p.name
    WHERE
      r.assetType = 'cloudresourcemanager.googleapis.com/Project'
      AND '${TARGET_SCOPE}' IN UNNEST(r.ancestors)
    "
    

    出力には次のフィールドが含まれます。

    • project_number: 各プロジェクトの完全な数値リソース ID(例: projects/PROJECT_NUMBER)。
    • project_id: 各プロジェクトの識別子(例: PROJECT_ID)。
    • effective_config_source: プロジェクトの Autokey 構成が設定されているリソースのリソース識別子。たとえば、構成が親フォルダから継承されている場合は folders/FOLDER_NUMBER、構成がプロジェクトで設定されている場合は projects/PROJECT_NUMBER。プロジェクトに AutokeyConfig がない場合、または AutokeyConfig が継承されていない場合、このフィールドには No Autokey が表示されます。
    • autokey_config_state: 構成が DISABLED であっても、フォルダで Autokey 構成が ACTIVE かどうかを示します。プロジェクトに AutokeyConfig がない場合、または AutokeyConfig を継承していない場合、このフィールドは空になります。
    • resolution_mode: プロジェクトの有効な Autokey 構成の鍵プロジェクト解決モード。
    • key_project: Autokey がプロジェクト内のリソースの鍵を作成する場所を示します。たとえば、プロジェクトが専用プロジェクトの鍵ストレージを使用している場合は projects/KEY_PROJECT_ID、プロジェクトが同じプロジェクトの鍵ストレージを使用している場合は RESOURCE_PROJECT_ID です。プロジェクトで Autokey が有効になっていない場合、このフィールドには No key project が表示されます。

Autokey を無効にする

Autokey を有効にできるロールは、Autokey を無効にすることもできます。自動キーを無効にするには、AutokeyConfig をクリアするか、feedbackKeyProjectResolutionModeDISABLED に設定します。フォルダまたはプロジェクトで Autokey を無効にできます。Autokey が有効になっているフォルダ内の個々のプロジェクトで Autokey を無効にすることもできます。

フォルダまたはプロジェクトで Autokey が無効になると、Cloud KMS サービス エージェントは、デベロッパーがそのフォルダまたはプロジェクトにリソースを作成するときに、デベロッパーの鍵を作成できなくなります。

Autokey を完全に無効にする場合は、roles/cloudkms.autokeyAdmin ロールと roles/cloudkms.autokeyUser ロールの IAM バインディングも削除することをおすすめします。

Autokey を無効にしても、鍵プロジェクトの既存の鍵には影響しません。これらの鍵を引き続き使用してリソースを保護できます。

フォルダまたはプロジェクトの Autokey を無効にする

コンソール

  1. Google Cloud コンソールで、[鍵管理コントロール] ページに移動します。

    鍵管理コントロールに移動

  2. コンテキスト選択ツールから、Autokey を無効にするフォルダまたはプロジェクトを選択します。
  3. [Autokey] セクションで、[管理] をクリックします。
  4. [構成] をクリックします。
  5. [構成ソース] で、[フォルダ用に構成] または [プロジェクト用に構成] を選択します。
  6. [構成] で、[フォルダの Autokey を無効にする] または [プロジェクトの Autokey を無効にする] を選択します。
  7. [送信] をクリックします。

    Autokey を無効にすることを確認するメッセージが表示されます。

  8. Autokey を無効にするには、[確定] をクリックします。

    Cloud KMS Autokey が無効であることを確認するメッセージが表示されます。

gcloud

  1. 次の AutokeyConfig を含む YAML ファイルを作成します。

    name: RESOURCE_TYPE/RESOURCE_ID/autokeyConfig
    keyProjectResolutionMode: DISABLED
    keyProject:
    

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

    • RESOURCE_TYPE: Autokey を無効にするリソースのタイプ。folders または projects に設定します。
    • RESOURCE_ID: 同じプロジェクトの鍵ストレージで Autokey を無効にするフォルダの ID。
  2. AutokeyConfig をフォルダまたはプロジェクトに適用します。

    gcloud kms autokey-config update AUTOKEY_CONFIG_PATH
    

    AUTOKEY_CONFIG_PATH は、前の手順で作成した YAML ファイルのパスで置き換えます。

REST

Autokey を無効にするフォルダまたはプロジェクトの AutokeyConfig を更新します。

curl "https://cloudkms.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/autokeyConfig?updateMask:keyProjectResolutionMode,keyProject" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"keyProjectResolutionMode": "DISABLED", "keyProject": ""}'

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

  • RESOURCE_TYPE: Autokey を無効にするリソースのタイプ。folders または projects に設定します。
  • RESOURCE_ID: 同じプロジェクトの鍵ストレージで Autokey を無効にするフォルダの ID。

Terraform

# Clear AutokeyConfig for the folder
resource "google_kms_autokey_config" "autokey_config" {
  provider    = google-beta
  folder      = google_folder.autokey_folder.folder_id
  key_project = ""
  key_project_resolution_mode = "DISABLED"
}

Autokey ロールを取り消す

AutokeyConfig を更新して Autokey を無効にすると、Cloud KMS サービス エージェントは影響を受けるプロジェクトまたはフォルダで新しい鍵をプロビジョニングできなくなります。ただし、Autokey を完全に無効にする場合は、roles/cloudkms.autokeyAdmin ロールと roles/cloudkms.autokeyUser ロールの IAM バインディングも削除することをおすすめします。

  1. 省略可: roles/cloudkms.autokeyAdmin ロールを取り消します。

    gcloud resource-manager folders remove-iam-policy-binding \
        FOLDER_ID --role=roles/cloudkms.autokeyAdmin \
        --member=user:USER_EMAIL
    

    以下を置き換えます。

    • FOLDER_ID: Autokey を無効にしたフォルダの ID。
    • USER_EMAIL: Autokey を管理する権限を取り消すユーザーのメールアドレス。
  2. 省略可: フォルダレベルで roles/cloudkms.autokeyUser ロールを取り消します。

    gcloud resource-manager folders remove-iam-policy-binding \
        FOLDER_ID --role=roles/cloudkms.autokeyUser \
        --member=user:USER_EMAIL
    

    以下を置き換えます。

    • FOLDER_ID: Autokey を無効にしたフォルダの ID。
    • USER_EMAIL: Autokey の使用権限を取り消すユーザーのメールアドレス。
  3. 省略可: プロジェクト レベルで roles/cloudkms.autokeyUser ロールを取り消します。

    gcloud projects remove-iam-policy-binding \
        RESOURCE_PROJECT_NUMBER \
        --role=roles/cloudkms.autokeyUser \
        --member=user:USER_EMAIL
    

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

    • RESOURCE_PROJECT_NUMBER: Autokey を無効にしたフォルダ内のリソース プロジェクトのプロジェクト番号。
    • USER_EMAIL: Autokey の使用権限を取り消すユーザーのメールアドレス。
  4. 省略可: 他のフォルダの Autokey に鍵プロジェクトを引き続き使用する予定がない場合は、Cloud KMS サービス エージェントの roles/cloudkms.admin ロールを取り消します。

    gcloud projects remove-iam-policy-binding \
        KEY_PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
    

    KEY_PROJECT_NUMBER は、鍵プロジェクトの数値 ID に置き換えます。

  5. 省略可: 鍵プロジェクト内で作成された鍵を引き続き使用する予定がない場合は、Cloud KMS 管理者の roles/cloudkms.admin ロールを取り消します。

    gcloud projects remove-iam-policy-binding \
        KEY_PROJECT_NUMBER \
        --role=roles/cloudkms.admin \
        --member=user:KEY_ADMIN_EMAIL
    

    以下を置き換えます。

    • KEY_PROJECT_NUMBER: 鍵プロジェクトのプロジェクト番号。
    • KEY_ADMIN_EMAIL: Autokey を構成する権限を取り消すユーザーのメールアドレス。

次のステップ