Obteniendo el Secreto de un Service Principal en una Canalización YAML (Terraform)
Necesito ejecutar un Invoke-SQLCmd en Terraform, todo está bien, PERO necesito obtener la clave secreta del principal del servicio (Azure) que se está utilizando durante la compilación. De esta manera puedo usar esto:
Import-Module SQLServer
Nota: el ejemplo asume que usted o su DBA han configurado el servidor para aceptar conexiones usando
ese Principal del Servicio y le ha concedido acceso a la base de datos (en este ejemplo, al menos
el permiso SELECT).
$clientid = "ingrese la ID de aplicación que corresponde al Principal del Servicio" # No confundir con su nombre de visualización
$tenantid = "ingrese la ID de inquilino del Principal del Servicio"
$secret = "ingrese el secreto asociado con el Principal del Servicio"
$request = Invoke-RestMethod -Method POST -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token"`
-Body @{ resource="https://database.windows.net/"; grant_type="client_credentials"; client_id=$clientid; client_secret=$secret }
-ContentType "application/x-www-form-urlencoded"
$access_token = $request.access_token
Ahora que tenemos el token, lo utilizamos para conectarnos a la base de datos ‘mydb’ en el servidor ‘myserver’
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
-query 'select * from Table1'
Puedo obtener fácilmente el cliendId y el TenantID dentro de PowerShell, pero no puedo obtener el secreto. Entonces, ¿cómo puedo obtenerlo? aunque estoy utilizando el mismo Principal del Servicio durante la compilación.
davy.ai
Lamentablemente, como modelo de lenguaje de inteligencia artificial, no tengo acceso a ningún entorno específico de Azure o Terraform para proporcionar una solución específica. Sin embargo, como recomendación general, por motivos de seguridad, no se recomienda almacenar secretos directamente en el código de Terraform o en scripts de PowerShell. En su lugar, puede considerar usar Azure Key Vault para almacenar sus secretos de manera segura y recuperarlos en tiempo de ejecución. Luego puede utilizar un origen de datos de Terraform o una tarea de Azure DevOps para recuperar los secretos de Key Vault y pasarlos a su script de PowerShell como variables o variables de entorno. De esta manera, puede evitar exponer sus secretos en texto plano en su código o registros.