Especificación de información confidencial mediante el Parameter Store de Systems Manager - Amazon Elastic Container Service

Especificación de información confidencial mediante el Parameter Store de Systems Manager

Amazon ECS le permite introducir información confidencial en sus contenedores, almacenarla en parámetros del Parameter Store de AWS Systems Manager y, a continuación, referenciarlos en la definición de contenedor.

Consideraciones para especificar información confidencial mediante el Parameter Store de Systems Manager

Cuando se especifica información confidencial para contenedores que utilizan parámetros del Parameter Store de Systems Manager, se debe tener en cuenta lo siguiente.

  • Para las tareas que utilizan el tipo de lanzamiento de Fargate, esta característica requiere que la tarea utilice la versión 1.3.0 o posterior (de Linux) o 1.0.0 o posterior (de Windows) de la plataforma. Para obtener información, consulte Versiones de la plataforma AWS Fargate.

  • Para tareas que utilicen el tipo de lanzamiento de EC2, esta característica requiere que la instancia de contenedor tenga la versión 1.22.0 del agente de contenedor o una posterior. No obstante, recomendamos utilizar la versión del agente de contenedor más reciente. Para obtener información sobre la comprobación de la versión del agente y la actualización a la versión más reciente, consulte Actualización del agente de contenedor de Amazon ECS.

  • Los datos confidenciales se inyectan en el contenedor al iniciar el contenedor. Si el secreto o el parámetro Parameter Store se actualizan posteriormente o se rotan, el contenedor no recibirá automáticamente el valor actualizado. Debe lanzar una nueva tarea o, si su tarea forma parte de un servicio, puede actualizar el servicio y utilizar la opción Force new deployment (Forzar nueva implementación) para forzar que el servicio lance una nueva tarea.

  • Para las tareas de Windows configuradas para utilizar el controlador de registros awslogs, debe también establecer la variable de entorno ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE en la instancia del contenedor. Esto se puede hacer con User Data (Datos de usuario) mediante el uso de la siguiente sintaxis:

    <powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>

Permisos de IAM requeridos para los secretos de Amazon ECS

Para utilizar esta característica, debe tener el rol de ejecución de tareas de Amazon ECS y hacer referencia a él en la definición de tareas. Esto permite que el agente de contenedor extraiga los recursos de AWS Systems Manager necesarios. Para obtener más información, consulte Rol de IAM de ejecución de tareas de Amazon ECS .

importante

En el caso de las tareas que utilizan el tipo de lanzamiento de EC2, debe utilizar la variable de configuración del agente de ECS ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true para utilizar esta característica. Puede añadirla al archivo ./etc/ecs/ecs.config durante la creación de la instancia de contenedor o puede añadirla a una instancia existente y, a continuación, reiniciar el agente de ECS. Para obtener más información, consulte Configuración del agente de contenedor de Amazon ECS .

Para proporcionar acceso a los parámetros de AWS Systems Manager Parameter Store que cree, añada manualmente los siguientes permisos como una política insertada al rol de ejecución de tareas. Para obtener más información, consulte Adición y eliminación de políticas de IAM.

  • ssm:GetParameters: obligatorio si se hace referencia a un parámetro del Parameter Store de Systems Manager en una definición de tareas.

  • secretsmanager:GetSecretValue: obligatorio si se hace referencia a un secreto de Secrets Manager directamente o si el parámetro del Parameter Store de Systems Manager hace referencia a un secreto de Secrets Manager en una definición de tareas.

  • kms:Decrypt: obligatorio solo si el secreto utiliza una clave de KMS personalizada y no la clave predeterminada. El ARN de su clave personalizada debe añadirse como un recurso.

A continuación, mostramos un ejemplo de política insertada que añade los permisos necesarios.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter_name>", "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ] }

Introducción de información confidencial como variable de entorno

En la definición de contenedor, especifique secrets con el nombre de la variable de entorno que se va a establecer en el contenedor y el ARN completo del parámetro del Parameter Store de Systems Manager que contiene la información confidencial que se va a presentar al contenedor.

A continuación, se incluye un fragmento de código de una definición de tarea que muestra el formato cuando se hace referencia a un parámetro del Parameter Store de Systems Manager. Si el parámetro del Parameter Store de Systems Manager está en la misma región que la tarea que se va a lanzar, se puede utilizar el ARN completo o el nombre del parámetro. Si el parámetro existe en una región distinta, el ARN completo debe especificarse.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }] }

Introducción de información confidencial en una configuración de registros

En la definición de contenedor, al especificar una logConfiguration, puede especificar secretOptions con el nombre de la opción del controlador de registros que va a definir en el contenedor y el ARN completo del parámetro del Parameter Store de Systems Manager que contiene la información confidencial que se va a presentar al contenedor.

importante

Si el parámetro del Parameter Store de Systems Manager está en la misma región que la tarea que se va a lanzar, se puede utilizar el ARN completo o el nombre del parámetro. Si el parámetro existe en una región distinta, el ARN completo debe especificarse.

A continuación, se incluye un fragmento de código de una definición de tareas que muestra el formato cuando se hace referencia a un parámetro del Parameter Store de Systems Manager.

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter:/parameter_name" }] }] }] }

Creación de un parámetro del Parameter Store de AWS Systems Manager

Puede utilizar la consola de AWS Systems Manager para crear un parámetro del Parameter Store de Systems Manager para la información confidencial. Para obtener más información, consulte Explicación: Creación y utilización de un parámetro en un comando (consola) en la Guía del usuario de AWS Systems Manager.

