0

Я создаю Azure Function (размещенную в плане обслуживания приложений), которая будет перечислять активы в моей подписке и что-то делать с ними.Функции Azure & Powershell - не удалось войти в AzureRmAccount с помощью сертификата

У меня есть сайт создан таким образом, что я ожидаю, что это работает, но Login-AzureRmAccount ошибки каждый раз, когда с уведомлением

Login-AzureRmAccount : No certificate was found in the certificate store with thumbprint xxxxxxxx

Вот некоторые важные детали:

Сначала я создать сертификат:

$cert = New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my  -Subject "cn=$appCommonName" ...etc... 
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData()) 

$aNewApp = New-AzureRmADApplication -DisplayName $AzureADApplicationName -HomePage $AppHomePage -IdentifierUris $appIDUri -CertValue $keyValue -EndDate $cert.NotAfter -StartDate $cert.NotBefore 

#export the cert for use future upload to Azure 
$password = ConvertTo-SecureString -String "supersecrettpassword" -Force -AsPlainText 
Export-PfxCertificate -Cert $cert -FilePath "Export-cert.pfx" -Password $password 
Export-Certificate -Type CERT -Cert $cert -FilePath "Export-cert.cer" 

Позже я резерва Моя_служба Principal и дать ему доступ на чтение

$theSvcPrincipal = New-AzureRmADServicePrincipal -ApplicationId $ApplicationId 
$testRole = Get-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $ApplicationId 

Через магию ARM развертывания я в конечном итоге с двумя настройками приложения в веб-сайт, который размещен лазурное функцию: WEBSITE_LOAD_CERTIFICATES со значением * и CertThumbprint со значением отпречаток сертификата, который я» ve загрузил область SSL certificates.

Наконец, после того, как шаблон ARM развернут, я загрузить сертификат, следуя инструкциям из this Stack Overflow post

Учитывая все, что подготовительные работы, я бы ожидать, чтобы это работало в моей функции:

Login-AzureRmAccount -ServicePrincipal -CertificateThumbprint $env:CertThumbprint -ApplicationId $env:ApplicationId -TenantId $env:TenantId 

но когда эта строка выполняется, несмотря на то, что у меня есть сертификат на веб-сайте с соответствующим отпечатком пальца, я получаю ошибку no cert found wiht matching thumbprint.

+0

В сценарии назначения роли вы используете Get-AzureRmRoleAssignment. Чтобы установить роль читателя, я считаю, что командлет для использования - New-AzureRmRoleAssignment. –

+0

Вы правы. Этот фрагмент был несколько выключен - это часть моего кода повтора, ожидая, пока ServicePrincipal будет распространяться по Azure. – Josh

+0

Вам нужно использовать сертификаты? Вот пример, который не требует сертификатов. http://stackoverflow.com/questions/40838619/azure-function-role-like-permissions-to-stop-azure-virtual-machines/40883318#40883318 –

ответ

2

Хорошо, это было немного неловко. Оказывается, что шаблон ARM я использую для предоставления АРР, служба была с помощью Dynamic SKU:

"properties": { 
    "name": "[parameters('hostingPlanName')]", 
    "computeMode": "Dynamic", 
    "sku": "Dynamic" 
} 

вместо стандартного Артикул:

"sku": { 
    "name": "B1", 
    "tier": "Basic", 
    "size": "B1", 
    "family": "B", 
    "capacity": 1 
}, 

После того, как я включил два, я был в состоянии для доступа к хранилищу сертификатов.

Я видел this issue discussed on github, но отклонил его, когда коллега смог получить доступ к сертификату клиента из функционального приложения, размещенного в динамическом плане, после использования веб-интерфейса Azure для его предоставления. Я все еще не могу объяснить, как он смог это сделать, но я видел это своими глазами и вылил шаблоны ARM из своего развертывания, чтобы убедиться, что он использует модель, основанную на потреблении.

+0

Рад слышать, что вы разблокированы! –

Смежные вопросы