2017-02-06 7 views
0

Azureで証明書を購入しました。同じVMで使用します。 .pfxファイルが必要です。Azureから証明書をインポートするには?

私たちは、ほとんどすべてを試してみましたが、私たちは次のエラーを取得しています

"You do not have permission to get the service prinicipal information needed to assign a Key Vault to your certificate. Please login with an account which is either the owner of the subscription or an admin of the Active Directory to configure Key Vault settings."

しかし、我々は...

+0

VM外でssl sertificateを使用することは望ましくありませんが、既に作成済みのVMに割り当てる方法もわかりません。 –

+0

これを行う方法についていくつかのコードを共有できますか?現在提供している情報は、鍵ボールトにアクセスするための十分な権限がないことを示唆しています。オーナーまたは管理者としてログオンしていますか? – Peter

+0

こんにちは@ピーター、管理者として、しかし私はこれを既に見つけたstackoverflow http://nkv.name/screenshots/2017-02-06_175455.png だから私はそれが不可能だと思う:( –

答えて

0

@Sasha、ここに行くために多くの詳細は権限がないていると私は嫌いあなたがすべてを試していることを考えれば明白であると述べるが、エラーメッセージはかなり明確である - 「必要なサービスプリンシパル情報を得る許可を持っていない」

明確にし、確認するためのいくつかの点:

  1. あなたはAzureの「アプリケーションサービスの証明書」を購入しましたか?
  2. 証明書は「発行済み」ステータスですか?
  3. サブスクリプションの所有者としてログインしているか、所有者がサブスクリプションへの管理者アクセスを許可していますか?後者は十分ではない、と私は信じている。
  4. 3段階の検証プロセスを完了しましたか?

すべてを実行した場合、証明書はAzure Key Vaultに保存されます。 Azure Key Vaultを作成する場合、「Azure仮想マシンへのアクセスを有効にする」という高度なアクセスポリシーオプションがあります(画像参照)。そのヘルプ情報には、「Azure仮想マシンが鍵保管庫から秘密として格納された証明書を検索することを許可されているかどうかを指定します。あなたは.PFXファイルをしたいので、以下のように述べ

Enable access to Azure Virtual Machines for deployment

はちょうどそれを行うにはMSDNのブログから抽出したサンプルPowerShellスクリプトです。以下の4つの「$」パラメータに適切な値を入力し、スクリプトをcopyasc.ps1として保存します。スクリプトが実行される

Powershell –ExecutionPolicy Bypass 
.\copyasc.ps1 

たら、あなたは「appservicecertificate.pfx」と呼ばれる、現在のディレクトリに新しいファイルを参照します:

$appServiceCertificateName = "" 
$resourceGroupName = "" 
$azureLoginEmailId = "" 
$subscriptionId = "" 

Login-AzureRmAccount 
Set-AzureRmContext -SubscriptionId $subscriptionId 

$ascResource = Get-AzureRmResource -ResourceName $appServiceCertificateName -ResourceGroupName $resourceGroupName -ResourceType "Microsoft.CertificateRegistration/certificateOrders" -ApiVersion "2015-08-01" 
$keyVaultId = "" 
$keyVaultSecretName = "" 

$certificateProperties=Get-Member -InputObject $ascResource.Properties.certificates[0] -MemberType NoteProperty 
$certificateName = $certificateProperties[0].Name 
$keyVaultId = $ascResource.Properties.certificates[0].$certificateName.KeyVaultId 
$keyVaultSecretName = $ascResource.Properties.certificates[0].$certificateName.KeyVaultSecretName 

$keyVaultIdParts = $keyVaultId.Split("/") 
$keyVaultName = $keyVaultIdParts[$keyVaultIdParts.Length - 1] 
$keyVaultResourceGroupName = $keyVaultIdParts[$keyVaultIdParts.Length - 5] 
Set-AzureRmKeyVaultAccessPolicy -ResourceGroupName $keyVaultResourceGroupName -VaultName $keyVaultName -UserPrincipalName $azureLoginEmailId -PermissionsToSecrets get 
$secret = Get-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretName 
$pfxCertObject=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @([Convert]::FromBase64String($secret.SecretValueText),"", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) 
$pfxPassword = -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 50 | % {[char]$_}) 
$currentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath 
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath 
[io.file]::WriteAllBytes(".\appservicecertificate.pfx", $pfxCertObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $pfxPassword)) 
Write-Host "Created an App Service Certificate copy at: $currentDirectory\appservicecertificate.pfx" 
Write-Warning "For security reasons, do not store the PFX password. Use it directly from the console as required." 
Write-Host "PFX password: $pfxPassword" 

タイプPowerShellコンソールで次のコマンドは、スクリプトを実行します。これはパスワードで保護されたPFXで、PowerShellコンソールには対応するパスワードが表示されます。

+0

あなたは私のヒーローです。どうもありがとうございました! –