Skip to content

Commit f9752df

Browse files
mangyauheitorlessa
andauthored
fix(parameters): get_secret correctly return SecretBinary value (#1717)
Co-authored-by: heitorlessa <lessa@amazon.co.uk>
1 parent a592c55 commit f9752df

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

aws_lambda_powertools/utilities/parameters/secrets.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,12 @@ def _get(self, name: str, **sdk_options) -> str:
9696
# Explicit arguments will take precedence over keyword arguments
9797
sdk_options["SecretId"] = name
9898

99-
return self.client.get_secret_value(**sdk_options)["SecretString"]
99+
secret_value = self.client.get_secret_value(**sdk_options)
100+
101+
if "SecretString" in secret_value:
102+
return secret_value["SecretString"]
103+
104+
return secret_value["SecretBinary"]
100105

101106
def _get_multiple(self, path: str, **sdk_options) -> Dict[str, str]:
102107
"""

tests/functional/test_utilities_parameters.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ def config():
4646
return Config(region_name="us-east-1")
4747

4848

49+
@pytest.fixture
50+
def mock_binary_value() -> str:
51+
return "ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnpkV0lpT2lJeE1qTTBOVFkzT0Rrd0lpd2libUZ0WlNJNklrcHZhRzRnUkc5bElpd2lhV0YwSWpveE5URTJNak01TURJeWZRLlNmbEt4d1JKU01lS0tGMlFUNGZ3cE1lSmYzNlBPazZ5SlZfYWRRc3N3NWMK" # noqa: E501
52+
53+
4954
def build_get_parameters_stub(params: Dict[str, Any], invalid_parameters: List[str] | None = None) -> Dict[str, List]:
5055
invalid_parameters = invalid_parameters or []
5156
version = random.randrange(1, 1000)
@@ -1186,6 +1191,31 @@ def test_secrets_provider_get(mock_name, mock_value, config):
11861191
stubber.deactivate()
11871192

11881193

1194+
def test_secrets_provider_get_binary_secret(mock_name, mock_binary_value, config):
1195+
# GIVEN a new provider
1196+
provider = parameters.SecretsProvider(config=config)
1197+
expected_params = {"SecretId": mock_name}
1198+
expected_response = {
1199+
"ARN": f"arn:aws:secretsmanager:us-east-1:132456789012:secret/{mock_name}",
1200+
"Name": mock_name,
1201+
"VersionId": "edc66e31-3d5f-4276-aaa1-95ed44cfed72",
1202+
"SecretBinary": mock_binary_value,
1203+
"CreatedDate": datetime(2015, 1, 1),
1204+
}
1205+
1206+
stubber = stub.Stubber(provider.client)
1207+
stubber.add_response("get_secret_value", expected_response, expected_params)
1208+
stubber.activate()
1209+
1210+
try:
1211+
value = provider.get(mock_name)
1212+
stubber.assert_no_pending_responses()
1213+
finally:
1214+
stubber.deactivate()
1215+
1216+
assert value == mock_binary_value
1217+
1218+
11891219
def test_secrets_provider_get_with_custom_client(mock_name, mock_value, config):
11901220
"""
11911221
Test SecretsProvider.get() with a non-cached value

0 commit comments

Comments
 (0)