Open4
Google Cloud - VPCサービスコントロールのTips
Role
VPCサービスコントロールを登録するには以下の組織レベルのPermissionが必要。
- accesscontextmanager.policies.create
- accesscontextmanager.policies.list
これらを含むRoleは以下となる。
- roles/accesscontextmanager.policyAdmin
- roles/accesscontextmanager.policyEditor
上記のRoleを組織で付与する必要がある。
Terraformでapplyするときの注意点
gcloud CLIの認証情報でVPCサービスコントロールの設定をapplyしようとするとエラーがでる。
Error creating AccessPolicy: googleapi:
Error 403: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the accesscontextmanager.googleapis.com.
We recommend configuring the billing/quota_project setting in gcloud or using a service account through the auth/impersonate_service_account setting.
For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.
If you are getting this error with curl or similar tools, you may need to specify 'X-Goog-User-Project' HTTP header for quota and billing purposes.
For more information regarding 'X-Goog-User-Project' header, please check https://cloud.google.com/apis/docs/system-parameters.
そのため、適切な権限を付与したServiceAccountを作成し、それをTerraformのCredentialsに利用する。
自分は組織における以下の権限を付与した。
- roles/orgpolicy.policyAdmin
- roles/iam.organizationRoleAdmin
- roles/accesscontextmanager.policyAdmin
TerraformでCredentialsにサービスアカウントキーを使う場合はproviderに記載する
provider.tf
provider "google" {
credentials = file("key/service-account-key.json")
}
もしくは、Terraform apply用のGCEを作成し、そのGCEにサービスアカウントキーをアタッチする(こちらのほうが安全)。
providerで以下のようにbilling_project
とuser_project_override
を設定すれば、credentials
無しでもapply可能だった。
provider.tf
provider "google" {
billing_project = <PROJECT_ID>
user_project_override = true
}
一部機能は有料
OSの縛りを設ける
resource "google_access_context_manager_access_level" "service2_access_level" {
parent = "accessPolicies/${google_access_context_manager_access_policy.access_policy.name}"
name = "accessPolicies/${google_access_context_manager_access_policy.access_policy.name}/accessLevels/windows_no_lock"
title = "windows_no_lock"
basic {
conditions {
device_policy {
require_screen_lock = false
os_constraints {
os_type = "DESKTOP_WINDOWS"
}
}
regions = [
"ASIA"
]
}
}
}
アクセスレベルでOSの制限を設けようとしたところ、エラーが出た。
Error: Error creating AccessLevel: googleapi: Error 400: Org owning policy must have license
│
│ with google_access_context_manager_access_level.service2_access_level,
│ on accesss_context_manager_service_perimeters_service2.tf line 14, in resource "google_access_context_manager_access_level" "service2_access_level":
│ 14: resource "google_access_context_manager_access_level" "service2_access_level" {
OSの制限を設ける場合には、BeyondCorp Enterprise Premiumにアップグレードする必要があり、有料機能となる。