啟用 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。機構內的子項資源會繼承空白的 AutokeyConfig 資源。在 Google Cloud 控制台中,這些資源的 Autokey Status 會顯示為「Not enabled」(未啟用)。如要限制機構內的 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 的 Google Cloud 專案,且 keyHandles.create 權限未遭IAM 拒絕政策封鎖。
  • 您要啟用 Autokey 的 Google Cloud 資料夾,其中至少包含一個keyHandles.create權限未遭 IAM 拒絕政策封鎖的專案。

必要的角色

如要取得啟用及設定 Autokey 所需的權限,請要求管理員在資料夾、專案或父項資源中,授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備啟用及設定 Autokey 所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要啟用及設定 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 控制台的「管理資源」頁面。

    前往「Manage resources」(管理資源)

  2. 在「選取機構」部分,選取要建立專案的機構資源。
  3. 按一下 [Create Project]
  4. 在顯示的「New project」(新增專案) 視窗中,輸入專案名稱並選取帳單帳戶。專案名稱只能由英文字母、數字、單引號、連字號、空格或驚嘆號組成,而且長度必須介於 4 至 30 個字元之間。
  5. 在「Location」(位置) 中,選取要做為金鑰專案父項的資源。
  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:您要用於專屬金鑰專案的 ID。
    • PROJECT_NAME:您要用於專屬金鑰專案的名稱。
    • PARENT_TYPE:要建立專屬金鑰專案的父項資源類型,例如 organizationsfolders
    • PARENT_ID":父項資源的資源 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 管理員權限。重複執行下列指令,將 roles/cloudkms.admin 角色授予自己和每位 Cloud KMS 管理員使用者:

    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,並將 roles/cloudkms.admin 授予先前識別的 Cloud KMS 管理員主體。

# 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 控制台的「Key management controls」頁面。

    前往金鑰管理控制項

  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 控制台的「Key management controls」頁面。

    前往金鑰管理控制項

  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 替換為專案的 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 控制台的「Key management controls」頁面。

    前往金鑰管理控制項

  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 控制台的「Key management controls」頁面。

    前往金鑰管理控制項

  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 設定的資源類型。設為 foldersprojects
    • 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": "KEY_PROJECT_RESOLUTION_MODE_UNSPECIFIED", "keyProject": ""}'

更改下列內容:

  • RESOURCE_TYPE:要停用 Autokey 的資源類型。設為 foldersprojects
  • 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,所選資源會使用專屬專案金鑰儲存功能或同專案金鑰儲存功能。
  • 如果所選資源使用專屬專案金鑰儲存空間,則為專屬金鑰專案的資源 ID。
  • 這項 Autokey 設定是從上層資料夾繼承而來,還是針對所選資源設定。

控制台

  1. 前往 Google Cloud 控制台的「Key management controls」頁面。

    前往金鑰管理控制項

  2. 在內容選擇工具中,選取要查看 Autokey 設定的資料夾或專案。
  3. 在「Autokey」部分,按一下「管理」

gcloud

查看有效AutokeyConfig

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

更改下列內容:

  • RESOURCE_TYPE:要查看有效 Autokey 設定的資源類型。設為 folderproject
  • RESOURCE_ID:您要查看有效 Autokey 設定的資源 ID。

輸出結果會與下列內容相似:

keyProject: KEY_PROJECT
keyProjectResolutionMode: KEY_PROJECT_RESOLUTION_MODE
source:
  name: RESOURCE_IDENTIFIER

這項輸出內容包含下列值:

  • KEY_PROJECT:主要專案的資源 ID,例如 projects/PROJECT_ID。如果停用 Autokey,或是資源為啟用同專案金鑰儲存功能的資料夾,系統就會省略這個欄位。
  • KEY_PROJECT_RESOLUTION_MODE:資源的 keyProjectResolutionMode,例如 RESOURCE_PROJECTDEDICATED_KEY_PROJECTDISABLED。如果資源或任何父項資源未啟用 Autokey,系統就會省略這個欄位。
  • RESOURCE_IDENTIFIER:設定 AutokeyConfig 的資源 ID。這可讓您判斷 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 設定的資源類型。設為 foldersprojects
  • RESOURCE_ID:您要查看 Autokey 設定的資源 ID。

