Skip to content

Commit 7ef7aa2

Browse files
polamaystermattsb42-aws
authored andcommitted
[issue-190] Regional clients modify default botocore session (#193)
* [issue-190] Creation of regional clients modifies default botocore session's region
1 parent f00fdd2 commit 7ef7aa2

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

src/aws_encryption_sdk/key_providers/kms.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ def add_regional_client(self, region_name):
161161
:param str region_name: AWS Region ID (ex: us-east-1)
162162
"""
163163
if region_name not in self._regional_clients:
164-
session = boto3.session.Session(region_name=region_name, botocore_session=self.config.botocore_session)
165-
client = session.client("kms", config=self._user_agent_adding_config)
164+
session = boto3.session.Session(botocore_session=self.config.botocore_session)
165+
client = session.client("kms", region_name=region_name, config=self._user_agent_adding_config)
166166
self._register_client(client, region_name)
167167
self._regional_clients[region_name] = client
168168

test/integration/integration_test_utils.py

+19
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@
1313
"""Utility functions to handle configuration and credentials setup for integration tests."""
1414
import os
1515

16+
import botocore.session
17+
1618
from aws_encryption_sdk.key_providers.kms import KMSMasterKeyProvider
1719

1820
AWS_KMS_KEY_ID = "AWS_ENCRYPTION_SDK_PYTHON_INTEGRATION_TEST_AWS_KMS_KEY_ID"
1921
_KMS_MKP = None
22+
_KMS_MKP_BOTO = None
2023

2124

2225
def get_cmk_arn():
@@ -47,3 +50,19 @@ def setup_kms_master_key_provider(cache=True):
4750
_KMS_MKP = kms_master_key_provider
4851

4952
return kms_master_key_provider
53+
54+
55+
def setup_kms_master_key_provider_with_botocore_session(cache=True):
56+
"""Reads the test_values config file and builds the requested KMS Master Key Provider with botocore_session."""
57+
global _KMS_MKP_BOTO # pylint: disable=global-statement
58+
if cache and _KMS_MKP_BOTO is not None:
59+
return _KMS_MKP_BOTO
60+
61+
cmk_arn = get_cmk_arn()
62+
kms_master_key_provider = KMSMasterKeyProvider(botocore_session=botocore.session.Session())
63+
kms_master_key_provider.add_master_key(cmk_arn)
64+
65+
if cache:
66+
_KMS_MKP_BOTO = kms_master_key_provider
67+
68+
return kms_master_key_provider

test/integration/test_i_aws_encrytion_sdk_client.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
from aws_encryption_sdk.identifiers import USER_AGENT_SUFFIX, Algorithm
2222
from aws_encryption_sdk.key_providers.kms import KMSMasterKey, KMSMasterKeyProvider
2323

24-
from .integration_test_utils import get_cmk_arn, setup_kms_master_key_provider
24+
from .integration_test_utils import (
25+
get_cmk_arn,
26+
setup_kms_master_key_provider,
27+
setup_kms_master_key_provider_with_botocore_session,
28+
)
2529

2630
pytestmark = [pytest.mark.integ]
2731

@@ -68,6 +72,15 @@ def test_remove_bad_client():
6872
assert not test._regional_clients
6973

7074

75+
def test_regional_client_does_not_modify_botocore_session(caplog):
76+
mkp = setup_kms_master_key_provider_with_botocore_session()
77+
fake_region = "us-fakey-12"
78+
79+
assert mkp.config.botocore_session.get_config_variable("region") != fake_region
80+
mkp.add_regional_client(fake_region)
81+
assert mkp.config.botocore_session.get_config_variable("region") != fake_region
82+
83+
7184
class TestKMSThickClientIntegration(object):
7285
@pytest.fixture(autouse=True)
7386
def apply_fixtures(self):

test/unit/test_providers_kms_master_key_provider.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@ def test_add_regional_client_new(self):
108108
test = KMSMasterKeyProvider()
109109
test._regional_clients = {}
110110
test.add_regional_client("ex_region_name")
111-
self.mock_boto3_session.assert_called_with(region_name="ex_region_name", botocore_session=ANY)
112-
self.mock_boto3_session_instance.client.assert_called_with("kms", config=test._user_agent_adding_config)
111+
self.mock_boto3_session.assert_called_with(botocore_session=ANY)
112+
self.mock_boto3_session_instance.client.assert_called_with(
113+
"kms",
114+
region_name="ex_region_name",
115+
config=test._user_agent_adding_config,
116+
)
113117
assert test._regional_clients["ex_region_name"] is self.mock_boto3_client_instance
114118

115119
def test_add_regional_client_exists(self):

0 commit comments

Comments
 (0)