Skip to content

Commit 83b5fc7

Browse files
committed
refactor: improve ingestion safety and log sanitization
1 parent aaeab9e commit 83b5fc7

4 files changed

Lines changed: 43 additions & 12 deletions

File tree

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

Lines changed: 28 additions & 7 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
"""
@@ -41,7 +43,7 @@ def __init__(self, config: SASConnection):
4143
auth_token=self.get_auth_token,
4244
api_version="",
4345
allow_redirects=True,
44-
verify=False,
46+
verify=self.config.verifySSL,
4547
)
4648
self.client = TrackedREST(client_config, source_name="sas")
4749
# custom setting
@@ -170,14 +172,33 @@ def get_token(self, base_url, user, password):
170172
payload = {"grant_type": "password", "username": user, "password": password}
171173
headers = {
172174
"Content-type": "application/x-www-form-urlencoded",
173-
"Authorization": "Basic c2FzLmNsaTo=",
175+
"Authorization": SAS_CLI_AUTH_HEADER,
174176
}
175177
url = base_url + endpoint
176178
response = requests.request(
177-
"POST", url, headers=headers, data=payload, verify=False, timeout=10
179+
"POST",
180+
url,
181+
headers=headers,
182+
data=payload,
183+
verify=self.config.verifySSL,
184+
timeout=10,
178185
)
179-
text_response = response.json()
180-
logger.info(
181-
f"this is user: {user}, password: {password}, text: {text_response}"
186+
logger.debug(
187+
"Token request for user: %s completed with status: %s",
188+
user,
189+
response.status_code,
182190
)
183-
return response.json()["access_token"]
191+
response.raise_for_status()
192+
try:
193+
body = response.json()
194+
except ValueError as exc:
195+
raise RuntimeError(
196+
f\"SAS token endpoint returned non-JSON response (HTTP {response.status_code})\"
197+
) from exc
198+
199+
token = body.get(\"access_token\")
200+
if not token:
201+
raise RuntimeError(
202+
f\"Failed to retrieve access_token from SAS (HTTP {response.status_code})\"
203+
)
204+
return token

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"""
1313
Source connection handler
1414
"""
15+
1516
import ssl
1617
from pathlib import Path
1718
from typing import Optional
@@ -138,7 +139,7 @@ def get_ssl_context(ssl_config: SslConfig) -> ssl.SSLContext:
138139
)
139140
return ssl_context
140141

141-
return ssl._create_unverified_context() # pylint: disable=protected-access
142+
return ssl.create_default_context()
142143

143144

144145
def get_connection(connection: ElasticsearchConnection) -> Elasticsearch:
@@ -154,9 +155,11 @@ def get_connection(connection: ElasticsearchConnection) -> Elasticsearch:
154155
):
155156
basic_auth = (
156157
connection.authType.username,
157-
connection.authType.password.get_secret_value()
158-
if connection.authType.password
159-
else None,
158+
(
159+
connection.authType.password.get_secret_value()
160+
if connection.authType.password
161+
else None
162+
),
160163
)
161164

162165
if isinstance(connection.authType, ApiKeyAuthentication):

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"""
1313
Secrets manager implementation using AWS Secrets Manager
1414
"""
15+
1516
import traceback
1617
from typing import Optional
1718

@@ -53,7 +54,7 @@ def get_string_value(self, secret_id: str) -> Optional[str]:
5354
try:
5455
kwargs = {"SecretId": secret_id}
5556
response = self.client.get_secret_value(**kwargs)
56-
logger.debug("Got value for secret %s.", secret_id)
57+
logger.debug("Successfully retrieved value from secrets manager.")
5758
except ClientError as err:
5859
logger.debug(traceback.format_exc())
5960
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)