App Service証明書のエクスポート方法

Azure



こんにちは!

今日はApp Service証明書について書きます。

先日EAからCSPへのリソース移行を行っていました。

その中でWebサイトがあり、Azureから発行できるSSL証明書を利用していました。
このSSL証明書がApp Service証明書です。

App Service証明書の購入や使い方はAzureのドキュメントをご覧ください。
Azure App Service の SSL 証明書を購入して構成する

この証明書は、Web Apps以外でも利用できます。
サーバーでも、Azure以外でも!

今日(2017/03/07)の段階では、CSPでApp Service証明書の利用はできません。

とりあえず、Web Appsだけ移行して証明書は後から何とかしようということにしました。
これが、後々面倒なことになるのですが…

まず、App Service証明書のエクスポート方法です。
下記ブログがアップされました。
問い合わせをしたらブログ書いてくれました!
Creating a local PFX copy of App Service Certificate


こちらのブログに補足
下記変数のところに日本語を入れています。
この箇所に値を入れておきます。

App Service証明書名:Azureポータルから該当のApp Service証明書を開き名前をコピーします

リソースグループ名:App Service証明書が配置されているリソースグループ名

App Service証明書に権限あるアカウント:App Service証明書を作成したアカウントまたは権限を追加したアカウント
※下記で説明します。

App Service証明書のあるサブスクリプションID:そのサブスクリプションID

キーボルトID・キーボルトシークレット名:リソースエクスプローラーから取得します。
※下記で説明します。



copyasc.ps1


$appServiceCertificateName = "App Service証明書名"
$resourceGroupName = "リソースグループ名"
$azureLoginEmailId = "App Service証明書に権限あるアカウント"
$subscriptionId = "App Service証明書のあるサブスクリプションID"

Login-AzureRmAccount
Set-AzureRmContext -SubscriptionId $subscriptionId

$ascResource = Get-AzureRmResource -ResourceName $appServiceCertificateName -ResourceGroupName $resourceGroupName -ResourceType “Microsoft.CertificateRegistration/certificateOrders” -ApiVersion “2015-08-01”
$keyVaultId = “キーボルトID”
$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”



▼App Service証明書名

ここに表示されている名前





▼リソースグループ名

ここに表示されているリソースグループ名





▼App Service証明書に権限あるアカウント

キーコンテナーのアクセスポリシーにあるアカウントになります。
Azureポータル→キーコンテナー→App Service証明書と同じ名前を開く→アクセスポリシー




ここを開くと権限が付与されているアカウントが表示されます。
通常はここにあるユーザーを利用するか、アカウントを新規追加して使います。
新規追加する場合は、すべての権限を付与すればよいでしょう。


EAからCSPにWeb Appsを移行した後に、このアクセスポリシーを見るとアカウントが乱数の表示になっていました。




これは、移行によってAzure ADとキーコンテナーのテナントが分かれてしまったためです。
キーコンテナーのアカウント情報はAuzre ADと関連しています。

キーコンテナーのテナントを元に戻す必要があります。
下記コマンドでテナントIDを変更します。

PowerShellを開き、元々キーコンテナーがあったサブスクリプションの管理者でAzureに接続します。


Select-AzureRmSubscription -SubscriptionId 'キーコンテナーがあったサブスクリプションID'
$vaultResourceId = (Get-AzureRmKeyVault -VaultName 'キーコンテナー名').ResourceId
$vault = Get-AzureRmResource -ResourceId $vaultResourceId -ExpandProperties
$vault.Properties.TenantId = (Get-AzureRmContext).Tenant.TenantId
$vault.Properties.AccessPolicies = @()
Set-AzureRmResource -ResourceId $vaultResourceId -Properties $vault.Properties

※これを行うと、キーコンテナーのアクセスポリシーがリセットされます。
再度アカウントを追加してください。



▼App Service証明書のあるサブスクリプションID:そのサブスクリプションID

Azureポータル→サブスクリプション→該当のサブスクリプション名を開くとあります。



▼キーボルトID・キーボルトシークレット名

リソースエクスプローラーから取得します。
https://resources.azure.com

上記のURLにアクセスして、App Service証明書のあるサブスクリプション管理者でログインします。

左側のSubscription→App Service証明書のあるサブスクリプション→providers→Microsoft.CertificateRegistration→certificateOrdersを開きます。

ここの赤枠の値を取得して、それぞれ入力します。






これで値の入力はできました。
ローカルにps1を作成して実行します。

おそらくエラーが表示されるかと思います。
エラー箇所はここ
Set-AzureRmKeyVaultAccessPolicy

アクセスポリシーにアカウントを追加するところ
上記で手動追加しているのでエラーは無視して大丈夫です。
これでコマンド実行した場所に証明書ができているはずです。

エクスポートできるようになるまでに2週間ぐらいかかりました…
今後、GUIからエクスポートできるようになると、もっと便利ですね!!



コメント