Skip to content

Commit d06912f

Browse files
authored
Merge pull request #339 from aws-solutions/release/v2.4.4
release v2.4.4
2 parents 49fac78 + 8b948f0 commit d06912f

File tree

24 files changed

+162
-90
lines changed

24 files changed

+162
-90
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ deployment/global-s3-assets/
2828
deployment/regional-s3-assets/
2929
deployment/viperlight
3030
deployment/staging/
31+
deployment/open-source
3132

3233
### macOS ###
3334
# General

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [2.4.4] - 2025-09-24
9+
10+
### Security
11+
12+
- Updated axios from `1.7.7` to `1.12.1` to mitigate [CVE-2025-58754](https://avd.aquasec.com/nvd/cve-2025-58754), a DoS vulnerability.
13+
- Updated Python Lambda base image from `public.ecr.aws/lambda/python:3.12.2025.09.02.19` to `public.ecr.aws/lambda/python:3.12.2025.09.22.12` to address [CVE-2025-24528](https://avd.aquasec.com/nvd/cve-2025-24528), [CVE-2025-3576](https://avd.aquasec.com/nvd/cve-2025-3576), [CVE-2025-7425](https://avd.aquasec.com/nvd/cve-2025-7425), and [CVE-2025-8058](https://avd.aquasec.com/nvd/cve-2025-8058).
14+
- Removed deprecated NPM package "fs" has been identified as potentially vulnerable to package takeover.
15+
16+
### Fixed
17+
18+
- Fixed solution CloudFormation template deployment failures in AWS China partition by implementing partition-aware S3 URL generation [Issue #338](https://github.com/aws-solutions/centralized-logging-with-opensearch/issues/338)
19+
- Fixed timeout issue with Get Agent status API by optimizing retry logic to work within AppSync's 30 second timeout limit
20+
821
## [2.4.3] - 2025-09-03
922

1023
### Security

NOTICE.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1777,6 +1777,18 @@ napi-postinstall under the MIT license.
17771777
@unrs/resolver-binding-linux-x64-musl under the MIT license.
17781778
exit-x under the MIT license.
17791779
pygments under the 0BSD license.
1780+
set-proto under the MIT license.
1781+
side-channel-map under the MIT license.
1782+
safe-push-apply under the MIT license.
1783+
async-function under the MIT license.
1784+
side-channel-list under the MIT license.
1785+
call-bound under the MIT license.
1786+
side-channel-weakmap under the MIT license.
1787+
own-keys under the MIT license.
1788+
@babel/plugin-transform-explicit-resource-management under the MIT license.
1789+
wsl-utils under the MIT license.
1790+
baseline-browser-mapping under the Apache-2.0 license.
1791+
@babel/helper-globals under the Apache-2.0 license.
17801792

17811793
********************
17821794
OPEN SOURCE LICENSES

deployment/cdk-solution-helper/package.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,5 @@
77
"name": "Amazon Web Services",
88
"url": "https://aws.amazon.com/solutions",
99
"organization": true
10-
},
11-
"devDependencies": {
12-
"fs": "0.0.1-security"
13-
},
14-
"dependencies": {
15-
"fs": "0.0.1-security"
1610
}
1711
}

deployment/ecr/clo-s3-list-objects/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM public.ecr.aws/lambda/python:3.12.2025.09.02.19 AS builder
1+
FROM public.ecr.aws/lambda/python:3.12.2025.09.22.12 AS builder
22

33
WORKDIR /build
44

@@ -14,7 +14,7 @@ RUN python -m venv .venv && \
1414
cd common-lib && \
1515
poetry build
1616

17-
FROM public.ecr.aws/lambda/python:3.12.2025.09.02.19
17+
FROM public.ecr.aws/lambda/python:3.12.2025.09.22.12
1818

1919
WORKDIR /ws
2020

source/constructs/lambda/api/log_agent_status/lambda_function.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -190,22 +190,22 @@ def list_command_invocations(ssm_client, command_id, details=True, maxResults=50
190190

191191

192192
def handle_command_invocations(
193-
ssm_client, command_id, max_retries=10, retry_delay=0.25
193+
ssm_client, command_id, max_retries=13, retry_delay=2.0
194194
):
195195
"""
196196
Handles the list of command invocations for the specified AWS Systems Manager command.
197-
If any of the invocations are in progress, it will retry the command until all invocations are completed or the maximum number of retries is reached.
198-
197+
Uses fixed retry delay to stay within AppSync's 30-second timeout.
198+
199199
Args:
200200
ssm_client (boto3.client): An AWS Systems Manager client.
201201
command_id (str): The ID of the command to handle.
202-
max_retries (int, optional): The maximum number of times to retry the command. Defaults to 5.
203-
retry_delay (float, optional): The number of seconds to wait between retries. Defaults to 0.5.
202+
max_retries (int, optional): Maximum retries (default: 13)
203+
retry_delay (float, optional): Delay between retries (default: 2.0 seconds)
204204
205205
Returns:
206206
list: The list of command invocations.
207207
"""
208-
for _ in range(max_retries):
208+
for attempt in range(max_retries):
209209
command_invocations = list(list_command_invocations(ssm_client, command_id))
210210
in_progress_count = len(
211211
list(
@@ -216,13 +216,14 @@ def handle_command_invocations(
216216
return command_invocations
217217

218218
logger.info(
219-
f"Retrying command {command_id} ({in_progress_count}/{len(command_invocations)} invocations in progress)"
219+
f"Retrying command {command_id} ({in_progress_count}/{len(command_invocations)} invocations in progress) - attempt {attempt + 1}/{max_retries}"
220220
)
221-
time.sleep(retry_delay)
222-
retry_delay *= 2 # Exponential backoff
221+
222+
if attempt < max_retries - 1:
223+
time.sleep(retry_delay)
223224

224225
raise TimeoutError(
225-
f"Command {command_id} did not complete within {sum(2 ** i * retry_delay for i in range(max_retries))} seconds."
226+
f"Command {command_id} did not complete within {max_retries * retry_delay} seconds."
226227
)
227228

228229

source/constructs/lambda/custom-resource/lambda_function.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
solution_version = os.environ.get("SOLUTION_VERSION")
1616
solution_name = os.environ.get("SOLUTION_NAME")
1717
template_bucket = os.environ.get("TEMPLATE_OUTPUT_BUCKET")
18+
template_base_url = os.environ.get("TEMPLATE_BASE_URL")
1819
bucket_name = os.environ.get("WEB_BUCKET_NAME")
1920
api_endpoint = os.environ.get("API_ENDPOINT")
2021
user_pool_id = os.environ.get("USER_POOL_ID")
@@ -121,6 +122,7 @@ def get_config_str():
121122
"solution_name": solution_name,
122123
"sns_email_topic_arn": SNS_EMAIL_TOPIC_ARN,
123124
"template_bucket": template_bucket,
125+
"template_base_url": template_base_url,
124126
}
125127

126128
return json.dumps(export_json)

source/constructs/lambda/main/cfnHelper/lambda_function.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
default_region = os.environ.get("AWS_REGION")
2222

23-
template_output_bucket = os.environ.get("TEMPLATE_OUTPUT_BUCKET", "aws-gcr-solutions")
23+
template_base_url = os.environ.get("TEMPLATE_BASE_URL")
2424
solution_name = os.environ.get("SOLUTION_NAME", "clo")
25-
template_prefix = f"https://{template_output_bucket}.s3.amazonaws.com/{solution_name}/{solution_version}"
25+
template_prefix = f"{template_base_url}/{solution_name}/{solution_version}"
2626

2727
sts = boto3.client("sts", config=default_config)
2828
account_id = sts.get_caller_identity()["Account"]

source/constructs/lambda/main/cfnHelper/test/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ def default_environment_variables():
1717
os.environ["SOLUTION_VERSION"] = "v1.0.0"
1818
os.environ["SOLUTION_ID"] = "SOXXXX"
1919

20-
os.environ["TEMPLATE_OUTPUT_BUCKET"] = "solution-bucket"
20+
os.environ["TEMPLATE_BASE_URL"] = "https://solution-bucket.s3.amazonaws.com"
2121
os.environ["SUB_ACCOUNT_LINK_TABLE_NAME"] = "mocked-sub-account-link-table-name"
2222
os.environ["SUB_ACCOUNT_LINK_TABLE"] = "mocked-sub-account-link-table-name"

source/constructs/lambda/main/cfnHelper/test/test_lambda_function.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,18 @@ def s3_client():
4242
key = f"{solution_name}/{version}/AlarmForOpenSearch.template"
4343

4444
s3 = boto3.resource("s3", region_name=region)
45-
# Create the bucket
46-
template_bucket = os.environ.get("TEMPLATE_OUTPUT_BUCKET")
47-
s3.create_bucket(Bucket=template_bucket)
45+
# Create the bucket - extract bucket name from TEMPLATE_BASE_URL
46+
template_base_url = os.environ.get("TEMPLATE_BASE_URL")
47+
if template_base_url:
48+
bucket_name = template_base_url.replace("https://", "").split(".s3.")[0]
49+
else:
50+
bucket_name = "solution-bucket"
51+
52+
s3.create_bucket(Bucket=bucket_name)
4853

4954
# upload template file
5055
data = open("./test/template/test.template", "rb")
51-
s3.Bucket(template_bucket).put_object(Key=key, Body=data)
56+
s3.Bucket(bucket_name).put_object(Key=key, Body=data)
5257

5358
yield
5459

0 commit comments

Comments
 (0)