こんにちは!
今日は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からエクスポートできるようになると、もっと便利ですね!!
コメント