Azure DevOps Pipeline изменяет разрешения сертификата для приложения Service Fabric

У меня есть конвейер Azure DevOps, который (с помощью сценария Powershell) добавляет сертификат к объекту масштабируемого набора виртуальных машин для приложения Azure Service Fabric.

Сертификат устанавливается правильно, но в приложении служебной фабрики возникает ошибка при попытке запуска с сообщением Internal.Cryptography.CryptoThrowHelper + WindowsCryptographicException: Keyset не существует.

Я немного погуглил и нашел эту страницу: Service Fabric: аутентификация с помощью Azure KeyVault через сертификат: KeySet не существует

что позволило мне вручную решить проблему, связавшись с узлом служебной фабрики и предоставив установленному сертификату разрешения на чтение с учетной записью пользователя NETWORK SERVICE.

Есть ли способ дать установленному сертификату это разрешение через DevOps Pipeline?

См. также:  Необходимость разделения файлов YAML для конвейеров
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. millie

    Вы можете добавить в свой сценарий PowerShell следующее:

    function Set-CertificateReadPermission
    {
     param
     (
        [Parameter(Position=1, Mandatory=$true)]
        $cert ,
    
        [Parameter(Position=2, Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$serviceAccount
     )
    
    
     # Specify the user, the permissions and the permission type
     $permission = "$($serviceAccount)","Read","Allow"
     $accessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission;
    
     # Location of the machine related keys
     $keyPath = "$($env:ProgramData)\Microsoft\Crypto\RSA\MachineKeys\";
     $keyName = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName;
     $keyFullPath = $keyPath + $keyName;
    
     try
     {
        # Get the current acl of the private key
        $acl = (Get-Acl $keyFullPath)
    
        # Add the new ace to the acl of the private key
        $acl.AddAccessRule($accessRule);
    
        # Write back the new acl
        Set-Acl -Path $keyFullPath -AclObject $acl;
     }
     catch
     {
        throw $_;
     }
    }
    
    # Get the certificate, or use a previous variable:
    $cert = Get-ChildItem -Path cert:\LocalMachine\My\EEDEF61D4FF6EDBAAD538BB08CCAADDC3EE28FF
    
    #Call method to set permission on certificate
    Set-CertificateReadPermission $cert "NT AUTHORITY\NETWORK SERVICE"
    
    

    Этот сценарий, похоже, изменяет разрешения для локального компьютера, на котором выполняется сценарий PowerShell, но сценарий PowerShell — это то, что будет выполняться Azure DevOps Pipeline, и он должен влиять на масштабируемый набор виртуальных машин для службы Azure Service Fabric. Есть ли способ сделать это? person millie; 15.09.2020

    Есть несколько способов запустить powershell на масштабируемом наборе. Рекомендуемый Microsoft способ: Расширение пользовательского сценария. Вы также можете использовать сценарий при запуске приложения Service Fabric. person millie; 15.09.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: