Especificación de información confidencial mediante Secrets Manager - Amazon Elastic Container Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Especificación de información confidencial mediante Secrets Manager

Amazon ECS le permite introducir información confidencial en sus contenedores almacenándola en secretos de AWS Secrets Manager y, a continuación, haciendo referencia a ellos en la definición de contenedor. La información confidencial almacenada en secretos de Secrets Manager se puede exponer a un contenedor como variables de entorno o como parte de la configuración del registro.

Al inyectar un secreto como variable de entorno, puede especificar el contenido completo de un secreto, una clave JSON específica dentro de un secreto o una versión específica de un secreto para inyectar. Esto le ayuda a controlar la información confidencial expuesta en su contenedor. Para obtener más información sobre el control de versiones secretas, consulte Términos y conceptos clave de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

Consideraciones para especificar información confidencial mediante Secrets Manager

Debe tenerse en cuenta lo siguiente al utilizar Secrets Manager para especificar información confidencial para contenedores:

  • Para las Amazon ECS tareas en AWS Fargate, se debe tener en cuenta lo siguiente:

    • Para inyectar el contenido completo de un secreto como variable de entorno o en una configuración de registro, debe utilizar la versión de la plataforma 1.3.0 o posterior. Para obtener información, consulte AWS FargateVersiones de la plataforma .

    • Para inyectar una clave JSON o versión específica de un secreto como variable de entorno o en una configuración de registro, debe utilizar la versión de la plataforma 1.4.0 o posterior. Para obtener información, consulte AWS FargateVersiones de la plataforma .

  • Para las Amazon ECS tareas en EC2, se debe tener en cuenta lo siguiente:

    • Para inyectar un secreto mediante una clave JSON específica o una versión de un secreto, la instancia de contenedor debe tener la versión 1.37.0 o posterior del agente de contenedor. 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 Actualizar el agente de contenedor de Amazon ECS.

      Para inyectar el contenido completo de un secreto como variable de entorno o para inyectar un secreto en una configuración de registro, la instancia de contenedor debe tener la versión 1.22.0 o posterior del agente de contenedor.

  • Solo se admiten los secretos que almacenan datos de texto, que son secretos creados con el SecretString parámetro de la CreateSecret API . No se admiten los secretos que almacenan datos binarios, que son secretos creados con el SecretBinary parámetro de la CreateSecret API .

  • Cuando utilice una definición de tarea que haga referencia a secretos de Secrets Manager para recuperar datos confidenciales de los contenedores, si también está utilizando puntos de enlace de la VPC de interfaz, debe crear los puntos de enlace de la VPC de interfaz para Secrets Manager. Para obtener más información, consulte Uso de Secrets Manager con puntos de enlace de la VPC en la Guía del usuario de AWS Secrets Manager.

  • Los datos confidenciales se inyectan en el contenedor al iniciar el contenedor. Si el secreto se actualiza posteriormente o se rota, el contenedor no recibirá automáticamente el valor actualizado. Debe lanzar una nueva tarea o, si la 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>

IAM Permisos necesarios para Amazon ECS secretos

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 la tarea. Esto permite que el agente de contenedor extraiga los recursos de Secrets Manager necesarios. Para obtener más información, consulte Amazon ECS ejecución de tareas IAM función.

importante

Para las Amazon ECS tareas 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 Amazon ECSConfiguración del agente de contenedor de .

Para proporcionar acceso a los secretos de Secrets Manager que cree, agregue 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.

  • secretsmanager:GetSecretValue–Obligatorio si hace referencia a un Secrets Manager secreto de .

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

La siguiente política insertada de ejemplo agrega los permisos necesarios.

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

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

Dentro de la definición de contenedor, puede especificar lo siguiente:

  • El objeto secrets que contiene el nombre de la variable de entorno que se va a establecer en el contenedor

  • El nombre de recurso de Amazon (ARN) del secreto de Secrets Manager

  • Parámetros adicionales que contienen información confidencial que se debe presentar al contenedor

En el ejemplo siguiente se muestra la sintaxis completa que se debe especificar para el secreto de Secrets Manager

arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id

En la siguiente sección se describen los parámetros adicionales. Estos parámetros son opcionales, pero si no los utiliza, debe incluir los dos puntos y coma : para utilizar los valores predeterminados. A continuación se ofrecen ejemplos para obtener más contexto.

json-key

Especifica el nombre de la clave en un par clave-valor con el valor que desea establecer como valor de variable de entorno. Solo se admiten valores en formato JSON. Si no especifica una clave JSON, se usa el contenido completo del secreto.

version-stage

Especifica la etiqueta de ensayo de la versión de un secreto que desea utilizar. Si se especifica una etiqueta de ensayo de versión, no se puede especificar un ID de versión. Si no se especifica ninguna etapa de versión, el comportamiento predeterminado consiste en recuperar el secreto con la etiqueta de ensayo AWSCURRENT

Las etiquetas de ensayo se utilizan para realizar un seguimiento de las distintas versiones de un secreto cuando se actualizan o rotan. Cada versión de un secreto tiene una o varias etiquetas de ensayo y un ID. Para obtener más información, consulte Términos y conceptos clave de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

version-id

Especifica el identificador único de la versión del secreto que desea utilizar. Si se especifica un ID de versión, no se puede especificar una etiqueta de ensayo de versión. Si no se especifica ningún ID de versión, el comportamiento predeterminado consiste en recuperar el secreto con la etiqueta de ensayo AWSCURRENT

La versión IDs se utiliza para realizar un seguimiento de las diferentes versiones de un secreto cuando se actualizan o rotan. Cada versión de un secreto tiene un ID. Para obtener más información, consulte Términos y conceptos clave de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.

Para un tutorial completo sobre la creación de un secreto de Secrets Manager y la inyección del mismo en un contenedor como variable de entorno, consulte Tutorial Especificación de datos confidenciales usando Secrets Manager secretos.

Definiciones de contenedor de ejemplo

Los siguientes ejemplos muestran formas en las que puede hacer referencia a secretos de Secrets Manager en las definiciones de contenedor.

ejemplo hacer referencia a un secreto completo

A continuación, se incluye un fragmento de una definición de tarea que muestra el formato cuando se hace referencia al texto completo de un secreto de Secrets Manager

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }

ejemplo hacer referencia a una clave específica dentro de un secreto

A continuación se muestra un ejemplo de salida de un comando get-secret-value que muestra el contenido de un secreto junto con la etiqueta de ensayo de versión y el ID de versión asociados.

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981ddEXAMPLE",
    "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1581968848.921
}

Haga referencia a una clave específica de la salida anterior en una definición de contenedor especificando el nombre de clave al final del ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }] }

ejemplo hacer referencia a una versión de secreto específica

A continuación se muestra un ejemplo de salida de un comando describe-secret que muestra el contenido sin cifrar de un secreto junto con los metadatos de todas las versiones del secreto.

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "Description": "Example of a secret containing application authorization data.",
    "RotationEnabled": false,
    "LastChangedDate": 1581968848.926,
    "LastAccessedDate": 1581897600.0,
    "Tags": [],
    "VersionIdsToStages": {
        "871d9eca-18aa-46a9-8785-981ddEXAMPLE": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE": [
            "AWSPREVIOUS"
        ]
    }
}

Haga referencia a una etiqueta de ensayo de versión específica de la salida anterior en una definición de contenedor especificando el nombre de clave al final del ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:" }] }] }

Haga referencia a un ID de versión específico de la salida anterior en una definición de contenedor especificando el nombre de clave al final del ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }

ejemplo hacer referencia a una clave específica y una etiqueta de ensayo de versión de un secreto

A continuación se muestra cómo hacer referencia tanto a una clave específica dentro de un secreto como a una etiqueta de ensayo de versión específica.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:" }] }] }

Para especificar una clave y un ID de versión específicos, utilice la sintaxis siguiente.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }

Inserción de información confidencial en una configuración de registro

