AWS Secrets

Prerequisites

  • You will need AWS command line installed.

  • You have jq installed.

    • brew install jq

  • You will also need access to the AWS account. Ask someone from DevOps to send you an invitation.

Getting started

Using AWS SSO

Using SSO is the most straight forward solution. You won't need to go by yourself on your AWS account and it will open the needed url for you.

  • Run the sso command for the first time

aws configure sso

# Press enter without specifing any value for the first question
SSO session name (Recommended):
WARNING: Configuring using legacy format (e.g. without an SSO session).
Consider re-running "configure sso" command and providing a session name.
SSO start URL [None]: https://island-is.awsapps.com/start
SSO Region [None]: eu-west-1

Then choose the environment of your choice. Likely to be island-is-development01. You will be prompted for the following:

This step will add the new profile to your ~/.aws/config file. If you choose islandis-dev as profile's name, you will see [profile islandis-dev] in there.

  • Ready to use

You can now pass your profile to the get-secrets script.

Refresh your profile: The SSO credentials only lasts 8 hours, after which AWS commands start failing. You can run the following command to renew your SSO credentials.

It will open the browser, go to your AWS account to log in and will refresh your credentials and you are ready to use the AWS commands again.

Pre-configured AWS profiles: Feel free to copy and paste these to your ~/.aws/config file:

AWS Vault: You can use AWS Vault to store and access AWS credentials in your operating system's secure keystore. When requesting credentials from an expired SSO session, it will automatically open a browser window for you to log in again.

Just follow its installation instructions and configure your ~/.aws/credentials file like this:

Using AWS session

This method is more manual where you will need to export environments variables or change a file by yourself.

You will need to go to your AWS account and get the required credentials for the account you need.

  • Option 1: Set environment variables

You can copy/paste these environment variables to your terminal:

  • Option 2: Edit ~/.aws/credentials

Copy/paste the values in the ~/.aws/credentials file.

  • Ready to use

In this case you won't need to pass a profile name as opposed to the SSO method.

Refresh your profile: The session token only lasts 1 hour, after which AWS commands start failing. You will need to log in to your AWS account and get new credentials, with one of the above methods.

Usage to fetch secrets

You should now be able to fetch secrets for the project you need.

With SSO

Without SSO

Example:

You can verify it by opening the .env.secret file at the root, or inside your code using for example:

You can also add the --reset argument to the command, that will reset the .env.secret file.

Troubleshoot

If you get the following error message, you will need to refresh your credentials as explained above.

Usage to create secrets

You can run the following command and will be prompted for input.

With SSO

Without SSO

You will be asked for a secret name that will be added to the /k8s/ secrets namespace, a secret value and the secret type (SecureString or String).

Example

It's recommended to use SecureString in most cases. However, if you need to add an email address, or an email sender's name to the secrets, you can just use a String.

Note that this command only creates the secret in one AWS account at a time (eg island-is-development01). To create a secret in all environments, you need to run it with each corresponding AWS account configured, by going through the steps in Using AWS session multiple times.

To make this easier we recommend configuring SSO for each AWS account using a different AWS profile (islandis-dev, islandis-staging, islandis-prod). Then you can create a secret in all environments like this:

Finalizing creating secrets

In order to use the secrets in your app you need to add it to its infra configuration.

  1. Add the new secret to your-app/infra/your-app.ts

  2. Generate helm charts for your app with

  1. Follow the documentation on Config Module

Making dev secrets available locally

Environment variables that should not be tracked but needed locally should be added to the .env.secret file. (NOTE: Each variable must be prefixed with export for direnv to pick them up.)

Additionally, you can fetch secrets configured in a project's infra DSL from the island-is-development01 AWS Parameter Store. Just run yarn get-secrets <project> and they'll be loaded into your .env.secret file.

Environment variables with static websites

More about it on the root README.

Running proxy against development service

More about it on the root README

Last updated

Was this helpful?