Skip to content

Commit 3503b17

Browse files
authored
Merge pull request #37 from mattsb42-aws/kms-user-agent
add custom extra user agent data to KMS materials provider client
2 parents 8d02a0c + 9e6d728 commit 3503b17

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

src/dynamodb_encryption_sdk/identifiers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
__version__ = '0.0.0'
1818

1919
LOGGER_NAME = 'dynamodb_encryption_sdk'
20+
USER_AGENT_SUFFIX = 'DynamodbEncryptionSdkPython/{}'.format(__version__)
2021

2122

2223
class CryptoAction(Enum):

src/dynamodb_encryption_sdk/material_providers/aws_kms.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919

2020
import attr
2121
import boto3
22-
import botocore.client
23-
import botocore.session
22+
import botocore
2423
from cryptography.hazmat.backends import default_backend
2524
from cryptography.hazmat.primitives import hashes
2625
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
@@ -34,7 +33,7 @@
3433

3534
from dynamodb_encryption_sdk.delegated_keys.jce import JceNameLocalDelegatedKey
3635
from dynamodb_encryption_sdk.exceptions import UnknownRegionError, UnwrappingError, WrappingError
37-
from dynamodb_encryption_sdk.identifiers import EncryptionKeyType, KeyEncodingType, LOGGER_NAME
36+
from dynamodb_encryption_sdk.identifiers import EncryptionKeyType, KeyEncodingType, LOGGER_NAME, USER_AGENT_SUFFIX
3837
from dynamodb_encryption_sdk.internal.identifiers import MaterialDescriptionKeys, TEXT_ENCODING
3938
from dynamodb_encryption_sdk.internal.str_ops import to_bytes, to_str
4039
from dynamodb_encryption_sdk.internal.validators import dictionary_validator, iterable_validator
@@ -163,6 +162,9 @@ class AwsKmsCryptographicMaterialsProvider(CryptographicMaterialsProvider):
163162
def __attrs_post_init__(self):
164163
# type: () -> None
165164
"""Load the content and signing key info."""
165+
self._user_agent_adding_config = botocore.config.Config( # pylint: disable=attribute-defined-outside-init
166+
user_agent_extra=USER_AGENT_SUFFIX
167+
)
166168
self._content_key_info = KeyInfo.from_material_description( # pylint: disable=attribute-defined-outside-init
167169
material_description=self._material_description,
168170
description_key=MaterialDescriptionKeys.CONTENT_ENCRYPTION_ALGORITHM.value,
@@ -187,7 +189,7 @@ def _add_regional_client(self, region_name):
187189
self._regional_clients[region_name] = boto3.session.Session(
188190
region_name=region_name,
189191
botocore_session=self._botocore_session
190-
).client('kms')
192+
).client('kms', config=self._user_agent_adding_config)
191193
return self._regional_clients[region_name]
192194

193195
def _client(self, key_id):

test/integration/material_providers/test_aws_kms.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
# ANY KIND, either express or implied. See the License for the specific
1212
# language governing permissions and limitations under the License.
1313
"""Integration tests for ``dynamodb_encryption_sdk.material_providers.aws_kms``."""
14+
import logging
15+
1416
import hypothesis
1517
import pytest
1618

1719
from dynamodb_encryption_sdk.encrypted import CryptoConfig
20+
from dynamodb_encryption_sdk.identifiers import USER_AGENT_SUFFIX
1821
from dynamodb_encryption_sdk.structures import EncryptionContext
1922
from ..integration_test_utils import aws_kms_cmp # noqa pylint: disable=unused-import
2023
from ..integration_test_utils import functional_test_utils, hypothesis_strategies
@@ -27,6 +30,14 @@ def pytest_generate_tests(metafunc):
2730
functional_test_utils.set_parametrized_item(metafunc)
2831

2932

33+
def test_verify_user_agent(aws_kms_cmp, caplog):
34+
caplog.set_level(level=logging.DEBUG)
35+
36+
aws_kms_cmp.encryption_materials(EncryptionContext())
37+
38+
assert USER_AGENT_SUFFIX in caplog.text
39+
40+
3041
def test_aws_kms_item_cycle(aws_kms_cmp, parametrized_actions, parametrized_item):
3142
crypto_config = CryptoConfig(
3243
materials_provider=aws_kms_cmp,

test/unit/material_providers/test_aws_kms.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,10 @@ def test_add_regional_client_unknown_region(default_kms_cmp, patch_boto3_session
269269
region_name=sentinel.region,
270270
botocore_session=default_kms_cmp._botocore_session
271271
)
272-
patch_boto3_session.return_value.client.assert_called_once_with('kms')
272+
patch_boto3_session.return_value.client.assert_called_once_with(
273+
'kms',
274+
config=default_kms_cmp._user_agent_adding_config
275+
)
273276
assert default_kms_cmp._regional_clients[sentinel.region] is patch_boto3_session.return_value.client.return_value
274277
assert test is patch_boto3_session.return_value.client.return_value
275278

0 commit comments

Comments
 (0)