Skip to content

Commit 35e5b54

Browse files
authored
Merge pull request #36 from mattsb42-aws/kms-region-fix
reverse processing order of KMS CMP client retrieval to properly select region
2 parents 0bab40d + 5c6602b commit 35e5b54

File tree

2 files changed

+34
-13
lines changed

2 files changed

+34
-13
lines changed

src/dynamodb_encryption_sdk/material_providers/aws_kms.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -197,18 +197,17 @@ def _client(self, key_id):
197197
:returns: Boto3 KMS client for requested key id
198198
:rtype: botocore.client.KMS
199199
"""
200-
region = self._botocore_session.get_config_variable('region')
201-
if region is None:
202-
try:
203-
region_name = key_id.split(':', 4)[3]
204-
region = region_name
205-
except IndexError:
206-
if region is None:
207-
raise UnknownRegionError(
208-
'No default region found and no region determinable from key id: {}'.format(key_id)
209-
)
210-
self._add_regional_client(region)
211-
return self._regional_clients[region]
200+
try:
201+
key_region = key_id.split(':', 4)[3]
202+
region = key_region
203+
except IndexError:
204+
session_region = self._botocore_session.get_config_variable('region')
205+
if session_region is None:
206+
raise UnknownRegionError(
207+
'No region determinable from key id: {} and no default region found in session'.format(key_id)
208+
)
209+
region = session_region
210+
return self._add_regional_client(region)
212211

213212
def _select_key_id(self, encryption_context):
214213
# type: (EncryptionContext) -> Text

test/unit/material_providers/test_aws_kms.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,28 @@ def test_add_regional_client_unknown_region(default_kms_cmp, patch_boto3_session
274274
assert test is patch_boto3_session.return_value.client.return_value
275275

276276

277+
def test_client_use_region_from_session(default_kms_cmp, patch_add_regional_client):
278+
mock_session = MagicMock()
279+
mock_session.get_config_variable.return_value = sentinel.region
280+
default_kms_cmp._botocore_session = mock_session
281+
282+
test = default_kms_cmp._client('')
283+
284+
patch_add_regional_client.assert_called_once_with(sentinel.region)
285+
assert test is patch_add_regional_client.return_value
286+
287+
288+
def test_client_use_region_from_key_id(default_kms_cmp, patch_add_regional_client):
289+
mock_session = MagicMock()
290+
mock_session.get_config_variable.return_value = sentinel.region
291+
default_kms_cmp._botocore_session = mock_session
292+
293+
test = default_kms_cmp._client(_KEY_ID)
294+
295+
patch_add_regional_client.assert_called_once_with(_REGION)
296+
assert test is patch_add_regional_client.return_value
297+
298+
277299
def test_client_no_region_found(default_kms_cmp):
278300
mock_session = MagicMock()
279301
mock_session.get_config_variable.return_value = None
@@ -282,7 +304,7 @@ def test_client_no_region_found(default_kms_cmp):
282304
with pytest.raises(UnknownRegionError) as excinfo:
283305
default_kms_cmp._client('')
284306

285-
excinfo.match(r'No default region found and no region determinable from key id:*')
307+
excinfo.match(r'No region determinable from key id:*')
286308

287309

288310
def test_select_id(default_kms_cmp):

0 commit comments

Comments
 (0)