Google Cloud (Terraformによる作成方法)
Google Cloud に Terraform のコードから連携に必要な情報を作成いただけます。
こちらの手順を進めていただくことで、安全な方法で Securify ASM によるリソースへのアクセスが可能になり、外部へ公開されているリソースを Securify 上で一覧として確認できるようになります。
作成いただく必要のあるリソース
- Service Account
- Workload Identity Pool
- Workload Identity Provider
前提
- 手元から「terraform」のコマンドが実行できること
- 当手順では、
>=1.9.2
推奨
- 当手順では、
- gcloudによるリソース作成権限を持つユーザーでのログインが行われていること
- ログイン方法は公式を参考
- 実施するユーザーが、連携対象となる組織、フォルダ、プロジェクトのいずれか(連携対象による)の IAM の編集権限を持っていること
- 以下権限参考
- サービス アカウント管理者
- IAM Workload Identity プール管理者
リソース作成手順
プロジェクトレベルでの連携
コード
locals { // あなたのSecurifyの組織ID 例: 01234567-89ab-cdef-0123-456789abcdef securify_organization_id = "" // 連携先のプロジェクトID 例: securify-123456 project_id = "" // 連携先のリージョン 東京の例: asia-northeast1 region = "asia-northeast1" // 以下の値をSecurifyで登録してください。 // サービスアカウントID 例: securify-asm-sa service_account_id = "securify-asm-sa" // 連携先のプロジェクト番号 例: 123456789012 project_number = "" // ワークロードIDプールのID 例: securify-asm-pool pool_id = "securify-asm" // ワークロードIDプールプロバイダーのID 例: securify-asm-provider provider_id = "securify-asm" } terraform { required_version = ">=1.9.2" required_providers { google = { source = "hashicorp/google" version = "5.38.0" } } } provider "google" { project = local.project_id region = local.region } # サービスアカウントの作成 resource "google_service_account" "sa" { account_id = local.service_account_id display_name = "Securify ASM クラウド連携用サービスアカウント" } # サービスアカウントに参照者(Viewer)権限を付与 resource "google_project_iam_member" "sa_viewer" { project = local.project_id role = "roles/browser" member = "serviceAccount:${google_service_account.sa.email}" depends_on = [google_service_account.sa] } # サービスアカウントにセキュリティ審査担当者ロールを付与 resource "google_project_iam_member" "sa_security_reviewer" { project = local.project_id role = "roles/iam.securityReviewer" member = "serviceAccount:${google_service_account.sa.email}" depends_on = [google_service_account.sa] } # ワークロードIDプールの作成(フェデレーションIDを使用する場合) resource "google_iam_workload_identity_pool" "pool" { workload_identity_pool_id = local.pool_id display_name = local.pool_id description = "Securify ASM クラウド連携用ワークロードIDプール" } # ワークロードIDプールプロバイダーの作成(フェデレーションIDを使用する場合) resource "google_iam_workload_identity_pool_provider" "provider" { workload_identity_pool_id = google_iam_workload_identity_pool.pool.workload_identity_pool_id workload_identity_pool_provider_id = local.provider_id display_name = local.provider_id attribute_mapping = { "google.subject" = "assertion.sub" } oidc { issuer_uri = "https://oidc.securify.jp" } } # サービスアカウントとワークロードIDの関連付け(フェデレーションIDを使用する場合) resource "google_service_account_iam_binding" "workload_identity_binding" { service_account_id = google_service_account.sa.name role = "roles/iam.workloadIdentityUser" members = [ "principal://iam.googleapis.com/projects/${local.project_number}/locations/global/workloadIdentityPools/${google_iam_workload_identity_pool.pool.workload_identity_pool_id}/subject/job:${local.securify_organization_id}:*" ] }
フォルダレベルでの連携
コード
locals { // あなたのSecurifyの組織ID 例: 01234567-89ab-cdef-0123-456789abcdef securify_organization_id = "" // 連携先のプロジェクトID 例: securify-123456 project_id = "" // 連携先のリージョン 東京の例: asia-northeast1 region = "asia-northeast1" // フォルダ連携の場合はフォルダIDを指定 例: 123456789012 folder_id = "" // 以下の値をSecurifyで登録してください。 // サービスアカウントID 例: securify-asm-sa service_account_id = "securify-asm-sa" // 連携先のプロジェクト番号 例: 123456789012 project_number = "" // ワークロードIDプールのID 例: securify-asm-pool pool_id = "securify-asm" // ワークロードIDプールプロバイダーのID 例: securify-asm-provider provider_id = "securify-asm" } terraform { required_version = ">=1.9.2" required_providers { google = { source = "hashicorp/google" version = "5.38.0" } } } provider "google" { project = local.project_id region = local.region } # サービスアカウントの作成 resource "google_service_account" "sa" { account_id = local.service_account_id display_name = "Securify ASM クラウド連携用サービスアカウント" } # フォルダーレベルの Viewer 権限を付与 resource "google_folder_iam_member" "browser" { folder = "folders/${local.folder_id}" role = "roles/browser" member = "serviceAccount:${google_service_account.sa.email}" depends_on = [google_service_account.sa] } # フォルダーレベルの セキュリティ監査 権限を付与 resource "google_folder_iam_member" "security_reviewer" { folder = "folders/${local.folder_id}" role = "roles/iam.securityReviewer" member = "serviceAccount:${google_service_account.sa.email}" depends_on = [google_service_account.sa] } # ワークロードIDプールの作成(フェデレーションIDを使用する場合) resource "google_iam_workload_identity_pool" "pool" { workload_identity_pool_id = local.pool_id display_name = local.pool_id description = "Securify ASM クラウド連携用ワークロードIDプール" } # ワークロードIDプールプロバイダーの作成(フェデレーションIDを使用する場合) resource "google_iam_workload_identity_pool_provider" "provider" { workload_identity_pool_id = google_iam_workload_identity_pool.pool.workload_identity_pool_id workload_identity_pool_provider_id = local.provider_id display_name = local.provider_id attribute_mapping = { "google.subject" = "assertion.sub" } oidc { issuer_uri = "https://oidc.securify.jp" } } # サービスアカウントとワークロードIDの関連付け(フェデレーションIDを使用する場合) resource "google_service_account_iam_binding" "workload_identity_binding" { service_account_id = google_service_account.sa.name role = "roles/iam.workloadIdentityUser" members = [ "principal://iam.googleapis.com/projects/${local.project_number}/locations/global/workloadIdentityPools/${google_iam_workload_identity_pool.pool.workload_identity_pool_id}/subject/job:${local.securify_organization_id}:*" ] }
組織レベルでの連携
コード
locals { // あなたのSecurifyの組織ID 例: 01234567-89ab-cdef-0123-456789abcdef securify_organization_id = "" // 連携先のプロジェクトID 例: securify-123456 project_id = "" // 連携先のリージョン 東京の例: asia-northeast1 region = "asia-northeast1" // 組織連携の場合は組織IDを指定 例: 123456789012 organization_id = "" // 以下の値をSecurifyで登録してください。 // サービスアカウントID 例: securify-asm-sa service_account_id = "securify-asm-sa" // 連携先のプロジェクト番号 例: 123456789012 project_number = "" // ワークロードIDプールのID 例: securify-asm-pool pool_id = "securify-asm" // ワークロードIDプールプロバイダーのID 例: securify-asm-provider provider_id = "securify-asm" } terraform { required_version = ">=1.9.2" required_providers { google = { source = "hashicorp/google" version = "5.38.0" } } } terraform { required_version = ">=1.9.2" required_providers { google = { source = "hashicorp/google" version = "5.38.0" } } } provider "google" { project = local.project_id region = local.region } # サービスアカウントの作成 resource "google_service_account" "sa" { account_id = local.service_account_id display_name = "Securify ASM クラウド連携用サービスアカウント" } # 組織レベルの Browser 権限を付与 resource "google_organization_iam_member" "browser" { org_id = local.organization_id role = "roles/browser" member = "serviceAccount:${google_service_account.sa.email}" depends_on = [google_service_account.sa] } # 組織レベルの セキュリティ監査 権限を付与 resource "google_organization_iam_member" "security_reviewer" { org_id = local.organization_id role = "roles/iam.securityReviewer" member = "serviceAccount:${google_service_account.sa.email}" depends_on = [google_service_account.sa] } # ワークロードIDプールの作成(フェデレーションIDを使用する場合) resource "google_iam_workload_identity_pool" "pool" { workload_identity_pool_id = local.pool_id display_name = local.pool_id description = "Securify ASM クラウド連携用ワークロードIDプール" } # ワークロードIDプールプロバイダーの作成(フェデレーションIDを使用する場合) resource "google_iam_workload_identity_pool_provider" "provider" { workload_identity_pool_id = google_iam_workload_identity_pool.pool.workload_identity_pool_id workload_identity_pool_provider_id = local.provider_id display_name = local.provider_id attribute_mapping = { "google.subject" = "assertion.sub" } oidc { issuer_uri = "https://oidc.securify.jp" } } # サービスアカウントとワークロードIDの関連付け(フェデレーションIDを使用する場合) resource "google_service_account_iam_binding" "workload_identity_binding" { service_account_id = google_service_account.sa.name role = "roles/iam.workloadIdentityUser" members = [ "principal://iam.googleapis.com/projects/${local.project_number}/locations/global/workloadIdentityPools/${google_iam_workload_identity_pool.pool.workload_identity_pool_id}/subject/job:${local.securify_organization_id}:*" ] }
ローカル変数について
プロジェクト番号
サービスアカウントを作成したプロジェクトの番号
以下の黒塗りの部分
組織ID
Securify に登録している組織IDを入力してください。
不明な方はこちらを参照してください。
コードの適用
上記コードの必要な情報を入力したら以下のコマンドを実行し内容を確認してください。
terraform plan
問題なければ、以下のコマンドを実行し適用してください。
terraform apply
Terraformによる管理がされていない場合
- 事前に、gcloudによるconfigの設定を確認し、リソースを作成するプロジェクトが指定されているかを確認してください。以下のコマンドで確認してください。
gcloud config list
- 確認できたら、以下を実行しterraformを行う環境を作ってください。
terraform init
-
.terraform.lock.hcl
が作成されたら完了です
Securify ASM への登録
Terraformで作成したリソースをSecurify ASMに登録します。
Google Cloud の連携情報登録
サイドバーにある連携設定へアクセスしてください。
連携タイプからGoogle Cloudをクリックしてください。
右上の連携設定を追加ボタンをクリックしてください。
以下項目を入力し、新規作成ボタンをクリックしてください。
- サービスアカウント: 先ほど作成したサービスアカウントのメールアドレス
- プロジェクト番号: サービスアカウントを作成したプロジェクトの番号
- 以下の黒塗りの部分
- アイデンティティプールID: 先ほど作成したWorkload Identity PoolのID
- アイデンティティプロバイダID: 先ほど作成したWorkload Identity ProviderのID
登録した内容でテーブルに追加され、プロジェクトが表示されたら成功です。
チームを割り当てることで検出されたエンドポイントをチームのメンバーが閲覧することが可能となります。
注意点
設定完了後のキャッシュについて
設定完了後、反映されるまでに数分かかる場合があります。
登録に失敗する場合は、時間をあけて再度お試しください。