En este documento, se muestra cómo configurar Active Directory y Compute Engine para que las instancias de máquina virtual (VM) de Windows puedan unirse automáticamente a un dominio de Active Directory.
La automatización del proceso de unión de las VM de Windows a Active Directory te ayuda a simplificar el proceso de aprovisionamiento de servidores de Windows. Este enfoque también te permite aprovechar el ajuste de escala automático sin perder los beneficios de usar Active Directory para administrar el acceso y la configuración.
Este documento está dirigido a los administradores del sistema y supone que estás familiarizado con las redes de Active Directory y Google Cloud.
La configuración que crees siguiendo el procedimiento de este documento puede ser la base del trabajo adicional que realices con los servidores de Windows en Google Cloud. Por ejemplo, después de terminar este procedimiento, puedes implementar aplicaciones ASP.NET con la autenticación de Windows en contenedores de Windows.
Si estás utilizando Managed Microsoft AD y no necesitas una limpieza automática de cuentas de computadora inactivas, considera unir las VMs de Windows mediante la característica de unión automatizada de dominios. Para obtener más información, consulta Une una VM de Windows de forma automática a un dominio.
Objetivos
- Implementar una aplicación de Cloud Run que permita que las instancias de VM de los proyectos seleccionados se unan automáticamente a tu dominio de Active Directory
- Crear un trabajo de Cloud Scheduler que analice periódicamente tu dominio de Active Directory para detectar cuentas de computadora inactivas y eliminarlas
- Probar la configuración mediante la creación de un grupo de instancias administrado (MIG) con ajuste de escala automático de instancias de VM unidas al dominio
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Las instrucciones de este documento están diseñadas para que el uso de los recursos se mantenga dentro de
los límites del nivel Siempre gratuito
de Google Cloud.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando termines esta guía, puedes borrar los recursos que creaste para evitar que se sigan facturando. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
En este documento, se supone que ya implementaste Active Directory en Google Cloud mediante el Servicio administrado para Microsoft Active Directory (Microsoft AD administrado) o mediante la implementación de controladores de dominio autoadministrados en Google Cloud.
Para completar los procedimientos, asegúrate de tener lo siguiente:
- Acceso de administrador al dominio de Active Directory, incluida la capacidad de crear usuarios, grupos y unidades organizacionales (UO)
- Un rango de IP de /28 CIDR sin usar en la VPC en la que se implementan los controladores de dominio de Active Directory. Debes usar este rango de IP para configurar el Acceso a VPC sin servidores
- Una subred en la que se implementan las instancias de Windows La subred se debe configurar para usar el Acceso privado a Google.
Si usas un controlador de dominio autoadministrado, también necesitarás lo siguiente:
- Una zona de reenvío de DNS privado que reenvíe las consultas de DNS a los controladores de dominio de Active Directory
Implementa este enfoque
En un entorno local, puedes usar los archivos de respuesta (unattend.xml
) y la personalización de JoinDomain
para unir de forma automática computadoras nuevas a un dominio. Aunque puedes usar el mismo proceso en Google Cloud, este enfoque tiene varias limitaciones:
- Para usar un archivo
unattend.xml
personalizado, debes mantener una imagen de Compute Engine personalizada. Mantener una imagen personalizada al día mediante las actualizaciones de Windows requiere un mantenimiento continuo o un trabajo inicial para configurar la automatización. A menos que necesites mantener una imagen personalizada por otros motivos, puede que este esfuerzo adicional no se justifique. - Usar la personalización de
JoinDomain
vincula una imagen con un solo dominio de Active Directory, ya que el nombre del dominio debe especificarse enunattend.xml
. Si mantienes varios dominios o bosques de Active Directory (por ejemplo, para entornos de prueba y producción independientes), es posible que debas mantener varias imágenes personalizadas en cada dominio. - Para unir una computadora de Windows a un dominio, se requieren credenciales de usuario que tengan permisos a fin de crear un objeto de computadora en el directorio. Si usas la personalización de
JoinDomain
enunattend.xml
, debes incorporar estas credenciales como texto simple enunattend.xml
. Estas credenciales incorporadas pueden convertir la imagen en un objetivo potencial para los atacantes. Si bien puedes controlar el acceso a la imagen mediante la configuración de permisos de administración de identidades y accesos (IAM) adecuados, la administración de acceso a una imagen personalizada agrega complejidad innecesaria.
El enfoque de este documento no usa archivos de respuesta y, por lo tanto, no requiere imágenes preparadas de forma especial. En su lugar, usas el siguiente scriptlet sysprep specialize cuando creas una instancia de VM:
iex((New-Object System.Net.WebClient).DownloadString('https://DOMAIN'))
El scriptlet sysprep specialize inicia un proceso que se ilustra en el siguiente diagrama.
El proceso funciona de la siguiente manera:
- Después de crear una instancia de VM, Windows se inicia por primera vez. Como parte del pase de configuración especializado, Windows ejecuta el scriptlet sysprep specialize. El scriptlet specialize invoca la app de Cloud Run de
register-computer
y descarga una secuencia de comandos de PowerShell que controla el proceso de unión de dominios. - Windows invoca la secuencia de comandos de PowerShell que se descargó.
- La secuencia de comandos de PowerShell llama al servidor de metadatos para obtener un token de ID que identifica la instancia de VM de forma segura.
- La secuencia de comandos vuelve a llamar a la app
register-computer
y pasa el token de ID para autenticarse. - La app valida el token de ID y extrae el nombre, la zona y el ID del proyecto de Google Cloud de la instancia de VM.
- La app verifica que el dominio de Active Directory esté configurado para permitir que las instancias de VM del proyecto determinado se unan al dominio. Para completar esta verificación, la app localiza a un controlador de dominio de Active Directory y se conecta a él para buscar una unidad organizacional (UO) cuyo nombre coincida con el ID del proyecto de Google Cloud del token de ID. Si se encuentra una UO que coincide, las instancias de VM del proyecto están autorizadas a unirse al dominio de Active Directory en la UO determinada.
- La app verifica que el proyecto de Google Cloud esté configurado para permitir que las instancias de VM se unan a Active Directory. Para completar esta verificación, la app verifica si puede acceder a la instancia de VM con la API de Compute Engine.
- Si todas las verificaciones se aprueban de forma correcta, la app prepara por adelantado una cuenta de computadora en Active Directory. La aplicación guarda el nombre, la zona y el ID de la instancia de VM como atributos en el objeto de cuenta de computadora para que pueda asociarse con la instancia de VM.
- Mediante el protocolo de establecimiento de contraseñas de Kerberos, la app asigna una contraseña aleatoria a la cuenta de computadora.
- El nombre y la contraseña de la computadora se devuelven a la instancia de Windows a través de un canal protegido por TLS.
- Con la cuenta de computadora preparada por adelantado, la secuencia de comandos de PowerShell une la computadora al dominio.
- Una vez que se completa la fase de configuración de specialize, la máquina se reinicia.
En el resto de este procedimiento, se explican los pasos necesarios para configurar la unión automatizada a dominios.
Prepara el dominio de Active Directory
Primero, prepara tu dominio de Active Directory. Para completar este paso, necesitas una máquina que tenga acceso de administrador al dominio de Active Directory.
Limita quién puede unir computadoras al dominio (opcional)
Se recomienda que restrinjas quién puede unir computadoras al dominio. De forma predeterminada, la configuración del objeto de directiva de grupo (GPO) para la directiva predeterminada de controladores de dominio otorga el derecho de usuario de Add workstations to domain
a todos los usuarios autenticados.
Cualquier usuario con ese derecho de usuario puede unir computadoras al dominio. Debido a que automatizas el proceso de unión de computadoras al dominio de Active Directory, otorgar este nivel de acceso de forma universal es un riesgo de seguridad innecesario.
Para limitar quién puede unir computadoras al dominio de Active Directory, cambia la configuración predeterminada del GPO de la directiva predeterminada de controladores de dominio:
- Con un cliente de RDP, accede a una máquina que tenga acceso de administrador a tu dominio de Active Directory.
- Abre la Consola de administración de directivas de grupo (GPMC).
- Ve a Bosque > Dominios > domain-name > Objetos de directiva de grupo, en el que domain-name es el nombre de tu dominio de Active Directory.
- Haz clic con el botón derecho en Directiva predeterminada de controlador de dominio y haz clic en Editar.
- En la consola del Editor de administración de directivas de grupo, ve a Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Directivas locales > Asignación de derechos de usuario.
- Haz doble clic en Agregar estaciones de trabajo al dominio.
- En Propiedades, quita Usuarios autenticados de la lista.
- Para permitir que los administradores se unan al dominio de forma manual (opcional), haz clic en Agregar usuario o grupo y agrega un grupo administrativo a la lista.
- Haz clic en Aceptar.
Ahora puedes cerrar la consola del editor de administración de políticas de grupo y la GPMC.
Inicializa una estructura de directorios
Ahora crearás una UO que funcione como un contenedor para todas las UO específicas del proyecto:
- Con un cliente de RDP, accede a una máquina que tenga acceso de administrador a tu dominio de Active Directory.
- Abre una sesión elevada de PowerShell.
Cree una nueva unidad organizacional:
$ParentOrgUnitPath = (Get-ADDomain).ComputersContainer $ProjectsOrgUnitPath = New-ADOrganizationalUnit ` -Name 'Projects' ` -Path $ParentOrgUnitPath ` -PassThru
Crea una cuenta de usuario de Active Directory
Para acceder a Active Directory y preparar por adelantado las cuentas de computadora, la app register-computer
necesita una cuenta de usuario de Active Directory:
Crea una cuenta de usuario de Active Directory llamada
register-computer
, asígnale una contraseña aleatoria y colócala en la UOProjects
:# Generate a random password $Password = [Guid]::NewGuid().ToString()+"-"+[Guid]::NewGuid().ToString() # Create user $UpnSuffix = (Get-ADDomain).DNSRoot $RegisterComputerUser = New-ADUser ` -Name "register-computer Cloud Run app" ` -GivenName "Register" ` -Surname "Computer" ` -Path $ProjectsOrgUnitPath ` -SamAccountName "register-computer" ` -UserPrincipalName "register-computer@$UpnSuffix" ` -AccountPassword (ConvertTo-SecureString "$Password" -AsPlainText -Force) ` -PasswordNeverExpires $True ` -Enabled $True ` -PassThru
Otorga a la cuenta
register-computer
el conjunto mínimo de permisos necesarios para administrar grupos y cuentas de computadora en las UO secundarias y la UOProjects
:$AcesForContainerAndDescendents = @( "CCDC;Computer", # Create/delete computers "CCDC;Group" # Create/delete users ) $AcesForDescendents = @( "LC;;Computer" , # List child objects "RC;;Computer" , # Read security information "WD;;Computer" , # Change security information "WP;;Computer" , # Write properties "RP;;Computer" , # Read properties "CA;Reset Password;Computer", # ... "CA;Change Password;Computer", # ... "WS;Validated write to service principal name;Computer", "WS;Validated write to DNS host name;Computer", "LC;;Group", # List child objects "RC;;Group", # Read security information "WD;;Group", # Change security information "WP;;Group", # Write properties "RP;;Group" # Read properties ) $AcesForContainerAndDescendents | % { dsacls.exe $ProjectsOrgUnitPath /G "${RegisterComputerUser}:${_}" /I:T | Out-Null } $AcesForDescendents | % { dsacls.exe $ProjectsOrgUnitPath /G "${RegisterComputerUser}:${_}" /I:S | Out-Null }
Este comando puede tardar unos minutos en completarse.
Otorga permiso a la cuenta
register-computer
para borrar registros DNS:Microsoft AD administrado
Add-ADGroupMember -Identity "Cloud Service DNS Administrators" -Members ${RegisterComputerUser}
Dominio autoadministrado
$DnsPartition=(Get-ADDomain).SubordinateReferences | Where-Object {$_.StartsWith('DC=DomainDnsZones')} $DnsContainer="DC=$((Get-ADDomain).DNSRoot),CN=MicrosoftDNS,$DnsPartition" dsacls $DnsContainer /G "${RegisterComputerUser}:SD" /I:S
Revela la ruta de acceso de la UO
Projects
y la contraseña generada de la cuenta de usuarioregister-computer
de Active Directory. Anota los valores porque los necesitarás más adelante.Write-Host "Password: $Password" Write-Host "Projects OU: $ProjectsOrgUnitPath"
Prepara el proyecto de Google Cloud
Ahora configura tu proyecto de dominio:
- Si usas Microsoft AD administrado, el proyecto de tu dominio es el proyecto en el que implementaste Microsoft AD administrado.
- Si usas Active Directory autoadministrado, el proyecto de tu dominio es el que ejecuta los controladores de dominio de Active Directory. En el caso de una VPC compartida, este proyecto debe ser el mismo que el proyecto host de VPC.
Puedes usar este proyecto de dominio para hacer lo siguiente:
- Crea un secreto de Secret Manager que contenga la contraseña de la cuenta de usuario
register-computer
de Active Directory. - Implementa la app de
register-computer
. - Configurar Cloud Scheduler para que active la limpieza de las cuentas de computadora inactivas
Te recomendamos que otorgues acceso al proyecto de dominio con el privilegio mínimo necesario.
Crea un secreto de Secret Manager
En la consola de Google Cloud, abre Cloud Shell.
Inicia PowerShell:
pwsh
Inicializa la siguiente variable y reemplaza
domain-project-id
por el ID de tu proyecto de dominio:$DomainProjectId = "
domain-project-id
"Configura el proyecto del dominio como el proyecto predeterminado:
& gcloud config set project $DomainProjectId
Habilita la API de Secret Manager:
& gcloud services enable secretmanager.googleapis.com
Ingresa la contraseña de la cuenta de usuario
register-computer
de Active Directory y almacénala en un secreto de Secret Manager:$RegisterComputerCredential = (Get-Credential -Credential 'register-computer') $TempFile = New-TemporaryFile Set-Content $TempFile $($RegisterComputerCredential.GetNetworkCredential().Password) -NoNewLine & gcloud secrets create ad-password --data-file $TempFile Remove-Item $TempFile
Otorga acceso a Kerberos y LDAP
Para administrar las uniones de dominios, la app de register-computer
accede a los controladores de dominio con los siguientes protocolos:
- LDAP (TCP/389) o LDAPS (TCP/636)
- Kerberos (UDP/88, TCP/88)
Cambio de contraseña de Kerberos (UDP/464, TCP/464)
Microsoft AD administrado
No es necesario configurar ninguna regla de firewall.
Dominio autoadministrado
Crea una regla de firewall que permita el acceso a tus controladores de dominio.
Puedes aplicar la regla según una etiqueta de red que hayas asignado a los controladores de dominio, o bien puedes aplicarla mediante una cuenta de servicio.
Por etiqueta de red
& gcloud compute firewall-rules create allow-adkrb-from-serverless-to-dc ` --direction INGRESS ` --action allow ` --rules udp:88,tcp:88,tcp:389,tcp:636,udp:464,tcp:464 ` --source-ranges $ServerlessIpRange ` --target-tags dc-tag ` --network $VpcName ` --project vpc-project-id ` --priority 10000
Reemplaza los siguientes elementos:
dc-tag
: Es la etiqueta de red asignada a las VM del controlador de dominio.vpc-project-id
: Es el ID del proyecto en el que está definida la VPC. Si usas una VPC compartida, usa el proyecto host de VPC; de lo contrario, usa el ID del proyecto del dominio.
Por cuenta de servicio
& gcloud compute firewall-rules create allow-adkrb-from-serverless-to-dc ` --direction INGRESS ` --action allow ` --rules udp:88,tcp:88,tcp:389,tcp:636,udp:464,tcp:464 ` --source-ranges $ServerlessIpRange ` --target-service-accounts dc-sa ` --network $VpcName ` --project vpc-project-id ` --priority 10000
Reemplaza los siguientes elementos:
dc-sa
: Es la dirección de correo electrónico de la cuenta de servicio que usan las VM del controlador de dominio.vpc-project-id
: Es el ID del proyecto en el que está definida la VPC. Si usas una VPC compartida, usa el proyecto host de VPC; de lo contrario, usa el ID del proyecto del dominio.
Implementa la app de Cloud Run
Ahora configura Cloud Build para implementar la app register-computer
en Cloud Run:
En Cloud Shell, clona el repositorio de GitHub:
& git clone https://github.com/GoogleCloudPlatform/gce-automated-ad-join.git cd gce-automated-ad-join/ad-joining
Inicializa las siguientes variables:
$ServerlessRegion = "
serverless-region
" $VpcName = "vpc-name
" $VpcSubnet = "subnet-name
" $AdDomain = "dns-domain-name
" $AdNetbiosDomain = "netbios-domain-name
" $ProjectsOrgUnitPath = "projects-ou-distinguished-name
"Reemplaza lo siguiente:
serverless-region
: Es la región en la que se implementará la app deregister-computer
. La región no tiene que ser la misma que aquella en la que planeas implementar instancias de VM.vpc-name
: Es el nombre de la red de VPC que contiene los controladores de dominio de Active Directory.subnet-name
: Es la subred devpc-name
que se usará para el acceso directo a la VPC. La subred debe estar en la misma región queserverless-region
.dns-domain-name
: Es el nombre de dominio de DNS del dominio de Active Directory.netbios-domain-name
: Es el nombre de NetBIOS del dominio de Active Directory.projects-ou-distinguished-name
: Es el nombre distinguido de la UOProjects
.
Habilita las API de Cloud Run y Cloud Build.
& gcloud services enable run.googleapis.com cloudbuild.googleapis.com
Crea una cuenta de servicio
register-computer-app
para la aplicación de Cloud Run:& gcloud iam service-accounts create register-computer-app ` --display-name="register computer Cloud Run app"
Crea una cuenta de servicio
build-service
para ejecutar activadores de Cloud Build:& gcloud iam service-accounts create build-service ` --display-name="Cloud Build build agent"
Permite que la cuenta de servicio de Cloud Run lea el secreto que contiene la contraseña de Active Directory:
& gcloud secrets add-iam-policy-binding ad-password ` --member "serviceAccount:register-computer-app@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/secretmanager.secretAccessor"
Otorga a Cloud Build los permisos necesarios para implementar en Cloud Run:
$DomainProjectNumber = (gcloud projects describe $DomainProjectId --format='value(projectNumber)') & gcloud iam service-accounts add-iam-policy-binding register-computer-app@$DomainProjectId.iam.gserviceaccount.com ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/iam.serviceAccountUser" & gcloud projects add-iam-policy-binding $DomainProjectId ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role roles/cloudbuild.builds.builder & gcloud projects add-iam-policy-binding $DomainProjectId ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role roles/run.admin
Usa el archivo
cloudbuild.yaml
como una plantilla para crear una configuración de compilación de Cloud Run personalizada que coincida con tu entorno:$Build = (Get-Content cloudbuild.yaml) $Build = $Build.Replace('__SERVERLESS_REGION__', "$ServerlessRegion") $Build = $Build.Replace('__PROJECTS_DN__', "$ProjectsOrgUnitPath") $Build = $Build.Replace('__AD_DOMAIN__', "$AdDomain") $Build = $Build.Replace('__AD_NETBIOS_DOMAIN__', "$AdNetbiosDomain") $Build = $Build.Replace('__SERVICE_ACCOUNT_EMAIL__', "register-computer-app@$DomainProjectId.iam.gserviceaccount.com") $Build = $Build.Replace('__SERVERLESS_NETWORK__', "$VpcName") $Build = $Build.Replace('__SERVERLESS_SUBNET__', "$VpcSubnet") $Build | Set-Content .\cloudbuild.hydrated.yaml
Compila la app y, luego, impleméntala en Cloud Run:
& gcloud builds submit . ` --config cloudbuild.hydrated.yaml ` --substitutions _IMAGE_TAG=$(git rev-parse --short HEAD) ` --service-account "projects/$DomainProjectId/serviceAccounts/build-service@$DomainProjectId.iam.gserviceaccount.com" ` --default-buckets-behavior regional-user-owned-bucket
La implementación puede tomar unos minutos en completarse.
Determina la URL de la aplicación de Cloud Run:
$RegisterUrl = (gcloud run services describe register-computer ` --platform managed ` --region $ServerlessRegion ` --format=value`(status.url`)) Write-Host $RegisterUrl
Anota la URL. La necesitarás cuando crees una instancia de VM que se deba unir a Active Directory.
Invoca la app de Cloud Run para verificar que la implementación funcionó:
Invoke-RestMethod $RegisterUrl
Se muestra una secuencia de comandos de PowerShell. La VM ejecuta esta secuencia de comandos durante la fase de specialize que la une al dominio.
Habilita un proyecto para la unión automática de dominios
La app de register-computer
no permite que las instancias de VM se unan a un dominio de Active Directory, a menos que el proyecto de VM esté habilitado para la unión automática a dominios. Esta medida de seguridad ayuda a evitar que las VM que están conectadas a proyectos no autorizados accedan al dominio.
A fin de habilitar un proyecto para la unión automática a dominios, haz lo siguiente:
- Crea una UO en Active Directory cuyo nombre coincida con el ID de tu proyecto de Google Cloud.
- Otorga a la app de
register-computer
acceso al proyecto de Google Cloud.
Primero, crea la UO:
- Con un cliente de RDP, accede a una máquina que tenga acceso de administrador a tu dominio de Active Directory.
- En el complemento de Usuarios y computadoras de Active Directory de MMC, ve a la UO
Projects
. - Haz clic con el botón derecho en la UO y selecciona Nuevo > Unidad organizacional.
- En el cuadro de diálogo Objeto nuevo, ingresa el ID del proyecto de Google Cloud en el que se implementarán las VM.
- Haz clic en Aceptar.
A continuación, otórgale a la app de register-computer
acceso al proyecto de Google Cloud:
En Cloud Shell, inicia PowerShell:
pwsh
Inicializa las siguientes variables:
$ProjectId = "
project-id
" $DomainProjectId = "domain-project-id
"Reemplazar
project-id
con el ID del proyecto de Google Cloud en el que se implementarán tus VMdomain-project-id
con el ID de tu proyecto de dominio
Otorga a la cuenta de servicio
register-computer-app
la funciónCompute Viewer
en el proyecto:& gcloud projects add-iam-policy-binding $ProjectId ` --member "serviceAccount:register-computer-app@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/compute.viewer"
El proyecto ahora está listo para admitir la unión automática a dominios.
Prueba la unión a dominios
Ahora puedes verificar que la configuración funcione correctamente:
- Crea una sola instancia de VM que se una automáticamente al dominio de Active Directory
- Crea un grupo de instancias administrado de instancias de VM que se unan automáticamente al dominio de Active Directory
Crea una instancia de VM única y únete a ella
Crea una instancia de VM que se una automáticamente al dominio de Active Directory:
Regresa a la sesión de PowerShell en Cloud Shell y, luego, inicializa las siguientes variables:
$Region = "vpc-region-to-deploy-vm" $Zone = "zone-to-deploy-vm" $Subnet = "vpc-subnet-to-deploy-vm" $ServerlessRegion = "
serverless-region
"Reemplaza lo siguiente:
vpc-region-to-deploy-vm
: Es la región en la que se implementará la instancia de VM.vpc-subnet-to-deploy-vm
: Es la subred en la que se implementará la instancia de VM.zone-to-deploy-vm
: Es la zona en la que se implementará la instancia de VM.serverless-region
: la región en la que implementaste la app de Cloud Run.
Configura el proyecto y la zona predeterminados:
& gcloud config set project $ProjectId & gcloud config set compute/zone $Zone
Busca nuevamente la URL de la aplicación de Cloud Run:
$RegisterUrl = (gcloud run services describe register-computer ` --platform managed ` --region $ServerlessRegion ` --format value`(status.url`) ` --project $DomainProjectId)
Crea una instancia mediante el scriptlet specialize que hace que la VM se una al dominio:
VPC compartida
$VpchostProjectId = (gcloud compute shared-vpc get-host-project $ProjectId --format=value`(name`)) & gcloud compute instances create join-01 ` --image-family windows-2019-core ` --image-project windows-cloud ` --machine-type n1-standard-2 ` --no-address ` --subnet projects/$VpchostProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
VPC independiente
& gcloud compute instances create join-01 ` --image-family=windows-2019-core ` --image-project=windows-cloud ` --machine-type=n1-standard-2 ` --no-address ` --subnet $Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Si deseas usar un nombre de host personalizado, agrega un parámetro
--hostname
al comando.Si usas una versión de Windows Server anterior a Windows Server 2019, TLS 1.2 podría inhabilitarse de forma predeterminada, lo que puede provocar que falle el scriptlet especializado. Para habilitar TLS 1.2, usa el siguiente scriptlet:
[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))
Supervisa el proceso de inicio:
& gcloud compute instances tail-serial-port-output join-01
Después de aproximadamente un minuto, la máquina se unirá al dominio de Active Directory. El resultado es similar a este:
Domain : corp.example.com DomainController : dc-01.corp.example.com. OrgUnitPath : OU=test-project-123,OU=Projects,DC=corp,DC=example,DC=com WARNING: The changes will take effect after you restart the computer Computer successfully joined to domain
Para dejar de observar el proceso de inicio, presiona
CTRL+C
.
Verifica que una VM esté unida a Active Directory
- Con un cliente de RDP, accede a una máquina que tenga acceso de administrador a tu dominio de Active Directory.
- Abre el complemento Usuarios y computadoras de Active Directory de MMC.
- En el menú, asegúrate de que la opción Ver > Funciones avanzadas esté habilitada.
- Ve a la UO que tiene el nombre del ID del proyecto de Google Cloud en el que creaste una instancia de VM.
- Haz doble clic en la cuenta
join-01
. En el cuadro de diálogo Propiedades, haz clic en la pestaña Editor de atributos.
La cuenta de computadora está anotada con atributos LDAP adicionales. Estos atributos te permiten realizar un seguimiento de la asociación entre el objeto de computadora y la instancia de Compute Engine.
Verifica que la lista contenga los siguientes atributos y valores de LDAP.
Atributo de LDAP Valor msDS-cloudExtensionAttribute1
ID del proyecto de Google Cloud msDS-cloudExtensionAttribute2
Zona de Compute Engine msDS-cloudExtensionAttribute3
Nombre de la instancia de Compute Engine Los atributos
msDS-cloudExtensionAttribute
son atributos de uso general y no los usa Active Directory.
Diagnostica errores
Si tu instancia de VM no pudo unirse al dominio, verifica el registro de la aplicación register-computer
:
En la consola de Google Cloud, ve a Cloud Run.
Haz clic en la app de
register-computer
.En el menú, haz clic en Registros.
Borra la instancia
Una vez que verifiques que la instancia de VM se unió al dominio de Active Directory, bórrala.
Borra la instancia:
& gcloud compute instances delete join-01 --quiet
Crea un grupo de instancias administrado y únelo al dominio
También puedes verificar que las instancias de un MIG puedan unirse de forma automática al dominio.
Para crear una plantilla de instancias, pasa la secuencia de comandos de specialize que hace que la VM se una al dominio:
VPC compartida
$VpchostProjectId = (gcloud compute shared-vpc get-host-project $ProjectId --format=value`(name`)) & gcloud compute instance-templates create ad-2019core-n1-std-2 ` --image-family windows-2019-core ` --image-project windows-cloud ` --no-address ` --machine-type n1-standard-2 ` --subnet projects/$VpchostProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
VPC independiente
& gcloud compute instance-templates create ad-2019core-n1-std-2 ` --image-family windows-2019-core ` --image-project windows-cloud ` --no-address ` --machine-type n1-standard-2 ` --subnet projects/$ProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Crea un grupo de instancias administrado que use la plantilla de instancias:
& gcloud compute instance-groups managed create group-01 ` --template ad-2019core-n1-std-2 ` --size=3
Espera unos minutos y utiliza el complemento de Usuarios y computadoras de Active Directory de MMC para verificar que se hayan creado cuatro objetos nuevos en Active Directory:
- 3 cuentas de computadora que corresponden a las 3 instancias de VM del grupo de instancias administrado.
- 1 grupo llamado
group-01
que contiene las 3 cuentas de computadora. Si planeas usar cuentas de servicio administrado grupales (gMSA), puedes usar este grupo para otorgar acceso al gMSA.
Una vez que verifiques que las instancias de VM de los MIG pueden unirse al dominio de Active Directory, sigue estos pasos para borrar el grupo administrado y la plantilla de instancias:
En Cloud Shell, borra el grupo de instancias:
& gcloud compute instance-groups managed delete group-01 --quiet
Borra la plantilla de instancias:
& gcloud compute instance-templates delete ad-2019core-n1-std-2 --quiet
Programa la limpieza de las cuentas de computadora inactivas
Automatizar el proceso de unión de computadoras al dominio reduce el esfuerzo de configurar servidores nuevos y te permite usar servidores unidos al dominio en grupos de instancias administrados. Sin embargo, con el tiempo, las cuentas de computadora inactivas pueden acumularse en el dominio.
Para evitar esta acumulación, te recomendamos que configures la app de register-computer
para analizar de forma periódica el dominio de Active Directory con el fin de buscar y quitar cuentas inactivas y sus registros DNS asociados de forma automática.
La app de register-computer
puede usar los atributos msDS-cloudExtensionAttribute
de las cuentas de computadora para identificar qué cuentas de computadora están inactivas. Estos atributos contienen el proyecto, la zona y el nombre de la instancia de VM correspondiente en Compute Engine. Para cada cuenta de computadora, la app puede verificar si la instancia de VM correspondiente aún está disponible. Si no es así, la cuenta de computadora se considera inactiva y se quita.
Para activar la limpieza de cuentas de computadora, debes invocar el extremo /cleanup
de la app de Cloud Run. Para evitar que usuarios no autorizados activen una limpieza, esta solicitud se debe autenticar mediante la cuenta de servicio register-computer-app
.
Configura Cloud Scheduler
En los siguientes pasos, se muestra cómo configurar Cloud Scheduler junto con Pub/Sub para activar automáticamente una limpieza cada 24 horas:
En Cloud Shell, habilita la API de Cloud Scheduler en el proyecto del dominio:
& gcloud services enable cloudscheduler.googleapis.com
Configura
AppEngineLocation
en una ubicación de App Engine válida en la que deseas implementar Cloud Scheduler:$AppEngineLocation = "
location
"Reemplaza
location
por la región de App Engine que seleccionaste para los recursos de VPC, por ejemplo,us-central
. Si esa región no está disponible como ubicación de App Engine, elige una ubicación que esté geográficamente cerca de ti. Para obtener más información, consulta Regiones y zonas.Inicializa App Engine:
& gcloud app create --region $AppEngineLocation --project $DomainProjectId
Crea un trabajo de Cloud Scheduler:
& gcloud scheduler jobs create http cleanup-computer-accounts ` --schedule "every 24 hours" ` --uri "$RegisterUrl/cleanup" ` --oidc-service-account-email register-computer-app@$DomainProjectId.iam.gserviceaccount.com ` --oidc-token-audience "$RegisterUrl/" ` --project $DomainProjectId
Este trabajo llama a la app de
register-computer
una vez cada 24 horas y usa la cuenta de servicioregister-computer-app
para la autenticación.
Activa una limpieza
Para verificar la configuración de limpieza de cuentas de computadoras inactivas, puedes activar de forma manual el trabajo de Cloud Scheduler.
En la consola de Google Cloud ve a Cloud Scheduler.
En el trabajo
cleanup-computer-accounts
que creaste, haz clic en Ejecutar ahora.Después de unos segundos, en la columna Resultado, se muestra Finalizado, lo que indica que la limpieza se completó de forma correcta. Si la columna de resultados no se actualiza de manera automática en unos segundos, haz clic en el botón Actualizar.
Para obtener más detalles sobre qué cuentas se quitaron, consulta los registros de la app de register-computer
.
En la consola de Google Cloud, ve a Cloud Run.
Haz clic en la app de
register-computer
.En el menú, haz clic en Registros.
Las entradas de registro indican que las cuentas de computadora de las instancias de VM que usaste para probar la unión a dominios se identificaron como inactivas y se quitaron.
Limpia
Si usas este documento como modelo de referencia para otras arquitecturas y implementaciones de referencia, lee los otros documentos para saber cuándo ejecutar los pasos de limpieza.
Si no deseas conservar la configuración de Google Cloud que se usó en este documento, puedes revertirla mediante los siguientes pasos:
En Cloud Shell, borra el trabajo de Cloud Scheduler:
& gcloud scheduler jobs delete cleanup-computer-accounts ` --project $DomainProjectId
Borra la app de Cloud Run:
& gcloud run services delete register-computer ` --platform managed ` --project $DomainProjectId ` --region $ServerlessRegion
Borra el secreto de Secret Manager:
gcloud secrets delete ad-password --project $DomainProjectId
Borra la regla de firewall para el acceso de LDAP y Kerberos:
gcloud compute firewall-rules delete allow-adkrb-from-serverless-to-dc --project=
vpc-project-id
Reemplaza
vpc-project-id
por el ID del proyecto en el que está definida la VPC. Si usas una VPC compartida, usa el proyecto host de VPC; de lo contrario, usa el ID del proyecto del dominio.
Revierte los cambios de Active Directory
- Con un cliente de RDP, accede a una máquina que tenga acceso de administrador al dominio de Active Directory.
- En el complemento de Usuarios y computadoras de Active Directory de MMC, ve a la UO
Projects
. - Borra la cuenta de usuario
register-computer
de Active Directory. - Borra la UO que creaste para probar la unión automatizada de dominios.
¿Qué sigue?
- Para unir VMs de Windows a un dominio de Microsoft AD administrado mediante la unión automatizada de dominios, consulta Une una VM de Windows automáticamente a un dominio.
- Revisa nuestras prácticas recomendadas para implementar un bosque de recursos de Active Directory en Google Cloud.
- Para obtener más información sobre las arquitecturas de referencia, los diagramas y las prácticas recomendadas, explora Cloud Architecture Center.