Uso de GMSA para contenedores de Windows en Amazon EC2 - 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.

Uso de GMSA para contenedores de Windows en Amazon EC2

Amazon ECS admite la autenticación de Active Directory para contenedores de Windows a través de un tipo especial de cuenta de servicio denominada cuenta de servicio administrada de grupo (gMSA).

Las aplicaciones de red basadas en Windows, como las aplicaciones .NET, suelen utilizar Active Directory para facilitar la gestión de autorizaciones y la autenticación entre usuarios y servicios. Normalmente, los desarrolladores diseñan sus aplicaciones para que se integren con Active Directory y se ejecuten en servidores unidos a dominios para este propósito. Dado que los contenedores de Windows no se pueden unir a un dominio, debe configurar un contenedor de Windows para que se ejecute con gMSA.

Un contenedor de Windows que se ejecuta con gMSA depende de su instancia de Amazon EC2 host para recuperar las credenciales de gMSA del controlador de dominio de Active Directory y proporcionárselas a la instancia de contenedor. Para obtener más información, consulte Crear GMSA para contenedores de Windows.

nota

Esta característica no es compatible con los contenedores de Windows de Fargate.

Consideraciones

Cuando se utilizan gMSA para contenedores de Windows, se debe tener en cuenta lo siguiente:

  • Al utilizar la AMI de Windows Server 2016 Full optimizada para Amazon ECS para las instancias de contenedor, el nombre de host del contenedor debe ser el mismo que el nombre de cuenta de gMSA definido en el archivo de especificación de credenciales. Para especificar un nombre de host para un contenedor, utilice el parámetro hostname de definición de contenedor. Para obtener más información, consulte Network settings (Configuración de red).

  • Puede elegir entre gMSA sin dominio o unir cada instancia a un único dominio. Al usar una gMSA sin dominio, la instancia de contenedor no se une al dominio, las demás aplicaciones de la instancia no pueden utilizar las credenciales para acceder al dominio y las tareas que unen diferentes dominios se pueden ejecutar en la misma instancia.

    A continuación, seleccione el almacenamiento de datos para las CredSpec y, de forma opcional, para las credenciales de usuario de Active Directory para gMSA sin dominio.

    Amazon ECS utiliza un archivo de especificaciones de credenciales de Active Directory (CredSpec). Este archivo contiene los metadatos de gMSA utilizados para propagar el contexto de la cuenta de gMSA al contenedor. Genera el archivo de CredSpec y, a continuación, lo almacena en una de las opciones de almacenamiento de CredSpec de la siguiente tabla, específica del sistema operativo de las instancias de contenedor. Para usar el método sin dominio, en una sección opcional del archivo de CredSpec se pueden especificar las credenciales de una de las opciones de almacenamiento domainless user credentials de la siguiente tabla, específicas del sistema operativo de las instancias de contenedor.

    Opciones de almacenamiento de datos de gMSA por sistema operativo
    Ubicación de almacenamiento Linux Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager credenciales de usuario sin dominio credenciales de usuario sin dominio
    Parameter Store de Amazon EC2 Systems Manager CredSpec CredSpec, credenciales de usuario sin dominio
    Archivo local N/A CredSpec

Requisitos previos

Antes de utilizar la característica de gMSA para contenedores de Windows con Amazon ECS, asegúrese de completar lo siguiente:

  • Configure un dominio de Active Directory con los recursos a los que desea que accedan sus contenedores. Amazon ECS admite las siguientes configuraciones:

    • Un directorio AWS Directory Service activo. AWS Directory Service es un Active Directory AWS gestionado que se aloja en Amazon EC2. Para obtener más información, consulte Introducción a Microsoft AD AWS administrado en la Guía de AWS Directory Service administración.

    • Un Active Directory en las instalaciones. Debe asegurarse de que la instancia de contenedor de Linux de Amazon ECS pueda unirse al dominio. Para obtener más información, consulte AWS Direct Connect.

  • Tiene una cuenta de gMSA existente en Active Directory. Para obtener más información, consulte Crear GMSA para contenedores de Windows.

  • Eligió utilizar gMSA sin dominio o la instancia de contenedor de Windows de Amazon ECS en la que se aloja la tarea de Amazon ECS que debe ser un dominio unido a Active Directory y ser miembro del grupo de seguridad de Active Directory que tenga acceso a la cuenta de gMSA.

    Al usar una gMSA sin dominio, la instancia de contenedor no se une al dominio, las demás aplicaciones de la instancia no pueden utilizar las credenciales para acceder al dominio y las tareas que unen diferentes dominios se pueden ejecutar en la misma instancia.

  • Agregó los permisos necesarios de IAM. Los permisos necesarios dependen de los métodos que elija para las credenciales iniciales y para almacenar la especificación de las credenciales:

    • Si utiliza dominios sin dominio gMSA para las credenciales iniciales, AWS Secrets Manager se requieren permisos de IAM para el rol de instancia de Amazon EC2.

    • Si almacena la especificación de credenciales en SSM Parameter Store, se requieren permisos de IAM para Parameter Store de Amazon EC2 Systems Manager en el rol de ejecución de la tarea.

    • Si almacena la especificación de credenciales en Amazon S3, se requieren permisos de IAM para Amazon Simple Storage Service en el rol de ejecución de tareas.

