Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added usage of aws session token to use temporary credentials. #250

Merged
merged 5 commits into from
Jun 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,12 @@ Full List of Settings
*Required.* Alternative API keys for Amazon SES. This is useful in situations
where you would like to use separate access keys for different AWS services.

``AWS_SES_SESSION_TOKEN``, ``AWS_SES_SECRET_ACCESS_KEY``
Optional. Use `AWS_SES_SESSION_TOKEN` to provide session token
when temporary credentials are used. Details:
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html

``AWS_SES_REGION_NAME``, ``AWS_SES_REGION_ENDPOINT``
Optionally specify what region your SES service is using. Note that this is
required if your SES service is not using us-east-1, as omitting these settings
Expand Down
4 changes: 3 additions & 1 deletion django_ses/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class SESBackend(BaseEmailBackend):
"""

def __init__(self, fail_silently=False, aws_access_key=None,
aws_secret_key=None, aws_region_name=None,
aws_secret_key=None, aws_session_token=None, aws_region_name=None,
aws_region_endpoint=None, aws_auto_throttle=None, aws_config=None,
dkim_domain=None, dkim_key=None, dkim_selector=None, dkim_headers=None,
ses_source_arn=None, ses_from_arn=None, ses_return_path_arn=None,
Expand All @@ -67,6 +67,7 @@ def __init__(self, fail_silently=False, aws_access_key=None,
super(SESBackend, self).__init__(fail_silently=fail_silently, **kwargs)
self._access_key_id = aws_access_key or settings.ACCESS_KEY
self._access_key = aws_secret_key or settings.SECRET_KEY
self._session_token = aws_session_token or settings.SESSION_TOKEN
self._region_name = aws_region_name if aws_region_name else settings.AWS_SES_REGION_NAME
self._endpoint_url = aws_region_endpoint if aws_region_endpoint else settings.AWS_SES_REGION_ENDPOINT_URL
self._throttle = cast_nonzero_to_float(aws_auto_throttle or settings.AWS_SES_AUTO_THROTTLE)
Expand Down Expand Up @@ -95,6 +96,7 @@ def open(self):
'ses',
aws_access_key_id=self._access_key_id,
aws_secret_access_key=self._access_key,
aws_session_token=self._session_token,
pcraciunoiu marked this conversation as resolved.
Show resolved Hide resolved
region_name=self._region_name,
endpoint_url=self._endpoint_url,
config=self._config
Expand Down
1 change: 1 addition & 0 deletions django_ses/management/commands/get_ses_statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def handle(self, *args, **options):
'ses',
aws_access_key_id=settings.ACCESS_KEY,
aws_secret_access_key=settings.SECRET_KEY,
aws_session_token=settings.SESSION_TOKEN,
region_name=settings.AWS_SES_REGION_NAME,
endpoint_url=settings.AWS_SES_REGION_ENDPOINT_URL,
config=settings.AWS_SES_CONFIG,
Expand Down
2 changes: 2 additions & 0 deletions django_ses/management/commands/ses_email_address.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,13 @@ def handle(self, *args, **options):

access_key_id = settings.ACCESS_KEY
access_key = settings.SECRET_KEY
session_token = settings.SESSION_TOKEN

connection = boto3.client(
'ses',
aws_access_key_id=access_key_id,
aws_secret_access_key=access_key,
aws_session_token=session_token,
region_name=settings.AWS_SES_REGION_NAME,
endpoint_url=settings.AWS_SES_REGION_ENDPOINT_URL,
config=settings.AWS_SES_CONFIG,
Expand Down
3 changes: 3 additions & 0 deletions django_ses/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
SECRET_KEY = getattr(settings, 'AWS_SES_SECRET_ACCESS_KEY',
getattr(settings, 'AWS_SECRET_ACCESS_KEY', None))

SESSION_TOKEN = getattr(settings, 'AWS_SES_SESSION_TOKEN',
getattr(settings, 'AWS_SESSION_TOKEN', None))

AWS_SES_REGION_NAME = getattr(settings, 'AWS_SES_REGION_NAME',
getattr(settings, 'AWS_DEFAULT_REGION', 'us-east-1'))
AWS_SES_REGION_ENDPOINT = getattr(settings, 'AWS_SES_REGION_ENDPOINT',
Expand Down
2 changes: 2 additions & 0 deletions django_ses/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ def dashboard(request):
'ses',
aws_access_key_id=settings.ACCESS_KEY,
aws_secret_access_key=settings.SECRET_KEY,
aws_session_token=settings.SESSION_TOKEN,
region_name=settings.AWS_SES_REGION_NAME,
endpoint_url=settings.AWS_SES_REGION_ENDPOINT_URL,
config=settings.AWS_SES_CONFIG,
Expand Down Expand Up @@ -157,6 +158,7 @@ def get_context_data(self, **kwargs):
'ses',
aws_access_key_id=settings.ACCESS_KEY,
aws_secret_access_key=settings.SECRET_KEY,
aws_session_token=settings.SESSION_TOKEN,
region_name=settings.AWS_SES_REGION_NAME,
endpoint_url=settings.AWS_SES_REGION_ENDPOINT_URL,
config=settings.AWS_SES_CONFIG,
Expand Down
12 changes: 12 additions & 0 deletions tests/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ def test_ses_access_key_given(self):
self.assertEqual(django_ses.settings.ACCESS_KEY, settings.AWS_SES_ACCESS_KEY_ID)
self.assertEqual(django_ses.settings.SECRET_KEY, settings.AWS_SES_SECRET_ACCESS_KEY)

def test_aws_session_token_given(self):
settings.AWS_SESSION_TOKEN = "FwoGZXIvYXdzED8aDAILqEtZvcDCx+KsFCK1AUwcLbm4d+mAlRWYN+r1adKoIfw"
unload_django_ses()
import django_ses
self.assertEqual(django_ses.settings.SESSION_TOKEN, settings.AWS_SESSION_TOKEN)

def test_ses_session_token_given(self):
settings.AWS_SES_SESSION_TOKEN = "jQYyLYI7nmsYjpQa2aynxovr7rwKrj71PQstMbK2oKwaT1FzasM0hjs+C5uLh"
unload_django_ses()
import django_ses
self.assertEqual(django_ses.settings.SESSION_TOKEN, settings.AWS_SES_SESSION_TOKEN)

def test_ses_configuration_set_given(self):
settings.AWS_SES_CONFIGURATION_SET = "test-set"
unload_django_ses()
Expand Down