Skip to content

Commit a732753

Browse files
committed
attempt to create kubernetes secrets to obscure credentials
1 parent f9dd1cb commit a732753

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

airflow/dags/appgen_dag.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
build_ec2_type_label,
2626
get_affinity,
2727
)
28+
from kubernetes import client as k8s_client_lib
29+
from kubernetes import config as k8s_config_lib
30+
import base64
31+
from airflow.providers.cncf.kubernetes.secret import Secret as AirflowK8sSecret
2832

2933
from airflow import DAG
3034

@@ -39,6 +43,8 @@
3943
DOCKERHUB_TOKEN = "/unity/ads/app_gen/development/dockerhub_api_key"
4044
DOCKSTORE_TOKEN = "/unity/ads/app_gen/development/dockstore_token"
4145

46+
K8S_SECRET_NAME = "sps-app-credentials" # Must match metadata.name in kubernetes_secret
47+
4248
# HOST_SECRET_DIR = "/mnt/token-volume"
4349
# os.makedirs(HOST_SECRET_DIR, exist_ok=True)
4450

@@ -110,6 +116,27 @@
110116
k8s.V1EnvVar(name="GITHUB_REPO", value="{{ params.repository }}"),
111117
]
112118

119+
secret_env_vars = [
120+
AirflowK8sSecret(
121+
deploy_type='env', # Expose as environment variable
122+
deploy_target='DOCKERHUB_USERNAME_IN_POD', # Name of the ENV VAR inside your pod
123+
secret=K8S_SECRET_NAME, # Name of the K8s Secret
124+
key='DOCKERHUB_USERNAME' # Key in the K8s Secret's data field
125+
),
126+
AirflowK8sSecret(
127+
deploy_type='env',
128+
deploy_target='DOCKERHUB_TOKEN_IN_POD',
129+
secret=K8S_SECRET_NAME,
130+
key='DOCKERHUB_TOKEN'
131+
),
132+
AirflowK8sSecret(
133+
deploy_type='env',
134+
deploy_target='DOCKSTORE_TOKEN_IN_POD',
135+
secret=K8S_SECRET_NAME,
136+
key='DOCKSTORE_TOKEN'
137+
)
138+
]
139+
113140
def setup(ti=None, **context):
114141
"""
115142
Task that selects the proper Karpenter Node Pool depending on the user requested resources.
@@ -195,6 +222,7 @@ def setup(ti=None, **context):
195222
# )
196223
# )
197224
# ],
225+
secrets=[secret_env_vars],
198226
volume_mounts=[
199227
k8s.V1VolumeMount(name="token-volume", mount_path="/")
200228
],

terraform-unity/main.tf

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,37 @@ resource "kubernetes_namespace" "service_area" {
1414
}
1515
}
1616

17+
data "aws_ssm_parameter" "dockerhub_username" {
18+
name = "/unity/ads/app_gen/development/dockerhub_username"
19+
with_decryption = true
20+
}
21+
22+
data "aws_ssm_parameter" "dockerhub_api_key" {
23+
name = "/unity/ads/app_gen/development/dockerhub_api_key"
24+
with_decryption = true
25+
}
26+
27+
data "aws_ssm_parameter" "dockstore_token" {
28+
name = "/unity/ads/app_gen/development/dockstore_token"
29+
with_decryption = true
30+
}
31+
32+
resource "kubernetes_secret" "sps_app_credentials" {
33+
metadata {
34+
name = sps_app_credentials
35+
namespace = kubernetes_namespace.service_area.metadata[0].name
36+
}
37+
# Use 'string_data' for raw string values. Terraform will automatically base64 encode them.
38+
# The keys here (e.g., "DOCKERHUB_USERNAME") are what you will reference in your Airflow DAG.
39+
string_data = {
40+
"DOCKERHUB_USERNAME" = data.aws_ssm_parameter.dockerhub_username.value
41+
"DOCKERHUB_TOKEN" = data.aws_ssm_parameter.dockerhub_api_key.value
42+
"DOCKSTORE_TOKEN" = data.aws_ssm_parameter.dockstore_token.value
43+
}
44+
45+
type = "Opaque" # Default type, suitable for credentials
46+
}
47+
1748
module "unity-sps-database" {
1849
source = "./modules/terraform-unity-sps-database"
1950
project = var.project

0 commit comments

Comments
 (0)