Open4

Google Cloud - VPCサービスコントロールのTips

bigface0202bigface0202

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にサービスアカウントキーをアタッチする(こちらのほうが安全)。

bigface0202bigface0202

providerで以下のようにbilling_projectuser_project_overrideを設定すれば、credentials無しでもapply可能だった。

provider.tf
provider "google" {
  billing_project       = <PROJECT_ID>
  user_project_override = true
}
bigface0202bigface0202

一部機能は有料

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にアップグレードする必要があり、有料機能となる。

https://cloud.google.com/beyondcorp-enterprise?hl=ja&_ga=2.106540292.-682782899.1668338229