Skip to content

Commit ea8ef28

Browse files
feat: add field extraction to all extra lambdas (#215)
* feat: add field extraction to all extra lambdas * fix: remove print in lambda * feat: create field extraction forgecicd_trust_validation * fix: replace time from session name
1 parent 40dc19f commit ea8ef28

File tree

4 files changed

+51
-11
lines changed

4 files changed

+51
-11
lines changed

modules/integrations/splunk_cloud_conf_shared/props_cloudwatchlogs.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ resource "splunk_configs_conf" "forgecicd_cloudwatchlogs" {
66
"REPORT-forgecicd_cloudwatchlogs_lambda_tenant_fields" = "forgecicd_cloudwatchlogs_lambda_tenant_fields"
77
"REPORT-forgecicd_cloudwatchlogs_global_lambda_tenant_fields" = "forgecicd_cloudwatchlogs_global_lambda_tenant_fields"
88
"REPORT-forgecicd_extra_lambda_tenant_fields" = "forgecicd_extra_lambda_tenant_fields"
9+
"REPORT-forgecicd_trust_validation" = "forgecicd_trust_validation"
910
}
1011
lifecycle {
1112
ignore_changes = [

modules/integrations/splunk_cloud_conf_shared/transforms_lambda.tf

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ resource "splunk_configs_conf" "forgecicd_extra_lambda_tenant_fields" {
22
name = "transforms/forgecicd_extra_lambda_tenant_fields"
33

44
variables = {
5-
"REGEX" = "(?<aws_region>[^:]+):\\/aws\\/lambda\\/(?<forgecicd_tenant>[a-z0-9]+)-(?<forgecicd_region_alias>[a-z0-9]+)-(?<forgecicd_vpc_alias>[a-z0-9]+)-(?<forgecicd_log_type>github-app-runner-group|github-clean-global-lock)"
5+
"REGEX" = "(?<aws_region>[^:]+):\\/aws\\/lambda\\/(?<forgecicd_tenant>[a-z0-9]+)-(?<forgecicd_region_alias>[a-z0-9]+)-(?<forgecicd_vpc_alias>[a-z0-9]+)-(?<forgecicd_log_type>register-github-app-runner-group|github-webhook-relay|clean-global-lock|job-log-archiver|job-log-dispatcher|forge-trust-validator)"
66
"FORMAT" = "aws_region::$1 forgecicd_tenant::$2 forgecicd_region_alias::$3 forgecicd_vpc_alias::$4 forgecicd_log_type::$5"
77
"SOURCE_KEY" = "source"
88
"CLEAN_KEYS" = "0"
@@ -29,3 +29,37 @@ resource "splunk_configs_conf" "forgecicd_extra_lambda_tenant_fields" {
2929
]
3030
}
3131
}
32+
33+
34+
resource "splunk_configs_conf" "forgecicd_trust_validation" {
35+
name = "transforms/forgecicd_trust_validation"
36+
37+
variables = {
38+
REGEX = "Validation complete:\\s*(\\[[^\\r\\n]+])"
39+
FORMAT = "forgecicd_trust_validation::$1"
40+
SOURCE_KEY = "_raw"
41+
CLEAN_KEYS = "0"
42+
}
43+
44+
acl {
45+
app = var.splunk_conf.acl.app
46+
owner = var.splunk_conf.acl.owner
47+
sharing = var.splunk_conf.acl.sharing
48+
read = var.splunk_conf.acl.read
49+
write = var.splunk_conf.acl.write
50+
}
51+
lifecycle {
52+
ignore_changes = [
53+
variables["CAN_OPTIMIZE"],
54+
variables["DEFAULT_VALUE"],
55+
variables["DEPTH_LIMIT"],
56+
variables["DEST_KEY"],
57+
variables["KEEP_EMPTY_VALS"],
58+
variables["LOOKAHEAD"],
59+
variables["MATCH_LIMIT"],
60+
variables["MV_ADD"],
61+
variables["WRITE_META"],
62+
variables["disabled"]
63+
]
64+
}
65+
}

modules/platform/forge_runners/forge_trust_validator/forge_roles.tf

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ data "aws_iam_role" "forge" {
22
for_each = toset(var.forge_iam_roles)
33

44
name = replace(each.value, "/^.*//", "")
5+
6+
depends_on = [module.forge_trust_validator_lambda]
57
}
68

79
locals {
@@ -41,7 +43,7 @@ locals {
4143

4244
# concatenated_trust_object[arn] = full updated policy for each role
4345
concatenated_trust_object = {
44-
for arn, trust in local.original_trust :
46+
for arn, trust in local.updated_statements :
4547
arn => {
4648
Version = try(trust.Version, "2012-10-17")
4749
Statement = local.updated_statements[arn]
@@ -53,14 +55,20 @@ locals {
5355
for arn, obj in local.concatenated_trust_object :
5456
arn => jsonencode(obj)
5557
}
58+
59+
original_statements_trust_json = {
60+
for arn, obj in local.original_statements :
61+
arn => jsonencode(obj)
62+
}
5663
}
5764

5865
resource "null_resource" "update_forge_role_trust" {
5966
for_each = data.aws_iam_role.forge
6067

6168
triggers = {
62-
role_name = each.value.name
63-
future_sha = sha1(local.concatenated_trust_json[each.key])
69+
role_name = each.value.name
70+
original_sha = sha1(local.original_statements_trust_json[each.key])
71+
future_sha = sha1(local.concatenated_trust_json[each.key])
6472
}
6573

6674
provisioner "local-exec" {

modules/platform/forge_runners/forge_trust_validator/lambda/forge_trust_validator.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import json
22
import logging
33
import os
4-
import time
54
from typing import Any, Dict, List
65

76
import boto3
@@ -109,7 +108,7 @@ def validate_forge_role_against_tenants(
109108
session_policy = build_session_policy_for_tenants(tenant_role_arns)
110109
forge_assume_resp = assume_role(
111110
role_arn=forge_role_arn,
112-
session_name=f"ForgeValidation-{int(time.time())}",
111+
session_name='ForgeValidation',
113112
session_policy=session_policy,
114113
)
115114
LOG.info(f"Successfully assumed Forge role: {forge_role_arn}")
@@ -133,7 +132,7 @@ def validate_forge_role_against_tenants(
133132
try:
134133
sts_as_forge.assume_role(
135134
RoleArn=tenant_arn,
136-
RoleSessionName=f"TenantValidation-Basic-{int(time.time())}",
135+
RoleSessionName='TenantValidation-Basic',
137136
)
138137
LOG.info(f"Basic AssumeRole successful for {tenant_arn}")
139138
tenant_entry['assume_role_success'] = True
@@ -150,14 +149,13 @@ def validate_forge_role_against_tenants(
150149
try:
151150
tenant_resp = sts_as_forge.assume_role(
152151
RoleArn=tenant_arn,
153-
RoleSessionName=f"TenantValidation-Tags-{int(time.time())}",
152+
RoleSessionName='TenantValidation-Tags',
154153
Tags=[
155154
{'Key': 'CreatedBy', 'Value': 'ForgeTrustValidator'},
156155
{'Key': 'Validation', 'Value': 'True'}
157156
]
158157
)
159158

160-
# Optional: verify the tenant creds actually work
161159
tenant_creds = tenant_resp['Credentials']
162160
sts_as_tenant = boto3.client(
163161
'sts',
@@ -239,8 +237,7 @@ def lambda_handler(event, context):
239237
)
240238
all_results.append(res)
241239

242-
LOG.info('Validation complete')
243-
print(json.dumps(all_results, indent=2))
240+
LOG.info('Validation complete: %s', json.dumps(all_results))
244241

245242
return {
246243
'statusCode': 200,

0 commit comments

Comments
 (0)