Cloud KMS Autokey を有効にする

このページでは、リソース フォルダで一元管理された鍵管理用に、またはプロジェクトで委任された鍵管理用に Cloud KMS Autokey を有効にして構成する方法について説明します(プレビュー)。Autokey の詳細については、Autokey の概要をご覧ください。このドキュメントは管理者を対象としています。

始める前に

フォルダ内のすべてのプロジェクトに専用の鍵プロジェクトを使用して一元化された鍵管理に Cloud KMS Autokey を有効にする前に、次のものが必要です。

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

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

プロジェクト(プレビュー)で Autokey を有効にして、委任された鍵管理と同じプロジェクトの鍵を有効にするには、次のいずれかが必要です。

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

必要なロール

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

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

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

必要な権限

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

  • cloudkms.autokeyConfigs.*
  • cloudkms.projects.showEffectiveAutokeyConfig
  • serviceusage.services.enable
  • 一元管理された Autokey を有効にするには:
    • resourcemanager.folders.get
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
    • billing.resourceAssociations.create

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

Autokey を有効にする方法を指定する

Terraform を使用して必要な構成変更を行うことで、Infrastructure as Code 戦略の一環として Autokey を有効にできます。Terraform を使用して Autokey を有効にする場合は、このページの Terraform を使用して Autokey を有効にするをご覧ください。Terraform を使用しない場合は、まず次のセクションの手順に沿って操作してください。

一元管理された鍵管理用に 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。

Autokey 鍵プロジェクトを準備する

Console

  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 鍵の管理を担当するユーザーのメールアドレス。

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

コンソール

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

    KMS コントロールに移動

  2. コンテキスト選択ツールで、Autokey を有効にするフォルダを選択します。

  3. [有効にする] をクリックします。

  4. 鍵プロジェクトを選択し、[送信] をクリックします。

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

API

Autokey を有効にするフォルダの AutokeyConfig を作成します。

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

以下を置き換えます。

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

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

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

  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 は、鍵プロジェクトのプロジェクト番号に置き換えます。

委任された鍵管理の Autokey を有効にする

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

個々のプロジェクトで Autokey を有効にするには、次の操作を行います。

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

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

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

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

    gcloud services enable cloudkms.googleapis.com
    

フォルダ内のすべてのプロジェクトで Autokey を有効にするには、次の操作を行います。

  1. REST API を使用して、委任された鍵管理を使用するために Autokey を有効にするフォルダの AutokeyConfig を作成します。

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

    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 を有効にする

Terraform を使用した鍵の一元管理

次の Terraform サンプルは、次の設定手順を自動化します。

  • リソース フォルダを作成する
  • 鍵プロジェクトを作成する
  • ユーザーに権限を付与する
  • Cloud KMS サービス エージェントを設定する
  • 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]
}

/* The project ID to use for the 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 Key Management Project. This project will contain the Key Rings and Keys generated by Cloud KMS Autokey"
  type        = string
  default     = "KEY_PROJECT_ID"
}

# Create a new folder
resource "google_folder" "autokey_folder" {
  parent       = "organizations/${var.organization_ID}"
  display_name = "autokey_folder"
}

# 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
}

# 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
}

# Grant role for Cloud KMS admins to use Autokey in the 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 ]
}

# 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]
}

# Create 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"
}

/* Enable AutokeyConfig for centralized key management in this 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, 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.
}

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

  • BILLING_ACCOUNT_ID: 実際の Google Cloud 請求先アカウント ID。請求先アカウント ID は、ダッシュで区切られた 18 文字の英数字の値です(例: 010101-F0FFF0-10XX01)。
  • AUTOKEY_ADMIN_USER_IDS: roles/cloudkms.autokeyAdmin ロールを持つ必要があるユーザーのメールアドレスのリスト(例: "Ariel@example.com", "Charlie@example.com")。
  • AUTOKEY_DEVELOPER_USER_IDS: roles/cloudkms.autokeyUser ロールを持つ必要があるユーザーのメールアドレスのリスト(例: "Kalani@example.com", "Mahan@example.com")。
  • KEY_PROJECT_ADMIN_USER_IDS: roles/cloudkms.admin ロールを持つ必要があるユーザーのメールアドレスのリスト(例: "Sasha@example.com", "Nur@example.com")。
  • KEY_PROJECT_ID: 専用の鍵プロジェクトに使用する ID(例: autokey-key-project)。キー プロジェクトを指定する場合、key_project_resolution_modeDEDICATED_KEY_PROJECT である必要があります。

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, 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_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, DISABLED
}

Autokey の使用を適用する

フォルダ内で Autokey の使用を強制する場合、IAM アクセス制御と CMEK の組織のポリシーを組み合わせることで実現できます。これを行うには、Cloud KMS サービス エージェント以外のプリンシパルから鍵の作成権限を削除し、Autokey 鍵プロジェクトを使用して、すべてのリソースが CMEK で保護されるようにする必要があります。

フォルダ内で Autokey の使用を適用するには、次の手順に沿って操作します。

  1. 鍵プロジェクトで鍵を手動で作成するアクセス権を削除します。鍵を手動で作成できない場合、このプロジェクトで作成できるのは Autokey によって作成された鍵のみです。アクセス制御の詳細については、IAM によるアクセス制御をご覧ください。

  2. フォルダに組織のポリシーを設定して、constraints/gcp.restrictNonCmekServices 制約を使用して CMEK でリソースが保護されるようにする必要があります。詳細については、CMEK 保護を必須にするをご覧ください。

  3. フォルダで組織のポリシーを設定し、CMEK に使用する鍵が constraints/gcp.restrictCmekCryptoKeyProjects 制約を使用した Autokey 鍵プロジェクトの鍵になるようにする必要があります。詳細については、CMEK での Cloud KMS 鍵の使用を制限するをご覧ください。

Autokey を無効にする

Cloud KMS Autokey は、フォルダレベルで有効と無効にされます。フォルダの Autokey を有効にできるロールは、そのフォルダの Autokey を無効にすることもできます。フォルダで Autokey を無効にするには、AutokeyConfig をクリアして、フォルダと Autokey 鍵プロジェクト間の関連付けを削除する必要があります。

フォルダの Autokey 構成が削除されると、Cloud KMS サービス エージェントは、デベロッパーがフォルダにリソースを作成するときに鍵を作成できなくなります。フォルダと鍵プロジェクト間のリンクを削除すると、フォルダ内の Autokey が無効になります。ただし、roles/cloudkms.autokeyAdmin ロールと roles/cloudkms.autokeyUser ロールの IAM バインディングも削除することをおすすめします。

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

AutokeyConfig をクリア

コンソール

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

    KMS コントロールに移動

  2. コンテキスト選択ツールで、Autokey を無効にするフォルダを選択します。

  3. [無効にする] をクリックします。

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

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

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

API

Autokey を無効にするフォルダの AutokeyConfig をクリアします。

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

以下を置き換えます。

  • FOLDER_ID: Autokey を無効にするフォルダの ID。

Autokey ロールを取り消す

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

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

    以下を置き換えます。

    • FOLDER_ID: 自動キーを無効にしたフォルダの 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: 自動キーを無効にしたフォルダの 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: 鍵プロジェクトのプロジェクト番号。
    • USER_EMAIL: Autokey の使用権限を取り消すユーザーのメールアドレス。

次のステップ