9
votes

Avertissement concernant les modifications interrompues dans l'applet de commande 'Get-AzKeyVaultSecret' SecretValueText obsolète Az4.6.1

J'ai mis à niveau Az Powershell vers la version 4.6.1 aujourd'hui et j'ai commencé à voir l'avertissement ci-dessous. La question que je me pose est ce que je suis censé faire à propos de cet avertissement? Je pourrais couper l'avertissement mais cela ne m'aiderait pas du tout à me préparer à ce changement radical. J'ai vérifié les documents Microsoft Az 4.6.1 et ils me disent que je devrais toujours utiliser SecretValueText et ne fournir aucun avertissement similaire concernant la dépréciation ou tout autre moyen d'obtenir la valeur secrète. Alors, quel est mon chemin de mise à jour pour PowerShell qui lit les secrets KeyVault à l'aide de SecretValueText?

$secret = Get-AzKeyVaultSecret -VaultName 'Contoso' -Name 'ITSecret'
Write-Host "Secret Value is:" $secret.SecretValueText

Secret Value is: P@ssw0rd

Voici l'exemple actuel dans les documents Microsoft :

WARNING: Breaking changes in the cmdlet 'Get-AzKeyVaultSecret' :
WARNING:  - "The output type 'Microsoft.Azure.Commands.KeyVault.Models.PSKeyVaultSecret' is changing" 
- The following properties in the output type are being deprecated :
 'SecretValueText'
WARNING: Note :The change is expected to take effect from the version :  '3.0.0'
WARNING:  - "The output type 'Microsoft.Azure.Commands.KeyVault.Models.PSDeletedKeyVaultSecret' is changing"
 - The following properties in the output type are being deprecated :
 'SecretValueText'
WARNING: Note :The change is expected to take effect from the version :  '3.0.0'
WARNING: NOTE : Go to https://aka.ms/azps-changewarnings for steps to suppress this breaking change warning, and other information on breaking changes in Azure PowerShell.


2 commentaires

Merci d'avoir publié la solution de contournement, mais je ne suis pas sûr que ce soit une solution. Il semble que cela fonctionnerait mais n'est pas non plus officiellement pris en charge. J'ai donc peur que cela ne fonctionne aussi avec la v3.0.0.


Je ne pense pas qu'il sera cassé, et mon expérience vous dit que tout dans Azure ne sera pas documenté, même si cela se brise, cela devrait être une nouvelle méthode pour obtenir la valeur secrète, sinon cette commande n'aura aucun sens.


4 Réponses :


6
votes

Eh bien, même si SecretValueText sera obsolète, il existe un moyen qui fonctionnera toujours.

Utilisez simplement $secret.SecretValue , c'est un System.Security.SecureString , nous avons juste besoin de le convertir en String , le $Password ci-dessous est ce que vous voulez.

$secret = Get-AzKeyVaultSecret -VaultName joykeyvault -Name mySecret123
$SecurePassword = $secret.SecretValue
$Password = [System.Net.NetworkCredential]::new("", $SecurePassword).Password

entrez la description de l'image ici


0 commentaires

12
votes

Cela peut être fait avec:

Obtenez le secret avec:

$secret = Get-AzKeyVaultSecret -VaultName {YourVaultName} -Name {YourSecret}
$pass = $secret.SecretValue | ConvertFrom-SecureString -AsPlainText

C'est la même chose que $ secret.SecretValueText


1 commentaires

Hmmm intéressant. Il doit s'agir d'un alias non documenté. Joy a également souligné cela. Je reçois toujours l'avertissement de dépression SecretValueText lorsque j'utilise SecretValue. Cela semble être simplement parce que j'ai utilisé Get-AzKeyVaultSecret . Peut-être que vous avez bien compris, mais sans la documentation ou une personne de Microsoft confirmant que je ne suis pas convaincu que SecretValue est une solution à long terme. : S



3
votes

ConvertFrom-SecureString -AsPlainText est pris en charge dans PowerShell 7. ne l'essayez pas sur la version inférieure


1 commentaires

Je peux dire qu'il n'est pas disponible dans la version 5.1



2
votes

La documentation Microsoft a maintenant été mise à jour Cet exemple est tiré de la dernière documentation

$secret = Get-AzKeyVaultSecret -VaultName 'Contoso' -Name 'ITSecret'
$secretValueText = '';
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
    $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
    [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Host "Secret Value is:" $secretValueText

Secret Value is: P@ssw0rd


1 commentaires

Je me demande pourquoi ils n'ont pas simplement regroupé ces appels .net dans la méthode SecretValueText existante. Cela aurait pu éviter le changement de rupture et conserver la syntaxe simple.