En la definición del contenedor, al especificar una logConfiguration puede especificar secretOptions con el nombre de la opción del controlador de registros para definir el contenedor y el ARN completo del secreto de Secrets 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 secreto de Secrets Manager

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

Creación de un AWS Secrets Manager secreto de

Puede utilizar la consola de Secrets Manager para crear un secreto para su información confidencial. Para obtener más información, consulte Creación de un secreto básico en la Guía del usuario de AWS Secrets Manager.

Para crear un secreto básico

Utilice Secrets Manager para crear un secreto para su información confidencial.

  1. Abra la consola de Secrets Manager en https://console.aws.amazon.com/secretsmanager/.

  2. Elija Store a new secret. (Almacenar un nuevo secreto).

  3. En Select secret type (Seleccionar tipo de secreto), elija Other type of secrets (Otro tipo de secretos).

  4. Especifique los detalles de su secreto personalizado como pares de clave y valor. Por ejemplo, puede especificar una clave de y, a UserNamecontinuación, proporcionar el nombre de usuario adecuado como valor. Añada una segunda clave con el nombre Password y el texto de la contraseña como valor. También podría añadir entradas para un nombre de base de datos, dirección del servidor, puerto TCP, etc. Puede añadir tantas parejas como sea necesario para almacenar la información que necesite.

    También puede elegir la pestaña Plaintext (Texto no cifrado) y escribir el valor del secreto de la forma que desee.

  5. Seleccione la clave de cifrado de AWS KMS que desea usar para cifrar el texto protegido en el secreto. Si no elige ninguna, Secrets Manager comprueba si existe una clave predeterminada para la cuenta y la usa si existe. Si no existe una clave predeterminada, Secrets Manager crea una automáticamente. También puede elegir Add new key (Añadir nueva clave) para crear una CMK personalizada específicamente para este secreto. Para crear su propia AWS KMS CMK, debe tener permisos para crear CMKs en su cuenta.

  6. Seleccione Siguiente.

  7. En Secret name (Nombre del secreto), escriba una ruta y un nombre opcionales, tales como production/MyAwesomeAppSecret o development/TestSecret y elija Next (Siguiente). Opcionalmente, puede añadir una descripción para ayudarle a recordar el objetivo de este secreto más adelante.

    El nombre del secreto debe estar formado por letras ASCII, dígitos o cualquiera de los siguientes caracteres: /_+=.@-

  8. (Opcional) En este punto puede configurar la rotación para su secreto. Para este procedimiento, deje seleccionado Disable automatic rotation (Deshabilitar la rotación automática) y, a continuación, elija Next (Siguiente).

    Para obtener información sobre cómo configurar la rotación en secretos nuevos o existentes, consulte Rotación de sus secretos de AWS Secrets Manager.

  9. Revise la configuración y, a continuación, elija Store secret (Almacenar secreto) para guardar todo lo que ha escrito como un nuevo secreto en Secrets Manager.

Creación de una definición de tarea que hace referencia a información confidencial

Puede utilizar la consola de Amazon ECS para crear una definición de tarea que haga referencia a un secreto de Secrets 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 tarea), 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 AWS Fargate. Para obtener más información, consulte Amazon ECS del AWS Fargate.

  4. En task definition Name, escriba un nombre para la definición de tarea. 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 que se cree uno automáticamente. Este rol permite a Amazon ECS extraer imágenes privadas para su tarea. Para obtener más información, consulte IAM Permisos necesarios 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 executionRoleArn campo 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 una 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. En el caso de la información confidencial que se va a inyectar 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 de entorno que se va a establecer 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 (Añadir valor), escriba el ARN del Secrets Manager secreto que contiene los datos que se presentarán al contenedor como variable de entorno.

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

      1. Desactive la CloudWatch Logs opción Auto-configure (Configuración automática).

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

      3. En Value (Valor), elija ValueFrom . En Add value (Añadir valor), escriba el ARN completo del Secrets Manager secreto que contiene los datos que se presentarán a la configuración de registro como opción de registro.

    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 de contenedor). Para obtener más información, consulte Parámetros de definición de tarea.

    8. Elija Add (Añadir).

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