Configuración de gMSA para contenedores de Windows en Amazon ECS

Para configurar gMSA para contenedores de Windows en Amazon ECS, puede seguir el tutorial completo que incluye la configuración de los requisitos previos Uso de contenedores de Windows con gMSA Domainless mediante el AWS CLI.

En las siguientes secciones, se describe la configuración de CredSpec en detalle.

Ejemplo CredSpec

Amazon ECS utiliza un archivo de especificación de credenciales que contiene los metadatos de gMSA utilizados para propagar el contexto de la cuenta de gMSA al contenedor de Windows. Puede generar el archivo de especificación de credenciales y hacer referencia a él en el campo credentialSpec de la definición de tareas. El archivo de especificación de credenciales no contiene ningún secreto.

A continuación se muestra un ejemplo de archivo de especificación de credenciales:

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "contoso.com", "DnsName": "contoso.com", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso.com" } ] } }

Configuración de gMSA sin dominio

Recomendamos gMSA sin dominio en lugar de unir las instancias de contenedor a un solo dominio. Al usar una gMSA sin dominio, la instancia de contenedor no se une al dominio, las demás aplicaciones de la instancia no pueden utilizar las credenciales para acceder al dominio y las tareas que unen diferentes dominios se pueden ejecutar en la misma instancia.

  1. Antes de subir las CredSpec a una de las opciones de almacenamiento, agregue información a las CredSpec con el ARN del secreto en Secrets Manager o en SSM Parameter Store. Para obtener más información, consulte el caso de uso de configuración de especificaciones de credenciales adicionales para el host de non-domain-joined contenedores en el sitio web de Microsoft Learn.

    Formato de credenciales de gMSA sin dominio

    El siguiente es el formato JSON para las credenciales de gMSA sin dominio de Active Directory. Almacene las credenciales en Secrets Manager o SSM Parameter Store.

    { "username":"WebApp01", "password":"Test123!", "domainName":"contoso.com" }
  2. Agregue la siguiente información al archivo de CredSpec que se encuentra dentro del ActiveDirectoryConfig. Sustituya el ARN por el secreto en Secrets Manager o SSM Parameter Store.

    Tenga en cuenta que el valor de PluginGUID debe coincidir con el GUID del siguiente fragmento de ejemplo y es obligatorio.

    "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" }

    También puede utilizar un secreto en SSM Parameter Store mediante el ARN en este formato: \"arn:aws:ssm:aws-region:111122223333:parameter/gmsa-plugin-input\".

  3. Tras modificar el archivo de CredSpec, tendrá un aspecto semejante al de este ejemplo:

    { "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-4066351383-705263209-1606769140", "MachineAccountName": "WebApp01", "Guid": "ac822f13-583e-49f7-aa7b-284f9a8c97b6", "DnsTreeName": "contoso", "DnsName": "contoso", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso" }, { "Name": "WebApp01", "Scope": "contoso" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" } } }

Cómo hacer referencia a un archivo de especificación de credenciales en una definición de tareas

Amazon ECS admite las siguientes formas de hacer referencia a la ruta de archivo en el campo credentialSpecs de una definición de tarea. Para cada una de estas opciones, puede proporcionar credentialspec: o domainlesscredentialspec:, en función de si va a unir las instancias de contenedor a un único dominio o si va a utilizar gMSA sin dominio, respectivamente.

Bucket de Amazon S3

Agregue la especificación de credenciales a un bucket de Amazon S3 y, a continuación, haga referencia al nombre de recurso de Amazon (ARN) del bucket de Amazon S3 en el campo credentialSpecs de la definición de tareas.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::${BucketName}/${ObjectName}" ], ... } ], ... }

También debe agregar los siguientes permisos como una política en línea al rol de IAM de ejecución de tareas de Amazon ECS, de modo que las tareas puedan obtener acceso al bucket de Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{bucket_name}", "arn:aws:s3:::{bucket_name}/{object}" ] } ] }

Parámetro de Parameter Store de SSM

Agregue la especificación de credenciales a un parámetro de Parameter Store de SSM. A continuación, haga referencia al nombre de recurso de Amazon (ARN) del parámetro de Parameter Store de SSM en el campo credentialSpecs de la definición de tareas.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:ssm:region:111122223333:parameter/parameter_name" ], ... } ], ... }

También debe agregar los siguientes permisos como una política en línea al rol de IAM de ejecución de tareas de Amazon ECS, para que las tareas puedan obtener acceso al parámetro de Parameter Store de SSM.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:region:111122223333:parameter/parameter_name" ] } ] }

Archivo local

Con los detalles de especificación de credenciales en un archivo local, haga referencia a la ruta del archivo en el campo credentialSpecs de la definición de tareas. La ruta del archivo al que se hace referencia debe ser relativa al directorio C:\ProgramData\Docker\CredentialSpecs y usar la barra invertida (“\”) como separador de la ruta del archivo.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspec:file://CredentialSpecDir\CredentialSpecFile.json" ], ... } ], ... }