Managing environment variables and sensitive data like API keys, database credentials, and other secrets is crucial for the security and proper functioning of your containerized applications on Amazon Elastic Container Service (ECS). This section demonstrates how to configure your ECS task definitions to securely inject these values into your containers.
Environment variables provide a way to pass configuration data to
your containers without hardcoding them into your container images.
In an ECS task definition, you can specify environment variables
within the containerDefinitions array.
For sensitive information, it's best practice to use a secrets management service. AWS Systems Manager (SSM) Parameter Store is a popular choice for securely storing configuration data and secrets. You can reference parameters stored in SSM Parameter Store directly within your ECS task definitions.
The following JSON snippet illustrates a basic ECS task definition that includes both standard environment variables and secrets fetched from AWS SSM Parameter Store. This example uses an Nginx container.
{
"family": "app-with-secrets",
"executionRoleArn":"arn:aws:iam::xxxxxxxxxxxx:role/ecs-exec-role",
"taskRoleArn":"arn:aws:iam::xxxxxxxxxxxx:role/ecs-task-role",
"containerDefinitions": [
{
"name": "nginx",
"image": "nginx:latest",
"memoryReservation": 256,
"portMappings":[
{
"protocol":"tcp",
"containerPort":3000,
"hostPort":0
}
],
"environment": [
{
"name": "AWS_DEFAULT_REGION",
"value": "eu-west-1"
}
],
"secrets": [
{
"name": "ACCESS_KEY_ID",
"valueFrom": "arn:aws:ssm:eu-west-1:xxxxxxxxxxxx:parameter/myapp/prod/AWS_ACCESS_KEY_ID"
}
],
"essential": true,
"privileged": true
}
]
}
-
executionRoleArn: The IAM role that the ECS agent assumes to make AWS API calls on your behalf. -
taskRoleArn: The IAM role that is assumed by tasks when they are run. This role grants permissions to your application code within the container. -
environment: An array of key-value pairs for standard environment variables. -
secrets: An array where each object maps a container environment variable name to a reference for a secret stored in AWS Secrets Manager or SSM Parameter Store. ThevalueFromfield specifies the ARN of the secret.
Always use a dedicated secrets management service like AWS Secrets Manager or SSM Parameter Store for sensitive data. Avoid hardcoding secrets directly into your task definitions or container images. Ensure that your IAM roles have the least privilege necessary to access these secrets.
For more in-depth information on AWS ECS and security best practices, refer to the official AWS ECS Developer Guide.