このページでは、リソース フォルダで Cloud KMS Autokey を有効にして構成する方法について説明します。Autokey の詳細については、Autokey の概要をご覧ください。 このページの手順は、セキュリティ管理者が行う必要があります。
始める前に
Cloud KMS Autokey を有効にする前に、次のものが必要です。
- Autokey を有効にするフォルダを含む組織リソース。Autokey を有効にするフォルダがない場合は、新しいリソース フォルダを作成できます。このフォルダで Autokey を有効にすると、フォルダ内のすべてのリソース プロジェクトで Autokey が有効になります。
- Autokey を使用するリソース プロジェクトがあるものの、Autokey を有効にするフォルダ内にない場合は、既存のリソース プロジェクトを新しいフォルダに移動できます。
必要なロール
Autokey を有効にして構成するために必要な権限を取得するには、組織またはフォルダで次の IAM ロールを付与するよう管理者に依頼してください。
- Cloud KMS Autokey 管理者(
roles/cloudkms.autokeyAdmin
) - フォルダ IAM 管理者(
roles/resourcemanager.folderIamAdmin
) - 請求先アカウント ユーザー(
roles/billing.user
)
ロールの付与の詳細については、アクセスの管理をご覧ください。
これらの事前定義ロールには、Autokey を有効にして構成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Autokey を有効にして構成するには、次の権限が必要です。
-
cloudkms.autokeyConfigs.*
-
cloudkms.projects.showEffectiveAutokeyConfig
-
resourcemanager.folders.get
-
resourcemanager.folders.getIamPolicy
-
resourcemanager.folders.setIamPolicy
-
billing.resourceAssociations.create
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
Autokey を有効にする方法を決定する
Terraform を使用して必要な構成の変更を行うことで、Infrastructure as a Service 戦略の一部として Autokey を有効にできます。Terraform を使用して Autokey を有効にする場合は、このページの Terraform を使用して Autokey を有効にするをご覧ください。Terraform を使用しない場合は、まず次のセクションの手順に沿って操作してください。
鍵プロジェクトを設定する
Autokey によって作成された Cloud KMS リソースを含む新しい鍵プロジェクトを作成することをおすすめします。鍵プロジェクトは組織リソース内に作成する必要があります。Autokey によって作成された鍵に使用する鍵プロジェクトがすでにある場合は、鍵プロジェクトを作成するのセクションをスキップして、このページの Autokey 鍵プロジェクトを構成するから続けてください。
鍵プロジェクトは、Autokey を有効にするフォルダと同じフォルダ内に作成できます。鍵プロジェクト内に他のリソースを作成しないでください。鍵プロジェクトで Autokey で保護されたリソースを作成しようとすると、Autokey は新しい鍵のリクエストを拒否します。
今後 Assured Workloads に移行する必要がある場合は、これらの鍵で保護されているリソースと同じフォルダ内に鍵プロジェクトを作成します。
組織で constraints/gcp.restrictCmekCryptoKeyProjects
組織のポリシーの制約を使用して、すべての CMEK が指定した鍵プロジェクトからのものであることを確認している場合は、鍵プロジェクトを許可されたプロジェクトのリストに追加する必要があります。CMEK の組織のポリシーの詳細については、CMEK の組織のポリシーをご覧ください。
鍵プロジェクトを作成する
コンソール
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- [組織の選択] で、プロジェクトを作成する組織リソースを選択します。
- [プロジェクトの作成] をクリックします。
- 表示される [新しいプロジェクト] ウィンドウで、プロジェクト名を入力し、請求先アカウントを選択します。プロジェクト名には文字、数字、単一引用符、ハイフン、スペース、感嘆符のみを使用でき、4~30 文字にする必要があります。
- [ロケーション] で、鍵プロジェクトの親になるリソースを選択します。
- プロジェクトの作成を終了するには、[作成] をクリックします。
gcloud
新しいプロジェクトを作成します。
gcloud projects create PROJECT_ID \ --PARENT_TYPE=PARENT_ID
次のように置き換えます。
PROJECT_ID
: キーリングを含むプロジェクトの ID。PARENT_TYPE
: 新しい鍵プロジェクトを作成するリソースのタイプ。「organization
」と入力して特定の組織の下に新しい鍵プロジェクトを作成するか、「folder
」と入力して特定のフォルダに新しい鍵プロジェクトを作成します。PARENT_ID
: 鍵プロジェクトを作成する組織またはフォルダの ID。
Autokey 鍵プロジェクトを準備する
コンソール
鍵プロジェクトで Cloud KMS API を有効にします。
新しい鍵プロジェクトを使用している場合は、鍵プロジェクトに対する Cloud KMS 管理者権限を Cloud KMS 管理者ユーザーに付与します。
Google Cloud コンソールの [IAM] ページに移動します。
鍵プロジェクトを選択します。
[アクセスを許可] をクリックし、ユーザーのメールアドレスを入力します。
[Cloud KMS 管理者] ロールを選択します。
[保存] をクリックします。
gcloud
鍵プロジェクトで Cloud KMS API を有効にします。
gcloud services enable cloudkms.googleapis.com
鍵プロジェクトの Cloud KMS 管理者権限を 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 鍵を管理するユーザーのメールアドレス。
リソース フォルダで Cloud KMS Autokey を有効にする
コンソール
Google Cloud コンソールで、[KMS コントロール] ページに移動します。
コンテキスト選択ツールから、Autokey を有効にするフォルダを選択します。
[有効にする] をクリックします。
鍵プロジェクトを選択し、[送信] をクリックします。
フォルダで Cloud KMS Autokey が有効になっていることを示すメッセージが表示されます。
API
Autokey を有効にするフォルダの AutokeyConfig
を作成します。
curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_NUMBER/autokeyConfig?updateMask=keyProject" \
--request "PATCH" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"key_project": "projects/PROJECT_ID"}'
次のように置き換えます。
FOLDER_NUMBER
: Autokey を有効にするフォルダのフォルダ番号。PROJECT_ID
: 鍵プロジェクトの ID。
Cloud KMS サービス エージェントを設定する
鍵プロジェクトの Cloud KMS サービス エージェントは、Cloud KMS 管理者に代わって、リソースの作成時に鍵を作成し、IAM ポリシー バインディングを適用します。鍵を作成して割り当てるには、Cloud KMS サービス エージェントに Cloud KMS 管理者権限が必要です。
Cloud KMS サービス エージェントを作成します。
gcloud beta services identity create --service=cloudkms.googleapis.com \ --project=PROJECT_NUMBER
PROJECT_NUMBER
は、鍵プロジェクトのプロジェクト番号に置き換えます。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 を使用するには、必要なロールをデベロッパーに付与する必要があります。ロールはフォルダレベルまたはプロジェクト レベルで付与できます。このロールを使用すると、デベロッパーはそのフォルダまたはプロジェクトでリソースを作成するときに、Cloud KMS サービス エージェントに鍵をリクエストできます。
次のいずれかまたは両方を選択してください。
フォルダレベルで
roles/cloudkms.autokeyUser
ロールを付与します。gcloud resource-manager folders add-iam-policy-binding \ FOLDER_NUMBER --role=roles/cloudkms.autokeyUser \ --member=user:USER_EMAIL
次のように置き換えます。
FOLDER_NUMBER
: Autokey を有効にするフォルダのフォルダ番号。USER_EMAIL
: Autokey の使用権限を付与するユーザーのメールアドレス。
プロジェクト レベルで
roles/cloudkms.autokeyUser
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_NUMBER \ --role=roles/cloudkms.autokeyUser \ --member=user:USER_EMAIL
次のように置き換えます。
PROJECT_ID
: リソース プロジェクトの ID。USER_EMAIL
: Autokey の使用権限を付与するユーザーのメールアドレス。
Autokey デベロッパーがオンデマンドで鍵を作成できるようになりました。Autokey によってオンデマンドで作成された鍵を使用して保護されたリソースを作成する方法については、Autokey を使用して保護されたリソースを作成するをご覧ください。
Terraform を使用して Autokey を有効にする
次の 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 admin 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 in this folder */
resource "google_kms_autokey_config" "autokey_config" {
provider = google-beta
folder = google_folder.autokey_folder.folder_id
key_project = google_project.key_management_project.project_id
}
次のように置き換えます。
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
)。
Autokey の使用を適用する
フォルダ内で Autokey の使用を強制する場合、IAM アクセス制御と CMEK の組織のポリシーを組み合わせることで実現できます。これを行うには、Cloud KMS サービス エージェント以外のプリンシパルから鍵作成権限を削除し、Autokey 鍵プロジェクトを使用して CMEK ですべてのリソースを保護する必要があります。
フォルダ内で Autokey の使用を適用するには、次の手順に沿って操作します。
鍵プロジェクトで鍵を手動で作成するためのアクセス権を削除します。鍵を手動で作成できない場合、このプロジェクトでは Autokey によって作成された鍵のみを作成できます。アクセス制御の詳細については、IAM によるアクセス制御をご覧ください。
constraints/gcp.restrictNonCmekServices
制約を使用して CMEK でリソースを保護する必要があるように、フォルダで組織のポリシーを設定します。詳しくは、CMEK 保護を要求するをご覧ください。フォルダで組織のポリシーを設定し、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 をクリア
コンソール
Google Cloud コンソールで、[KMS コントロール] ページに移動します。
コンテキスト選択ツールから、Autokey を無効にするフォルダを選択します。
[無効にする] をクリックします。
Autokey を無効にすることを確認するメッセージが表示されます。
Autokey を無効にするには、[確定] をクリックします。
フォルダで Cloud KMS Autokey が無効になっていることを示すメッセージが表示されます。
API
Autokey を無効にするフォルダの AutokeyConfig
をクリアします。
curl "https://cloudkms.googleapis.com/v1/folders/FOLDER_NUMBER/autokeyConfig?updateMask=keyProject" \
--request "PATCH" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{}'
次のように置き換えます。
FOLDER_NUMBER
: Autokey を無効にするフォルダのフォルダ番号。
Autokey のロールを取り消す
省略可:
roles/cloudkms.autokeyAdmin
ロールを取り消します。gcloud resource-manager folders remove-iam-policy-binding \ FOLDER_NUMBER --role=roles/cloudkms.autokeyAdmin \ --member=user:USER_EMAIL
次のように置き換えます。
FOLDER_NUMBER
: Autokey を無効にしたフォルダのフォルダ。USER_EMAIL
: Autokey を管理する権限を取り消すユーザーのメールアドレス。
省略可: フォルダレベルで
roles/cloudkms.autokeyUser
ロールを取り消します。gcloud resource-manager folders remove-iam-policy-binding \ FOLDER_NUMBER --role=roles/cloudkms.autokeyUser \ --member=user:USER_EMAIL
次のように置き換えます。
FOLDER_NUMBER
: Autokey を無効にしたフォルダのフォルダ番号。USER_EMAIL
: Autokey の使用権限を取り消すユーザーのメールアドレス。
(省略可)プロジェクト レベルで
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 の使用権限を取り消すユーザーのメールアドレス。
省略可: 他のフォルダで 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 に置き換えます。(省略可)鍵プロジェクト内で作成された鍵を引き続き使用しない場合は、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 の使用権限を取り消すユーザーのメールアドレス。
次のステップ
- 詳しくは、Autokey を使用するタイミングをご覧ください。
- 詳しくは、Autokey の仕組みをご覧ください。
- Autokey デベロッパーは、Autokey を使用して保護されたリソースを作成できるようになりました。