1.4K
La codificación de secretos en scripts o configuraciones de aplicaciones está mal vista y presenta riesgos potenciales de seguridad para su organización. Pero almacenar secretos de forma segura y hacerlos compartibles y fácilmente recuperables siempre ha sido un desafío para los desarrolladores y administradores.
Ha habido desarrollos en este frente en los últimos años. En PowerShell, hay varias formas de cifrar secretos, como exportarlos a un XML, guardarlos en el Administrador de credenciales de Windows o usar el Almacén de secretos. Estas son opciones viables de gestión de secretos, pero no producen secretos portátiles o compartibles.
Una excelente alternativa es Azure Key Vault, que ofrece más accesibilidad y control sobre sus certificados y secretos almacenados. Esta publicación explorará cómo almacenar y obtener valor secreto de Azure Key Vault mediante PowerShell.
Requisitos
Preparar los recursos
Antes de que podamos almacenar y recuperar el secreto de Azure Key Vault, primero preparemos que los recursos necesarios estén disponibles.
Conéctese a Azure PowerShell
Para comenzar, puede abrir una sesión de Azure Cloud Shell.
O bien, inicie sesión en la sesión de Az PowerShell en su computadora.
# Connect to Az PowerShell $tenantId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' $subscriptionId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' Connect-AzAccount -Tenant $tenantId -Subscription $subscriptionId
Crear un nuevo grupo de recursos
A continuación, creemos un nuevo grupo de recursos para esta demostración. En este ejemplo, estamos creando un grupo de recursos denominado demo-rg en la ubicación eastus.
# Create a New Resource Group $location = 'eastus' $resourceGroupName="demo-rg" New-AzResourceGroup -Name $resourceGroupName -Location $location
Crear un nuevo almacén de claves
Dentro del nuevo grupo de recursos, vamos a crear el Azure Key Vault llamado bóveda0965.
Nota. El nombre del almacén de claves debe ser único a nivel mundial.
# Create a new key vault $keyVaultName="vault0965" New-AzKeyVault ` -Name $keyVaultName ` -ResourceGroupName $resourceGroupName ` -Location $location
Después de crear Key Vault, puede verificarlo desde Azure Portal.
Almacene y recupere secretos de Azure Key Vault mediante PowerShell
Ahora está listo para almacenar nuevos secretos en Azure Key Vault. Para eso, usaremos el cmdlet Set-AzKeyVaultSecret.
Nota. El cmdlet Set-AzKeyVaultSecret crea una nueva entrada secreta en el almacén de claves. Si el almacén de claves específico ya existe, este cmdlet lo actualizará con una nueva versión.
Por ejemplo, almacenemos un valor de clave secreta de API en el almacén.
$keyVaultName="vault0965" $secretName="vault-demo" $secretValue = ('AYI8Q~fwAwcmxrJbiOfNMel2B.B0mxJwioXFTb51' | ` ConvertTo-SecureString -AsPlainText -Force) $tag = @{ AppId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' DirectoryId = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' } Set-AzKeyVaultSecret ` -VaultName $keyVaultName ` -Name $secretName ` -SecretValue $secretValue ` -Tag $tag
El nuevo secreto se ha creado correctamente. Observe el valor de Versión: muestra la versión actual del secreto. Este valor cambia cada vez que actualiza el secreto.
Nota. Aprenda a conectar Azure Virtual Networks con el emparejamiento de vNet.
Cuando necesite recuperar el secreto de Azure Key Vault y sus valores personalizados, puede ejecutar el cmdlet Get-AzKeyVaultSecret a continuación.
$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name $secretName $secret.SecretValue | ConvertFrom-SecureString -AsPlainText $secret.TagsTable
La siguiente captura de pantalla muestra el valor secreto recuperado y los atributos personalizados.
Uso de Azure Key Vault con el módulo de administración de secretos de PowerShell
Puede registrar Azure Key Vault como proveedor de almacén si también trabaja con el Módulo de administración de secretos de PowerShell.
Para instalar el módulo de administración de secretos, ejecute este comando.
# Install Microsoft.PowerShell.SecretManagement module Install-Module Microsoft.PowerShell.SecretManagement -Repository PSGallery
A continuación, registre el módulo Azure Key Vault (Az.KeyVault) como proveedor del almacén.
# Register the Azure Key Vault Register-SecretVault ` -Name $keyVaultName ` -ModuleName Az.KeyVault ` -VaultParameters @{ AZKVaultName = $keyVaultName; SubscriptionId = $subscriptionId } # List the secret vault Get-SecretVault
Como puede ver a continuación, Azure Key Vault está registrado localmente en la computadora.
En cuyo caso, ahora podemos recuperar el secreto usando el cmdlet Get-Secret de la siguiente manera:
Get-Secret -Vault $keyVaultName -Name $secretName -AsPlainText
Asignación de acceso a Azure Key Vault
Solo el usuario que creó Azure Key Vault puede acceder a él de forma predeterminada. Pero, ¿qué sucede si está trabajando con un equipo y ellos también necesitan acceder a los secretos dentro de la bóveda de claves? Puede compartir el almacén de claves creando una política de acceso.
Si bien puede crear una política de acceso y asignarla a usuarios individuales, tiene más sentido crear una política de acceso para un grupo de seguridad. De esa forma, solo necesita crear una política para un grupo y los miembros del grupo tendrán los mismos permisos de acceso.
Nota. Lea nuestro artículo sobre cómo crear un atributo de usuario personalizado en Azure AD.
Primero, vamos a crear un grupo con seguridad habilitada llamado «Usuarios de Azure Key Vault».
New-AzADGroup -DisplayName 'Azure Key Vault Users' -MailNickname 'AzKeyVaultUsers' -SecurityEnabled
Asegúrese de copiar el valor de Id. Necesitarás esto para el siguiente paso.
Ahora, creemos una política de acceso que otorgue permisos secretos Obtener y Listar al grupo.
Set-AzKeyVaultAccessPolicy ` -VaultName $keyVaultName ` -ObjectId '3596af13-7918-43e3-9a1a-39d66883ff33' ` -PermissionsToSecrets get, list
Si algún usuario que no es miembro del grupo de seguridad recibe el siguiente error al intentar acceder al almacén de claves.
Por último, agregue nuevos miembros al grupo.
Add-AzADGroupMember ` -TargetGroupObjectId '3596af13-7918-43e3-9a1a-39d66883ff33' ` -MemberUserPrincipalName 'azkvuser1@<org>.onmicrosoft.com'
Todos los usuarios que son miembros del grupo pueden obtener valor secreto de Azure Key Vault mediante PowerShell o cualquier otro método.
Conclusión
Azure Key Vault es una de las formas más excelentes de administrar secretos en la nube. Los secretos se pueden compartir con otros mediante políticas de acceso. Además de poder almacenar y recuperar secretos de Azure Key Vault, también puede almacenar y obtener certificados y llaves.
Continúe, explore más y descubra cómo Azure Key Vault puede cambiar la forma en que administra los secretos en sus proyectos.