輸出結果會與下列內容相似:

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

這項輸出內容包含下列值:

  • KEY_PROJECT:主要專案的資源 ID,例如 projects/PROJECT_ID。如果「自動產生金鑰」已停用,或是資源為已啟用同專案金鑰儲存功能的資料夾,則會省略這個欄位。
  • KEY_PROJECT_RESOLUTION_MODE:資源的 keyProjectResolutionMode,例如 RESOURCE_PROJECTDEDICATED_KEY_PROJECTDISABLED。如果資源或任何父項資源未啟用 Autokey,系統就會省略這個欄位。
  • RESOURCE_IDENTIFIER:設定 AutokeyConfig 的資源 ID。這可讓您判斷 AutokeyConfig 是從上層資源繼承而來,還是設定在您查詢的資源上。

SQL

您可以使用 Cloud Asset Inventory 搭配 SQL 查詢,評估資料夾或機構中所有專案的有效 Autokey 設定。

  1. 為機構 ID 和搜尋範圍設定 bash 環境變數。

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

    更改下列內容:

    • ORGANIZATION_ID:貴機構的數字 ID。
    • RESOURCE_TYPE:要查看有效 Autokey 設定的資源類型。設為 organizations 可查看機構中所有專案的設定,設為 folders 則可查看特定資料夾中所有專案的設定。
    • RESOURCE_ID:機構或資料夾的數字 ID,您要查看這些機構或資料夾的有效 Autokey 設定。
  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:每個專案的 ID,例如 PROJECT_ID
    • effective_config_source:專案 Autokey 設定所在資源的資源 ID,例如,如果設定是從上層資料夾繼承而來,則為 folders/FOLDER_NUMBER;如果設定是在專案中設定,則為 projects/PROJECT_NUMBER。如果專案沒有或未沿用 AutokeyConfig,這個欄位會顯示 No Autokey
    • autokey_config_state:指出資料夾是否ACTIVE有 Autokey 設定,即使該設定為DISABLED也一樣。如果專案沒有或未沿用AutokeyConfig,這個欄位會是空白。
    • resolution_mode:專案上有效 Autokey 設定的主要專案解析度模式。
    • key_project:指出 Autokey 為專案中的資源建立金鑰的位置,例如專案使用專屬專案金鑰儲存功能時為 projects/KEY_PROJECT_ID,或專案使用同專案金鑰儲存功能時為 RESOURCE_PROJECT_ID。如果專案未啟用 Autokey,這個欄位會顯示 No key project

停用自動鍵

可啟用 Autokey 的角色也能停用這項功能。如要停用 Autokey,請清除 AutokeyConfig 或將 feedbackKeyProjectResolutionMode 設為 DISABLED。您可以在資料夾或專案中停用 Autokey。您也可以在啟用 Autokey 的資料夾中,為個別專案停用 Autokey。

為資料夾或專案停用 Autokey 後,開發人員在該資料夾或專案中建立資源時,Cloud KMS 服務代理程式就無法再為他們建立金鑰。

如要完全停用 Autokey,建議您一併移除 roles/cloudkms.autokeyAdminroles/cloudkms.autokeyUser 角色的 IAM 繫結。

停用 Autokey 不會影響金鑰專案中的現有金鑰。您仍可繼續使用這些金鑰保護資源。

停用資料夾或專案的 Autokey

控制台

  1. 前往 Google Cloud 控制台的「Key management controls」頁面。

    前往金鑰管理控制項

  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 的資源類型。設為 foldersprojects
    • 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 的資源類型。設為 foldersprojects
  • 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.autokeyAdminroles/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 設定權限的使用者電子郵件地址。

後續步驟