mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 08:44:23 -04:00
Remove direct use of aws creds from deployed environments
This commit is contained in:
4
.github/workflows/deploy-demo.yml
vendored
4
.github/workflows/deploy-demo.yml
vendored
@@ -48,8 +48,6 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }}
|
DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }}
|
||||||
SECRET_KEY: ${{ secrets.SECRET_KEY }}
|
SECRET_KEY: ${{ secrets.SECRET_KEY }}
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
||||||
BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }}
|
BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }}
|
||||||
REDIS_ENABLED: ${{ secrets.REDIS_ENABLED }}
|
REDIS_ENABLED: ${{ secrets.REDIS_ENABLED }}
|
||||||
@@ -63,8 +61,6 @@ jobs:
|
|||||||
--vars-file deploy-config/demo.yml
|
--vars-file deploy-config/demo.yml
|
||||||
--var DANGEROUS_SALT="$DANGEROUS_SALT"
|
--var DANGEROUS_SALT="$DANGEROUS_SALT"
|
||||||
--var SECRET_KEY="$SECRET_KEY"
|
--var SECRET_KEY="$SECRET_KEY"
|
||||||
--var AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID"
|
|
||||||
--var AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY"
|
|
||||||
--var REDIS_ENABLED="$REDIS_ENABLED"
|
--var REDIS_ENABLED="$REDIS_ENABLED"
|
||||||
--var ADMIN_CLIENT_USERNAME="notify-admin"
|
--var ADMIN_CLIENT_USERNAME="notify-admin"
|
||||||
--var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET"
|
--var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET"
|
||||||
|
|||||||
4
.github/workflows/deploy.yml
vendored
4
.github/workflows/deploy.yml
vendored
@@ -53,8 +53,6 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }}
|
DANGEROUS_SALT: ${{ secrets.DANGEROUS_SALT }}
|
||||||
SECRET_KEY: ${{ secrets.SECRET_KEY }}
|
SECRET_KEY: ${{ secrets.SECRET_KEY }}
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
ADMIN_CLIENT_SECRET: ${{ secrets.ADMIN_CLIENT_SECRET }}
|
||||||
BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }}
|
BASIC_AUTH_PASSWORD: ${{ secrets.BASIC_AUTH_PASSWORD }}
|
||||||
REDIS_ENABLED: ${{ secrets.REDIS_ENABLED }}
|
REDIS_ENABLED: ${{ secrets.REDIS_ENABLED }}
|
||||||
@@ -68,8 +66,6 @@ jobs:
|
|||||||
--vars-file deploy-config/staging.yml
|
--vars-file deploy-config/staging.yml
|
||||||
--var DANGEROUS_SALT="$DANGEROUS_SALT"
|
--var DANGEROUS_SALT="$DANGEROUS_SALT"
|
||||||
--var SECRET_KEY="$SECRET_KEY"
|
--var SECRET_KEY="$SECRET_KEY"
|
||||||
--var AWS_ACCESS_KEY_ID="$AWS_ACCESS_KEY_ID"
|
|
||||||
--var AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY"
|
|
||||||
--var REDIS_ENABLED="$REDIS_ENABLED"
|
--var REDIS_ENABLED="$REDIS_ENABLED"
|
||||||
--var ADMIN_CLIENT_USERNAME="notify-admin"
|
--var ADMIN_CLIENT_USERNAME="notify-admin"
|
||||||
--var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET"
|
--var ADMIN_CLIENT_SECRET="$ADMIN_CLIENT_SECRET"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
from os import getenv
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
@@ -8,31 +8,31 @@ from app.cloudfoundry_config import cloud_config
|
|||||||
|
|
||||||
class Config(object):
|
class Config(object):
|
||||||
NOTIFY_APP_NAME = 'admin'
|
NOTIFY_APP_NAME = 'admin'
|
||||||
NOTIFY_ENVIRONMENT = os.environ.get('NOTIFY_ENVIRONMENT', 'development')
|
NOTIFY_ENVIRONMENT = getenv('NOTIFY_ENVIRONMENT', 'development')
|
||||||
API_HOST_NAME = os.environ.get('API_HOST_NAME', 'localhost')
|
API_HOST_NAME = getenv('API_HOST_NAME', 'localhost')
|
||||||
ADMIN_BASE_URL = os.environ.get('ADMIN_BASE_URL', 'http://localhost:6012')
|
ADMIN_BASE_URL = getenv('ADMIN_BASE_URL', 'http://localhost:6012')
|
||||||
HEADER_COLOUR = '#81878b' # mix(govuk-colour("dark-grey"), govuk-colour("mid-grey"))
|
HEADER_COLOUR = '#81878b' # mix(govuk-colour("dark-grey"), govuk-colour("mid-grey"))
|
||||||
LOGO_CDN_DOMAIN = 'static-logos.notifications.service.gov.uk' # TODO use our own CDN
|
LOGO_CDN_DOMAIN = 'static-logos.notifications.service.gov.uk' # TODO use our own CDN
|
||||||
ASSETS_DEBUG = False
|
ASSETS_DEBUG = False
|
||||||
TIMEZONE = os.environ.get('TIMEZONE', 'America/New_York')
|
TIMEZONE = getenv('TIMEZONE', 'America/New_York')
|
||||||
PY_TIMEZONE = pytz.timezone(TIMEZONE)
|
PY_TIMEZONE = pytz.timezone(TIMEZONE)
|
||||||
|
|
||||||
# Credentials
|
# Credentials
|
||||||
ADMIN_CLIENT_SECRET = os.environ.get('ADMIN_CLIENT_SECRET')
|
ADMIN_CLIENT_SECRET = getenv('ADMIN_CLIENT_SECRET')
|
||||||
ADMIN_CLIENT_USER_NAME = os.environ.get('ADMIN_CLIENT_USERNAME')
|
ADMIN_CLIENT_USER_NAME = getenv('ADMIN_CLIENT_USERNAME')
|
||||||
SECRET_KEY = os.environ.get('SECRET_KEY')
|
SECRET_KEY = getenv('SECRET_KEY')
|
||||||
DANGEROUS_SALT = os.environ.get('DANGEROUS_SALT')
|
DANGEROUS_SALT = getenv('DANGEROUS_SALT')
|
||||||
# ZENDESK_API_KEY = os.environ.get('ZENDESK_API_KEY')
|
# ZENDESK_API_KEY = getenv('ZENDESK_API_KEY')
|
||||||
ROUTE_SECRET_KEY_1 = os.environ.get('ROUTE_SECRET_KEY_1', 'dev-route-secret-key-1')
|
ROUTE_SECRET_KEY_1 = getenv('ROUTE_SECRET_KEY_1', 'dev-route-secret-key-1')
|
||||||
ROUTE_SECRET_KEY_2 = os.environ.get('ROUTE_SECRET_KEY_2', 'dev-route-secret-key-2')
|
ROUTE_SECRET_KEY_2 = getenv('ROUTE_SECRET_KEY_2', 'dev-route-secret-key-2')
|
||||||
BASIC_AUTH_USERNAME = os.environ.get('BASIC_AUTH_USERNAME')
|
BASIC_AUTH_USERNAME = getenv('BASIC_AUTH_USERNAME')
|
||||||
BASIC_AUTH_PASSWORD = os.environ.get('BASIC_AUTH_PASSWORD')
|
BASIC_AUTH_PASSWORD = getenv('BASIC_AUTH_PASSWORD')
|
||||||
|
|
||||||
TEMPLATE_PREVIEW_API_HOST = os.environ.get('TEMPLATE_PREVIEW_API_HOST', 'http://localhost:9999')
|
TEMPLATE_PREVIEW_API_HOST = getenv('TEMPLATE_PREVIEW_API_HOST', 'http://localhost:9999')
|
||||||
TEMPLATE_PREVIEW_API_KEY = os.environ.get('TEMPLATE_PREVIEW_API_KEY', 'my-secret-key')
|
TEMPLATE_PREVIEW_API_KEY = getenv('TEMPLATE_PREVIEW_API_KEY', 'my-secret-key')
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
NOTIFY_LOG_LEVEL = os.environ.get('NOTIFY_LOG_LEVEL', 'INFO')
|
NOTIFY_LOG_LEVEL = getenv('NOTIFY_LOG_LEVEL', 'INFO')
|
||||||
|
|
||||||
DEFAULT_SERVICE_LIMIT = 50
|
DEFAULT_SERVICE_LIMIT = 50
|
||||||
|
|
||||||
@@ -54,16 +54,14 @@ class Config(object):
|
|||||||
WTF_CSRF_TIME_LIMIT = None
|
WTF_CSRF_TIME_LIMIT = None
|
||||||
CHECK_PROXY_HEADER = False
|
CHECK_PROXY_HEADER = False
|
||||||
|
|
||||||
AWS_REGION = os.environ.get('AWS_REGION')
|
|
||||||
|
|
||||||
REDIS_URL = cloud_config.redis_url
|
REDIS_URL = cloud_config.redis_url
|
||||||
REDIS_ENABLED = os.environ.get('REDIS_ENABLED', '1') == '1'
|
REDIS_ENABLED = getenv('REDIS_ENABLED', '1') == '1'
|
||||||
|
|
||||||
# TODO: reassign this
|
# TODO: reassign this
|
||||||
NOTIFY_SERVICE_ID = 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553'
|
NOTIFY_SERVICE_ID = 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553'
|
||||||
|
|
||||||
NOTIFY_BILLING_DETAILS = json.loads(
|
NOTIFY_BILLING_DETAILS = json.loads(
|
||||||
os.environ.get('NOTIFY_BILLING_DETAILS') or 'null'
|
getenv('NOTIFY_BILLING_DETAILS') or 'null'
|
||||||
) or {
|
) or {
|
||||||
'account_number': '98765432',
|
'account_number': '98765432',
|
||||||
'sort_code': '01-23-45',
|
'sort_code': '01-23-45',
|
||||||
@@ -79,9 +77,9 @@ class Config(object):
|
|||||||
def _default_s3_credentials(bucket_name):
|
def _default_s3_credentials(bucket_name):
|
||||||
return {
|
return {
|
||||||
'bucket': bucket_name,
|
'bucket': bucket_name,
|
||||||
'access_key_id': os.environ.get('AWS_ACCESS_KEY_ID'),
|
'access_key_id': getenv('AWS_ACCESS_KEY_ID'),
|
||||||
'secret_access_key': os.environ.get('AWS_SECRET_ACCESS_KEY'),
|
'secret_access_key': getenv('AWS_SECRET_ACCESS_KEY'),
|
||||||
'region': os.environ.get('AWS_REGION')
|
'region': getenv('AWS_REGION')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -133,11 +131,11 @@ class Production(Config):
|
|||||||
|
|
||||||
# buckets
|
# buckets
|
||||||
CSV_UPLOAD_BUCKET = cloud_config.s3_credentials(
|
CSV_UPLOAD_BUCKET = cloud_config.s3_credentials(
|
||||||
f"notify-api-csv-upload-bucket-{os.environ['NOTIFY_ENVIRONMENT']}")
|
f"notify-api-csv-upload-bucket-{getenv('NOTIFY_ENVIRONMENT')}")
|
||||||
CONTACT_LIST_BUCKET = cloud_config.s3_credentials(
|
CONTACT_LIST_BUCKET = cloud_config.s3_credentials(
|
||||||
f"notify-api-contact-list-bucket-{os.environ['NOTIFY_ENVIRONMENT']}")
|
f"notify-api-contact-list-bucket-{getenv('NOTIFY_ENVIRONMENT')}")
|
||||||
LOGO_UPLOAD_BUCKET = cloud_config.s3_credentials(
|
LOGO_UPLOAD_BUCKET = cloud_config.s3_credentials(
|
||||||
f"notify-admin-logo-upload-bucket-{os.environ['NOTIFY_ENVIRONMENT']}")
|
f"notify-admin-logo-upload-bucket-{getenv('NOTIFY_ENVIRONMENT')}")
|
||||||
|
|
||||||
|
|
||||||
class Staging(Production):
|
class Staging(Production):
|
||||||
|
|||||||
@@ -1,20 +1,14 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
import botocore
|
import botocore
|
||||||
from boto3 import Session
|
from boto3 import Session
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
default_access_key = os.environ.get('AWS_ACCESS_KEY_ID')
|
|
||||||
default_secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
|
|
||||||
default_region = os.environ.get('AWS_REGION')
|
|
||||||
|
|
||||||
|
|
||||||
def get_s3_object(
|
def get_s3_object(
|
||||||
bucket_name,
|
bucket_name,
|
||||||
filename,
|
filename,
|
||||||
access_key=default_access_key,
|
access_key,
|
||||||
secret_key=default_secret_key,
|
secret_key,
|
||||||
region=default_region,
|
region,
|
||||||
):
|
):
|
||||||
# To inspect contents: obj.get()['Body'].read().decode('utf-8')
|
# To inspect contents: obj.get()['Body'].read().decode('utf-8')
|
||||||
session = Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region)
|
session = Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region)
|
||||||
|
|||||||
@@ -39,10 +39,6 @@ applications:
|
|||||||
BASIC_AUTH_PASSWORD: ((BASIC_AUTH_PASSWORD))
|
BASIC_AUTH_PASSWORD: ((BASIC_AUTH_PASSWORD))
|
||||||
NEW_RELIC_LICENSE_KEY: ((NEW_RELIC_LICENSE_KEY))
|
NEW_RELIC_LICENSE_KEY: ((NEW_RELIC_LICENSE_KEY))
|
||||||
|
|
||||||
AWS_REGION: us-west-2
|
|
||||||
AWS_ACCESS_KEY_ID: ((AWS_ACCESS_KEY_ID))
|
|
||||||
AWS_SECRET_ACCESS_KEY: ((AWS_SECRET_ACCESS_KEY))
|
|
||||||
|
|
||||||
NOTIFY_BILLING_DETAILS: '[]'
|
NOTIFY_BILLING_DETAILS: '[]'
|
||||||
|
|
||||||
REQUESTS_CA_BUNDLE: "/etc/ssl/certs/ca-certificates.crt"
|
REQUESTS_CA_BUNDLE: "/etc/ssl/certs/ca-certificates.crt"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import uuid
|
import uuid
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
from os import getenv
|
||||||
from unittest.mock import ANY
|
from unittest.mock import ANY
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -7,7 +8,6 @@ from flask import url_for
|
|||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
from app.formatters import normalize_spaces
|
from app.formatters import normalize_spaces
|
||||||
from app.s3_client import default_access_key, default_secret_key
|
|
||||||
from tests import contact_list_json
|
from tests import contact_list_json
|
||||||
from tests.conftest import SERVICE_ONE_ID
|
from tests.conftest import SERVICE_ONE_ID
|
||||||
|
|
||||||
@@ -210,8 +210,8 @@ def test_upload_csv_file_shows_error_banner(
|
|||||||
region='us-west-2',
|
region='us-west-2',
|
||||||
bucket_name='test-contact-list',
|
bucket_name='test-contact-list',
|
||||||
file_location=f"service-{SERVICE_ONE_ID}-notify/{fake_uuid}.csv",
|
file_location=f"service-{SERVICE_ONE_ID}-notify/{fake_uuid}.csv",
|
||||||
access_key=default_access_key,
|
access_key=getenv('AWS_ACCESS_KEY_ID'),
|
||||||
secret_key=default_secret_key,
|
secret_key=getenv('AWS_SECRET_ACCESS_KEY'),
|
||||||
)
|
)
|
||||||
mock_set_metadata.assert_called_once_with(
|
mock_set_metadata.assert_called_once_with(
|
||||||
ANY,
|
ANY,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
from os import getenv
|
||||||
from unittest.mock import call
|
from unittest.mock import call
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from app.s3_client import default_access_key, default_region, default_secret_key
|
|
||||||
from app.s3_client.s3_logo_client import (
|
from app.s3_client.s3_logo_client import (
|
||||||
EMAIL_LOGO_LOCATION_STRUCTURE,
|
EMAIL_LOGO_LOCATION_STRUCTURE,
|
||||||
TEMP_TAG,
|
TEMP_TAG,
|
||||||
@@ -14,6 +14,9 @@ from app.s3_client.s3_logo_client import (
|
|||||||
upload_email_logo,
|
upload_email_logo,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
default_access_key = getenv('AWS_ACCESS_KEY_ID')
|
||||||
|
default_secret_key = getenv('AWS_SECRET_ACCESS_KEY')
|
||||||
|
default_region = getenv('AWS_REGION')
|
||||||
bucket = 'test_bucket'
|
bucket = 'test_bucket'
|
||||||
bucket_credentials = {
|
bucket_credentials = {
|
||||||
'bucket': bucket,
|
'bucket': bucket,
|
||||||
|
|||||||
Reference in New Issue
Block a user