Para crear un parámetro con Parameter Store

  1. Abra la consola de AWS Systems Manager en https://console.aws.amazon.com/systems-manager/.

  2. En el panel de navegación, elija Parameter Store, Create parameter (Crear parámetro).

  3. En Name (Nombre), escriba una jerarquía y un nombre de parámetro. Por ejemplo, escriba /test/database_password.

  4. En Description (Descripción), escriba una descripción opcional.

  5. En Type, seleccione String, StringList o SecureString.

    nota
    • Si elige SecureString, aparece el campo KMS Key ID (ID de clave de KMS). Si no proporciona un ID de clave de KMS, un ARN de clave de KMS, un nombre de alias o un ARN de alias, el sistema utiliza alias/aws/ssm, que es la clave de KMS predeterminada para Systems Manager. Para evitar utilizar esta clave, elija una clave personalizada. Para obtener más información, consulte Utilización de parámetros de cadena segura en la Guía del usuario de AWS Systems Manager.

    • Si crea un parámetro de cadena segura en la consola mediante el parámetro key-id con un nombre de alias de clave de KMS o un ARN de alias personalizado, debe especificar el prefijo alias/ antes del alias. A continuación se muestra un ejemplo de ARN:

      arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

      El siguiente es un ejemplo de un nombre de alias:

      alias/MyAliasName
  6. En Value (Valor), escriba un valor. Por ejemplo, MyFirstParameter. Si elige SecureString, el valor queda enmascarado a medida que lo escribe.

  7. Elija Create parameter.

Creación de una definición de tareas que haga referencia a información confidencial en la consola clásica

Puede utilizar la consola de Amazon ECS para crear una definición de tarea que haga referencia a un parámetro del Parameter Store de Systems Manager.

Para crear una definición de tarea que especifique un secreto

  1. Abra la consola de Amazon ECS en https://console.aws.amazon.com/ecs/.

  2. En el panel de navegación, elija Task Definitions (Definiciones de tareas) y Create New Task Definition (Crear nueva definición de tarea).

  3. En la página Select launch type compatibility (Seleccionar compatibilidad del tipo de lanzamiento), elija el tipo de lanzamiento para las tareas y elija Next step (Paso siguiente).

    nota

    Este paso solo es válido para las regiones que actualmente admiten Amazon ECS con Fargate de AWS. Para obtener más información, consulte Amazon ECS en AWS Fargate .

  4. En Task Definition Name (Nombre de definición de tareas), escriba un nombre para la definición de tareas. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

  5. En Task execution role (Rol de ejecución de tareas), seleccione el rol de ejecución de tareas existente o elija Create new role (Crear nuevo rol) para crearlo. Este rol permite a Amazon ECS extraer imágenes privadas para su tarea. Para obtener más información, consulte Permisos de IAM requeridos para la autenticación de registros privados .

    importante

    Si el campo Task execution role (Rol de ejecución de tareas) no aparece, elija Configure via JSON (Configurar mediante JSON) y añada manualmente el campo executionRoleArn para especificar el rol de ejecución de tareas. En el siguiente código se muestra la sintaxis:

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  6. Para cada contenedor que vaya a crear en su definición de tarea, siga los pasos que se describen a continuación:

    1. En Container Definitions (Definiciones de contenedor), elija Add container (Añadir contenedor).

    2. En Container name (Nombre del contenedor), escriba un nombre para el contenedor. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

    3. En Image (Imagen), escriba el nombre de la imagen o la ruta a su imagen privada. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

    4. Amplíe Advanced container configuration (Configuración avanzada del contenedor).

    5. Para que la información confidencial se inyecte como variables de entorno, en Environment (Entorno), en Environment variables (Variables de entorno), complete los campos siguientes:

      1. En Key (Clave), escriba el nombre de la variable del entorno que se establece en el contenedor. Se corresponde con el campo name de la sección secrets de una definición de contenedor.

      2. En Value (Valor), elija ValueFrom. En Add value (Agregar valor), escriba el ARN completo del parámetro del Almacén de parámetros de AWS Systems Manager que contiene la información que se presentará al contenedor como variable del entorno.

        nota

        Si el parámetro del Parameter Store de Systems Manager existe en la misma región que la tarea que se va a lanzar, se puede utilizar el ARN completo o el nombre del secreto. Si el parámetro existe en una región distinta, el ARN completo debe especificarse.

    6. Para secretos a los que se hacer referencia en la configuración de registros para un contenedor, en Storage and Logging (Almacenamiento y registro), para Log configuration (Configuración de registro), complete los campos siguientes:

      1. Desactive la opción Auto-configure CloudWatch Logs (Configurar automáticamente de CloudWatch Logs).

      2. En Log options (Opciones de registro), en Key (Clave), introduzca el nombre de la opción de configuración de registro que desea establecer.

      3. En Value (Valor), elija ValueFrom. En Add value (Agregar valor), escriba el nombre o el ARN completo del parámetro del Almacén de parámetros de AWS Systems Manager que contiene la información que se presentará a la configuración de registro como opción de registro.

        nota

        Si el parámetro del Parameter Store de Systems Manager existe en la misma región que la tarea que se va a lanzar, se puede utilizar el ARN completo o el nombre del secreto. Si el parámetro existe en una región distinta, el ARN completo debe especificarse.

    7. Rellene el resto de los campos obligatorios y todos los campos opcionales que va a usar en sus definiciones de contenedor. Hay más parámetros de definición de contenedor disponibles en el menú Advanced container configuration (Configuración avanzada del contenedor). Para obtener más información, consulte Parámetros de definición de tarea .

    8. Elija Add (Agregar).

  7. Cuando se añadan los contenedores, elija Create (Crear).