Skip to content

Commit b6a344e

Browse files
committed
refactor: improve ingestion safety and log sanitization
1 parent 0a07cae commit b6a344e

4 files changed

Lines changed: 44 additions & 7 deletions

File tree

ingestion/src/metadata/ingestion/source/database/sas/client.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
logger = ingestion_logger()
2626

27+
SAS_CLI_AUTH_HEADER = "Basic c2FzLmNsaTo="
28+
2729

2830
class SASClient:
2931
"""
@@ -39,7 +41,7 @@ def __init__(self, config: SASConnection):
3941
auth_token=self.get_auth_token,
4042
api_version="",
4143
allow_redirects=True,
42-
verify=False,
44+
verify=self.config.verifySSL,
4345
)
4446
self.client = TrackedREST(client_config, source_name="sas")
4547
# custom setting
@@ -164,8 +166,33 @@ def get_token(self, base_url, user, password):
164166
payload = {"grant_type": "password", "username": user, "password": password}
165167
headers = {
166168
"Content-type": "application/x-www-form-urlencoded",
167-
"Authorization": "Basic c2FzLmNsaTo=",
169+
"Authorization": SAS_CLI_AUTH_HEADER,
168170
}
169171
url = base_url + endpoint
170-
response = requests.request("POST", url, headers=headers, data=payload, verify=False, timeout=10)
171-
return response.json()["access_token"]
172+
response = requests.request(
173+
"POST",
174+
url,
175+
headers=headers,
176+
data=payload,
177+
verify=self.config.verifySSL,
178+
timeout=10,
179+
)
180+
logger.debug(
181+
"Token request for user: %s completed with status: %s",
182+
user,
183+
response.status_code,
184+
)
185+
response.raise_for_status()
186+
try:
187+
body = response.json()
188+
except ValueError as exc:
189+
raise RuntimeError(
190+
f"SAS token endpoint returned non-JSON response (HTTP {response.status_code})"
191+
) from exc
192+
193+
token = body.get("access_token")
194+
if not token:
195+
raise RuntimeError(
196+
f"Failed to retrieve access_token from SAS (HTTP {response.status_code})"
197+
)
198+
return token

ingestion/src/metadata/ingestion/source/search/elasticsearch/connection.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def get_ssl_context(ssl_config: SslConfig) -> ssl.SSLContext:
133133
)
134134
return ssl_context # noqa: RET504
135135

136-
return ssl._create_unverified_context() # pylint: disable=protected-access
136+
return ssl.create_default_context()
137137

138138

139139
def get_connection(connection: ElasticsearchConnection) -> Elasticsearch:
@@ -146,7 +146,11 @@ def get_connection(connection: ElasticsearchConnection) -> Elasticsearch:
146146
if isinstance(connection.authType, BasicAuthentication) and connection.authType.username:
147147
basic_auth = (
148148
connection.authType.username,
149-
connection.authType.password.get_secret_value() if connection.authType.password else None,
149+
(
150+
connection.authType.password.get_secret_value()
151+
if connection.authType.password
152+
else None
153+
),
150154
)
151155

152156
if isinstance(connection.authType, ApiKeyAuthentication):

ingestion/src/metadata/utils/secrets/aws_secrets_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def get_string_value(self, secret_id: str) -> Optional[str]: # noqa: UP045
5252
try:
5353
kwargs = {"SecretId": secret_id}
5454
response = self.client.get_secret_value(**kwargs)
55-
logger.debug("Got value for secret %s.", secret_id)
55+
logger.debug("Successfully retrieved value from secrets manager.")
5656
except ClientError as err:
5757
logger.debug(traceback.format_exc())
5858
logger.error(f"Couldn't get value for secret [{secret_id}]: {err}")

openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/sasConnection.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@
114114
"supportsMetadataExtraction": {
115115
"title": "Supports Metadata Extraction",
116116
"$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction"
117+
},
118+
"verifySSL": {
119+
"title": "Verify SSL",
120+
"description": "Verify SSL certificates for the SAS Viya deployment.",
121+
"type": "boolean",
122+
"default": true
117123
}
118124
},
119125
"required": ["username", "password", "serverHost"],

0 commit comments

Comments
 (0)