業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【Hakkyの社内Wiki】Strapi
クラウドとオンプレの違いAIシステム導入時におすすめのクラウドシステムスクレイピングのためのプロキシサーバのAPI
AI

執筆者:Handbook編集部

Google Cloudにおける組織ポリシーをTerraformで設定する

Google Cloud における組織ポリシーを Terraform で設定する

この記事では、Google Cloud における組織ポリシーを Terraform で設定する方法についてまとめました。そもそも組織ポリシーってなにというのは、以下の記事を読んでいただければと思います。

必要な権限

組織のポリシーを管理するためには、組織ポリシー管理者roles/orgpolicy.policyAdminの IAM ロールが付与されている、または以下の権限が付与されている必要があります。

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

Terraform の例

以下はよく使う設定をまとめて書いてみた例です。

# 変数
variable "org_id" {
    type    = "string"
    default = "hogehoge"
}

variable "domain" {
    type    = "string"
    default = "hogehoge"
}

variable "accounts_list" {
    type    = list(string)
    default = [
        "in:asia-northeast1-locations",
        "in:asia-northeast2-locations",
        "asia"
    ]
}

# ソースコードのダウンロードを無効にする
resource "google_organization_policy" "disableCodeDownload" {
  org_id     = var.org_id
  constraint = "appengine.disableCodeDownload"

  boolean_policy {
    enforced = true
  }
}

# デフォルトネットワーク作成の無効化
resource "google_organization_policy" "skipDefaultNetworkCreation" {
  org_id     = var.org_id
  constraint = "compute.skipDefaultNetworkCreation"

  boolean_policy {
    enforced = true
  }
}

# 均一なバケットレベルのアクセスの適用
resource "google_organization_policy" "uniformBucketLevelAccess" {
  org_id     = var.org_id
  constraint = "storage.uniformBucketLevelAccess"

  boolean_policy {
    enforced = true
  }
}

# Cloud IAM のワークロード向けに許可されている外部の ID プロバイダ
resource "google_organization_policy" "workloadIdentityPoolProviders" {
  org_id     = var.org_id
  constraint = "iam.workloadIdentityPoolProviders"

  list_policy {
    deny {
      all = true
    }
  }
}

# Cloud Storage の組織のポリシーに関する制約
resource "google_organization_policy" "publicAccessPrevention" {
  org_id     = var.org_id
  constraint = "storage.publicAccessPrevention"

  boolean_policy {
    enforced = true
  }
}

# OS ログインが必須
resource "google_organization_policy" "requireOsLogin" {
  org_id     = var.org_id
  constraint = "compute.requireOsLogin"

  boolean_policy {
    enforced = true
  }
}

# VPC フローログに対して、事前定義されたポリシーが必須
resource "google_organization_policy" "requireVpcFlowLogs" {
  org_id     = var.org_id
  constraint = "constraints/compute.requireVpcFlowLogs"

  list_policy {
    allow {
      values = [
        "is:COMPREHENSIVE",
      ]
    }
  }
}

# Cloud SQL インスタンスに対するパブリック IP のアクセスを制限する
resource "google_organization_policy" "restrictPublicIp" {
  org_id     = var.org_id
  constraint = "constraints/sql.restrictPublicIp"

  boolean_policy {
    enforced = true
  }
}

# ドメインで制限された連絡先
resource "google_organization_policy" "allowedContactDomains" {
  org_id     = var.org_id
  constraint = "constraints/essentialcontacts.allowedContactDomains"

  list_policy {
    allow {
      values = [
        "is:${var.domain}",
      ]
    }
  }
}

# リソース ロケーションの制限
resource "google_organization_policy" "resourceLocations" {
  org_id     = var.org_id
  constraint = "constraints/gcp.resourceLocations"
  list_policy {
    inherit_from_parent = true
    allow {
      values = [
        "hogehoge1",
        "hogehoge2",
        "hogehoge3"
      ]
    }
  }
}

# Cloud IAM での Workload Identity 連携用に構成できる AWS アカウント
resource "google_organization_policy" "workloadIdentityPoolAwsAccounts" {
  org_id     = var.org_id
  constraint = "constraints/iam.workloadIdentityPoolAwsAccounts"

  list_policy {
    inherit_from_parent = true
    allow {
      values = var.accounts_list
    }
  }
}

# サービス アカウント キーの作成を無効化
resource "google_organization_policy" "disableServiceAccountKeyCreation" {
  org_id     = var.org_id
  constraint = "constraints/iam.disableServiceAccountKeyCreation"

  boolean_policy {
    enforced = true
  }
}

# 特定のフォルダ(リソース階層)でのみサービス アカウント キーの作成を許可
resource "google_folder_organization_policy" "disableServiceAccountKeyCreation-allow" {
  folder     = "folders/${var.folder_id}"
  constraint = "constraints/iam.disableServiceAccountKeyCreation"

  boolean_policy {
    enforced = false
  }
}

# デフォルトのサービス アカウントに対する IAM ロールの自動付与の無効化
resource "google_organization_policy" "automaticIamGrantsForDefaultServiceAccounts" {
  org_id     = var.org_id
  constraint = "iam.automaticIamGrantsForDefaultServiceAccounts"

  boolean_policy {
    enforced = true
  }
}

# サービス アカウント キーのアップロードを制限する
resource "google_organization_policy" "disableServiceAccountKeyUpload" {
  org_id     = var.org_id
  constraint = "iam.disableServiceAccountKeyUpload"

  boolean_policy {
    enforced = true
  }
}

他にも、設定できる項目はあるのですが、よく使いそうな項目を Terraform でまとめてみました。

参考

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年06月15日に最終更新
読み込み中...