Skip to content

Commit 11dae81

Browse files
SSPROD-54737 - enhance: support WIF onboarding
1 parent f7360a9 commit 11dae81

File tree

1 file changed

+62
-11
lines changed

1 file changed

+62
-11
lines changed

modules/onboarding/main.tf

Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
#------------------------------------------------------------------#
2-
# Fetch and compute required data for Service Account Key #
2+
# Fetch and compute required data for Workload Identity Federation #
33
#------------------------------------------------------------------#
44

5+
data "sysdig_secure_trusted_cloud_identity" "trusted_identity" {
6+
cloud_provider = "gcp"
7+
}
8+
9+
data "sysdig_secure_tenant_external_id" "external_id" {}
10+
511
data "google_project" "project" {
612
project_id = var.project_id
713
}
@@ -14,6 +20,7 @@ resource "random_id" "suffix" {
1420

1521
locals {
1622
suffix = var.suffix == null ? random_id.suffix[0].hex : var.suffix
23+
# account_id = time_sleep.wait_for_apply_google_permissions[0].
1724
}
1825

1926
resource "google_service_account" "onboarding_auth" {
@@ -23,9 +30,39 @@ resource "google_service_account" "onboarding_auth" {
2330
project = var.project_id
2431
}
2532

26-
#---------------------------------
27-
# role permissions for onboarding
28-
#---------------------------------
33+
#------------------------------------------------------------#
34+
# Configure Workload Identity Federation for auth #
35+
# See https://cloud.google.com/iam/docs/access-resources-aws #
36+
#------------------------------------------------------------#
37+
38+
resource "google_iam_workload_identity_pool" "onboarding_auth_pool" {
39+
project = var.project_id
40+
workload_identity_pool_id = "sysdig-secure-onboarding-${local.suffix}"
41+
}
42+
43+
resource "google_iam_workload_identity_pool_provider" "onboarding_auth_pool_provider" {
44+
project = var.project_id
45+
workload_identity_pool_id = google_iam_workload_identity_pool.onboarding_auth_pool.workload_identity_pool_id
46+
workload_identity_pool_provider_id = "sysdig-onboarding-${local.suffix}"
47+
display_name = "Sysdigcloud onboarding auth"
48+
description = "AWS based pool provider for Sysdig Secure Data Onboarding resources"
49+
disabled = false
50+
51+
attribute_condition = "attribute.aws_role==\"arn:aws:sts::${data.sysdig_secure_trusted_cloud_identity.trusted_identity.aws_account_id}:assumed-role/${data.sysdig_secure_trusted_cloud_identity.trusted_identity.aws_role_name}/${data.sysdig_secure_tenant_external_id.external_id.external_id}\""
52+
53+
attribute_mapping = {
54+
"google.subject" = "assertion.arn",
55+
"attribute.aws_role" = "assertion.arn"
56+
}
57+
58+
aws {
59+
account_id = data.sysdig_secure_trusted_cloud_identity.trusted_identity.aws_account_id
60+
}
61+
}
62+
63+
#---------------------------------------------------------------------------------------------
64+
# role permissions for Onboarding (GCP Predefined Roles for Sysdig Cloud Onboarding)
65+
#---------------------------------------------------------------------------------------------
2966
resource "google_project_iam_member" "browser" {
3067
count = var.is_organizational ? 0 : 1
3168

@@ -34,12 +71,18 @@ resource "google_project_iam_member" "browser" {
3471
member = "serviceAccount:${google_service_account.onboarding_auth.email}"
3572
}
3673

37-
#--------------------------------
38-
# service account private key
39-
40-
#--------------------------------
41-
resource "google_service_account_key" "onboarding_service_account_key" {
74+
# attaching WIF as a member to the service account for auth
75+
resource "google_service_account_iam_member" "custom_onboarding_auth" {
4276
service_account_id = google_service_account.onboarding_auth.name
77+
role = "roles/iam.workloadIdentityUser"
78+
member = "principalSet://iam.googleapis.com/projects/${data.google_project.project.number}/locations/global/workloadIdentityPools/${google_iam_workload_identity_pool.onboarding_auth_pool.workload_identity_pool_id}/attribute.aws_role/arn:aws:sts::${data.sysdig_secure_trusted_cloud_identity.trusted_identity.aws_account_id}:assumed-role/${data.sysdig_secure_trusted_cloud_identity.trusted_identity.aws_role_name}/${data.sysdig_secure_tenant_external_id.external_id.external_id}"
79+
}
80+
81+
# add some timing for SA and permissions to be completely ready before calling Sysdig Backend, ensure that onboarding will pass first time
82+
resource "time_sleep" "wait_for_apply_google_permissions" {
83+
depends_on = [google_organization_iam_member.browser, google_project_iam_member.browser]
84+
85+
create_duration = "30s"
4386
}
4487

4588
#---------------------------------------------------------------------------------------------
@@ -60,15 +103,23 @@ resource "sysdig_secure_cloud_auth_account" "google_account" {
60103
version = "v0.1.0"
61104
service_principal_metadata = jsonencode({
62105
gcp = {
63-
key = google_service_account_key.onboarding_service_account_key.private_key
106+
workload_identity_federation = {
107+
pool_id = google_iam_workload_identity_pool.onboarding_auth_pool.workload_identity_pool_id
108+
pool_provider_id = google_iam_workload_identity_pool_provider.onboarding_auth_pool_provider.workload_identity_pool_provider_id
109+
project_number = data.google_project.project.number
110+
}
111+
email = google_service_account.onboarding_auth.email
64112
}
65113
})
66114
}
67115

68116
depends_on = [
69117
google_service_account.onboarding_auth,
118+
google_iam_workload_identity_pool.onboarding_auth_pool,
119+
google_iam_workload_identity_pool_provider.onboarding_auth_pool_provider,
70120
google_project_iam_member.browser,
71-
google_service_account_key.onboarding_service_account_key
121+
google_service_account_iam_member.custom_onboarding_auth,
122+
time_sleep.wait_for_apply_google_permissions
72123
]
73124

74125
lifecycle {

0 commit comments

Comments
 (0)