title: CngKey Assign permission to machine key
body: <p>I've created a machine wide CngKey (MachineKey=true), but my applications aren't able to access it.</p>
  
  <p>How to I assign permissions to so that my App Pool can access the key? Preferably pragmatically so that I can build it into the installer. </p>
  
  <p>Powershell create script:</p>
  
  <pre><code>[System.Security.Cryptography.CngKeyCreationParameters] $cngKeyParameter =  [System.Security.Cryptography.CngKeyCreationParameters]::new()
      $cngKeyParameter.KeyUsage = [System.Security.Cryptography.CngKeyUsages]::AllUsages
      $cngKeyParameter.ExportPolicy = [System.Security.Cryptography.CngExportPolicies]::AllowPlaintextExport
  
      $cngKeyParameter.Provider = [System.Security.Cryptography.CngProvider]::MicrosoftSoftwareKeyStorageProvider
      $cngKeyParameter.UIPolicy = [System.Security.Cryptography.CngUIPolicy]::new([System.Security.Cryptography.CngUIProtectionLevels]::None)
      $cngKeyParameter.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::MachineKey
  
      #Create Cng Property for Length, set its value and add it to Cng Key Parameter
      [System.Security.Cryptography.CngProperty] $cngProperty = [System.Security.Cryptography.CngProperty]::new($cngPropertyName, [System.BitConverter]::GetBytes(2048), [System.Security.Cryptography.CngPropertyOptions]::None)
      $cngKeyParameter.Parameters.Add($cngProperty)
  
      #Create Cng Key for given $keyName using Rsa Algorithm
      [System.Security.Cryptography.CngKey] $key = [System.Security.Cryptography.CngKey]::Create([System.Security.Cryptography.CngAlgorithm]::Rsa, "MyKey", $cngKeyParameter)
  </code></pre>