Especificación de información confidencial mediante Secrets Manager - AWS Batch

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

Con AWS Batch, puede inyectar datos confidenciales en sus trabajos almacenándolos en AWS Secrets Manager secreto y luego haciendo referencia a ellos en la definición de su trabajo. La información confidencial almacenada en secretos de Secrets Manager se puede exponer a un trabajo como variables de entorno o como parte de la configuración del registro.

Cuando inyecta un secreto como variable de entorno, puede especificar una clave JSON o versión de un secreto para inyectar. Este proceso le ayuda a controlar la información confidencial expuesta al trabajo. Para obtener más información acerca del control de versiones de los secretos, consulte los Términos y conceptos clave de AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager .

Consideraciones para la especificación de información confidencial mediante Secrets Manager

Cuando se utilice Secrets Manager para especificar información confidencial para trabajos, se debe tener en cuenta lo siguiente.

  • Para inyectar un secreto utilizando una clave JSON específica o una versión de un secreto, la instancia de contenedor de su entorno de computación debe tener instalada la versión 1.37.0 o posterior del agente de contenedores de Amazon ECS. No obstante, recomendamos utilizar la versión del agente de contenedor más reciente. Para obtener información sobre cómo comprobar la versión del agente y actualizarlo a la versión más reciente, consulte Actualización del agente de contenedor de Amazon ECS en la Guía para desarrolladores de Amazon Elastic Container Service.

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

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

  • Cuando utilice una definición de trabajos que haga referencia a secretos de Secrets Manager para recuperar información confidencial de los trabajos, si también está utilizando puntos de conexión de VPC de la interfaz, debe crear los puntos de conexión de VPC de la interfaz para Secrets Manager. Para obtener más información, consulte Utilización 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 trabajo. Si el secreto se actualiza posteriormente o se rota, el trabajo no recibe automáticamente el valor actualizado. Debe lanzar un nuevo trabajo para obligar al servicio a lanzar uno nuevo con el valor secreto actualizado.

Permisos de IAM necesarios para los secretos AWS Batch

Para utilizar esta característica, debe tener la función de ejecución y hacer referencia a ella en la definición del trabajo. Esto permite que el agente de contenedor extraiga los recursos necesarios de Secrets Manager. Para obtener más información, consulte AWS Batch función de IAM de ejecución.

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. Para obtener más información, consulte Adición y eliminación de políticas de IAM en la Guía del usuario de IAM.

  • secretsmanager:GetSecretValue: obligatorio si se referencia un secreto de Secrets Manager.

  • 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.

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>" ] } ] }

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

Dentro de la definición del trabajo, puede especificar los siguientes elementos:

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

  • Nombre de recurso de Amazon (ARN) del secreto de Secrets Manager

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

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. Algunos parámetros son opcionales. Sin embargo, si no los utiliza, debe incluir los dos puntos : para utilizar los valores por defecto. 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 AWS Secrets Manager usuario.

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.

Los ID de versión 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 un ID. Para obtener más información, consulte Términos y conceptos clave de AWS Secrets Manager en la Guía del AWS Secrets Manager usuario.

Definiciones de contenedor de ejemplo

En los siguientes ejemplos, se muestran las formas en las que se pueden referenciar secretos de Secrets Manager en las definiciones de contenedor.

ejemplo hacer referencia a un secreto completo

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

{ "containerProperties": [{ "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 del resultado de un get-secret-valuecomando que muestra el contenido de un secreto junto con la etiqueta provisional de la versión y el identificador de versión asociados al mismo.

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c",
    "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.

{ "containerProperties": [{ "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 una salida de ejemplo 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-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "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.

{ "containerProperties": [{ "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.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }
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.

{ "containerProperties": [{ "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.

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

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

En la definición de trabajo, 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 trabajo que muestra el formato cuando se referencia un secreto de Secrets Manager.

{ "containerProperties": [{ "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" }] }] }] }

Crear un secreto AWS Secrets Manager

Puede utilizar la consola de Secrets Manager para crear un secreto con 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 con su información confidencial.

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

  2. Elija Almacenar un secreto nuevo.

  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 UserName y, a continuación, proporcionar el nombre de usuario como su valor. Agregue una segunda clave con el nombre Password y el texto de la contraseña como su valor. También puede añadir entradas para el nombre de una base de datos, la dirección del servidor o el puerto TCP. Puede añadir tantas parejas como sea necesario para almacenar la información que necesite.

    Como opción, puede elegir la pestaña Plaintext (Texto no cifrado) y escribir el valor del secreto del modo que prefiera.

  5. Elija la clave de AWS KMS cifrado que desee usar para cifrar el texto protegido del secreto. Si no elige ninguna, Secrets Manager comprueba si existe una clave predeterminada para la cuenta y la utiliza 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 clave de KMS personalizada específicamente para este secreto. Para crear su propia clave de KMS, debe tener permisos para crear claves de KMS en su cuenta.

  6. Elija 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 de datos secretos nuevos o existentes, consulte Rotación de sus datos AWS Secrets Manager secretos.

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