¿Cómo puedo transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon ECS?

6 minutos de lectura
0

Quiero transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon Elastic Container Service (Amazon ECS).

Descripción breve

Transferir datos confidenciales en texto no cifrado puede provocar problemas de seguridad, ya que se pueden detectar en la consola de administración de AWS o a través de las API de AWS, como DescribeTaskDefinition o DescribeTasks.

Como práctica de seguridad recomendada, transfiera la información confidencial a los contenedores como variables de entorno. Puede inyectar datos de forma segura en los contenedores haciendo referencia a los valores almacenados en el almacén de parámetros de AWS Systems Manager o en AWS Secrets Manager en la definición de contenedor de una definición de tarea de Amazon ECS. A continuación, puede exponer su información confidencial como variables de entorno o en la configuración de registro de un contenedor.

AWS solo admite la inyección de datos para lo siguiente:

Resolución

Completar los requisitos previos

1.    Guarde su información confidencial en el almacén de parámetros de AWS Systems Manager o en Secrets Manager.

Para el almacén de parámetros de AWS Systems Manager, ejecute el comando siguiente. Sustituya awsExampleParameter por sus propios parámetros y awsExampleValue por su valor seguro:

aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue

Para Secrets Manager, ejecute el comando siguiente. Sustituya awsExampleParameter por sus propios parámetros y awsExampleValue por su valor del secreto:

aws secretsmanager create-secret --name awsExampleParameter --secret-string awsExampleValue

Nota: El agente de contenedores de Amazon ECS utiliza un rol de ejecución de tareas de AWS Identity and Access Management (IAM) para obtener la información del almacén de parámetros de AWS Systems Manager o de Secrets Manager. El rol de IAM de ejecución de tareas debe conceder permisos para las acciones siguientes: ssm:GetParameters, secretsmanager:GetSecretValue y kms:Decrypt.

2.    Abra la consola de IAM y, a continuación, cree un rol con una relación de confianza para ecs-tasks.amazonaws.com. Por ejemplo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.    Para crear una política insertada para su rol en la consola de IAM, elija Roles, seleccione el rol que creó en el paso 2 y, a continuación, elija Añadir política insertada en la pestaña Permisos. Elija la pestaña JSON y, a continuación, cree una política con el código siguiente. Sustituya us-east-1 y awsExampleAccountID por la región y la cuenta de AWS en las que se almacenan sus parámetros. Sustituya awsExampleParameter por el nombre de los parámetros que creó en el paso 1:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter",
        "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter*"
      ]
    }
  ]
}

Nota: Si utiliza una clave de KMS administrada por el cliente para cifrar datos en el almacén de parámetros de AWS Systems Manager o en Secrets Manager, debe obtener permisos para kms:Decrypt.

4.    (Opcional) Adjunte la política administrada AmazonECSTaskExecutionRolePolicy al rol que creó en el paso 2.

Importante: Se requiere una política administrada para las tareas que utilizan imágenes almacenadas en Amazon Elastic Container Registry (Amazon ECR) o que envían registros a Amazon CloudWatch.

Referencia a información confidencial en la definición de tareas de ECS

Desde la consola de administración de AWS:

1.    Abra la consola de Amazon ECS.

2.    En el panel de navegación, elija Definiciones de tareas y, a continuación, Crear una nueva definición de tarea.

3.    Elija el tipo de lanzamiento y, a continuación, Paso siguiente.

4.    Para Rol de ejecución de tareas, elija el rol de IAM de ejecución de tareas que creó anteriormente.

5.    En el apartado Definiciones de contenedores, elija Agregar contenedor.

6.    En el apartado Variables de entorno, en ENTORNO, introduzca una clave para la variable de entorno en Clave.

7.    En la lista desplegable Valor, elija ValueFrom.

8.    En el cuadro de texto de la clave, introduzca el nombre de recurso de Amazon (ARN) de su recurso de Parameter Store o Secrets Manager.

Nota: También puede especificar secretos en la configuración del controlador de registro.

Desde la Interfaz de la línea de comandos de AWS (AWS CLI):

Nota: Si obtiene errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la última versión de AWS CLI.

1.    Haga referencia a los recursos del almacén de parámetros de AWS Systems Manager o de Secrets Manager en la definición de la tarea como variables de entorno mediante el apartado de Secretos o como opciones de configuración de registros mediante el apartado secretOptions. En el ejemplo siguiente, sustituya us-east-1 y awsExampleAccountID por su región de AWS y su ID de cuenta. Sustituya awsExampleParameter por el parámetro que creó anteriormente. Sustituya awsExampleRoleName por el rol que creó anteriormente.

{
  "requiresCompatibilities": [
    "EC2"
  ],
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "web",
      "image": "httpd",
      "memory": 128,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "splunk",
        "options": {
          "splunk-url": "https://sample.splunk.com:8080"
        },
        "secretOptions": [
          {
            "name": "splunk-token",
            "valueFrom": "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter"
          }
        ]
      },
      "secrets": [
        {
          "name": "DATABASE_PASSWORD",
          "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter"
        }
      ]
    }
  ],
  "executionRoleArn": "arn:aws:iam::awsExampleAccountID:role/awsExampleRoleName"
}

2.    Para registrar la definición de la tarea, ejecute el comando siguiente:

aws ecs register-task-definition --family-name yourTaskDefinitionFamily --cli-input-json file://pathToYourJsonFile

Cuando se lanza una tarea mediante la definición de tarea que ha creado, el agente de contenedores de Amazon ECS resuelve automáticamente los secretos e inyecta los valores como variables de entorno en el contenedor.

Importante: Los datos confidenciales se inyectan en el contenedor cuando este se inicia por primera vez. Si el secreto o el parámetro Parameter Store se actualiza o rota, el contenedor no recibe el valor actualizado automáticamente. Debe lanzar una nueva tarea. Si la tarea forma parte de un servicio, actualice el servicio. A continuación, utilice la opción Forzar un nuevo despliegue para obligar al servicio a lanzar una nueva tarea.

Para forzar un nuevo despliegue:

1.    Abra la consola de Amazon ECS.

2.    Elija Clústeres y, a continuación, seleccione el clúster con su servicio.

3.    Seleccione la casilla Forzar un nuevo despliegue y, a continuación, elija Actualizar servicio.

Nota: Para forzar un nuevo despliegue desde AWS CLI, ejecute el comando update-service con la marca --force-new-deployment.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años