Аутентификация в Azure с сертификатом от Linux - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь войти в Azure из сценария Powershell Core с модулем Az. Для этого необходимо использовать самозаверяющий сертификат, загруженный в Azure.

Я попытался создать сертификат с помощью:

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem -subj "/C=LV/ST=Some-State/L=LV/O=IT/OU=IT"

и использовать отпечаток пальца для входа в систему, но Powershell выдает мне эту ошибку:

Connect-AzAccount : Unix LocalMachine X509Store is limited to the Root and CertificateAuthority stores.

Не уверен, что это значит.

Проблема похожа на эту проблему https://github.com/Azure/azure-powershell/issues/8658

Но не уверен, как там интерпретировать ответы. Нет опыта работы с сертификатами и ограниченного опыта работы с Linux.

1 Ответ

0 голосов
/ 08 ноября 2019

Чтобы ответить на свой вопрос, я, наконец, кое-что понял. Шаги:

#create certs
openssl req -new -x509 -newkey rsa:2048 -keyout localhost.key -out localhost.cer -days 365 -subj /CN=localhost

#create pfx
openssl pkcs12 -export -out localhost.pfx -inkey localhost.key -in localhost.cer

#You will need to specify some password for it
#Now use the generated cer file and import it in your Azure portal, AzureAD->app registrations->your created SP->Certificates and secrets. Can also use powershell to do this.

#import the PFX to your machines cert store
$StoreName = [System.Security.Cryptography.X509Certificates.StoreName]::My 
$StoreLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser 
$Store = [System.Security.Cryptography.X509Certificates.X509Store]::new($StoreName, $StoreLocation) 
$Flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable 
$Certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new("path to your pfx","the pfx password you specified on step 2",$Flag) 
$Store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) 
$Store.Add($Certificate) 
$Store.Close() 

$tenantId = 'look in your azure portal' 
$appId = 'app id of the service principal you created, look in your azure portal'
$thumbprint = $certificate.thumbprint

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint $thumbprint

Вот и все, вы автоматически неинтерактивно подключитесь к своему клиенту Azure с компьютера Linux или Docker, используя Powershell Core, и сможете выполнять все команды, которые позволяет ваша роль SP. Вы можете повторно использовать файл PFX, просто первый раз вручную, затем разместить его где-нибудь и загрузить его с помощью скрипта, используя curl или аналогичный.

Примечание: я не очень разбираюсь в сертификатах и ​​их последствиях для безопасностивсе это можно было бы использовать на свой страх и риск.

...