你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Add-AzureKeyVaultKey

在密钥保管库中创建密钥或将密钥导入密钥保管库。

警告

截至 2024 年 2 月 29 日,AzureRM PowerShell 模块已正式弃用。 为了确保持续获得支持和更新,建议用户从 AzureRM 迁移到 Az PowerShell 模块。

尽管 AzureRM 模块仍可能正常运行,但它不再维护或受支持,但会根据用户的自由裁量权和风险继续使用任何继续使用模块。 有关过渡到 Az 模块的指导,请参阅我们的迁移资源

语法

Add-AzureKeyVaultKey
   [-VaultName] <String>
   [-Name] <String>
   -Destination <String>
   [-Disable]
   [-KeyOps <String[]>]
   [-Expires <DateTime>]
   [-NotBefore <DateTime>]
   [-Tag <Hashtable>]
   [-Size <Int32>]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Add-AzureKeyVaultKey
   [-VaultName] <String>
   [-Name] <String>
   -KeyFilePath <String>
   [-KeyFilePassword <SecureString>]
   [-Destination <String>]
   [-Disable]
   [-KeyOps <String[]>]
   [-Expires <DateTime>]
   [-NotBefore <DateTime>]
   [-Tag <Hashtable>]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Add-AzureKeyVaultKey
   [-InputObject] <PSKeyVault>
   [-Name] <String>
   -Destination <String>
   [-Disable]
   [-KeyOps <String[]>]
   [-Expires <DateTime>]
   [-NotBefore <DateTime>]
   [-Tag <Hashtable>]
   [-Size <Int32>]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Add-AzureKeyVaultKey
   [-InputObject] <PSKeyVault>
   [-Name] <String>
   -KeyFilePath <String>
   [-KeyFilePassword <SecureString>]
   [-Destination <String>]
   [-Disable]
   [-KeyOps <String[]>]
   [-Expires <DateTime>]
   [-NotBefore <DateTime>]
   [-Tag <Hashtable>]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Add-AzureKeyVaultKey
   [-ResourceId] <String>
   [-Name] <String>
   -Destination <String>
   [-Disable]
   [-KeyOps <String[]>]
   [-Expires <DateTime>]
   [-NotBefore <DateTime>]
   [-Tag <Hashtable>]
   [-Size <Int32>]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Add-AzureKeyVaultKey
   [-ResourceId] <String>
   [-Name] <String>
   -KeyFilePath <String>
   [-KeyFilePassword <SecureString>]
   [-Destination <String>]
   [-Disable]
   [-KeyOps <String[]>]
   [-Expires <DateTime>]
   [-NotBefore <DateTime>]
   [-Tag <Hashtable>]
   [-DefaultProfile <IAzureContextContainer>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

说明

Add-AzureKeyVaultKey cmdlet 在 Azure 密钥库的密钥保管库中创建密钥,或将密钥导入密钥保管库。 使用以下任一方法使用此 cmdlet 添加密钥:

  • 在密钥库服务的硬件安全模块(HSM)中创建密钥。
  • 在密钥库服务中创建软件中的密钥。
  • 将密钥从自己的硬件安全模块(HSM)导入密钥库服务中的 HSM。
  • 从计算机上的 .pfx 文件导入密钥。
  • 将计算机上的 .pfx 文件中的密钥导入到密钥库服务中的硬件安全模块(HSM)。 对于这些操作中的任何一项,可以提供关键属性或接受默认设置。 如果创建或导入与密钥保管库中的现有密钥同名的密钥,则会使用为新密钥指定的值更新原始密钥。 可以使用该密钥版本的特定于版本的 URI 来访问以前的值。 若要了解密钥版本和 URI 结构,请参阅 密钥库 REST API 文档中的“关于密钥和机密”。 注意:若要从自己的硬件安全模块导入密钥,必须先使用 Azure 密钥库 BYOK 工具集生成 BYOK 包(文件扩展名为 .byok 的文件)。 有关详细信息,请参阅如何为 Azure 密钥库生成和传输受 HSM 保护的密钥。 最佳做法是,使用 Backup-AzureKeyVaultKey cmdlet 在创建或更新密钥后备份密钥。 没有取消删除功能,因此,如果意外删除密钥或删除密钥,然后改变主意,除非你有可以还原的备份,否则密钥不可恢复。

示例

示例 1:创建密钥

PS C:\> Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'ITSoftware' -Destination 'Software'

Vault Name     : contoso
Name           : ITSoftware
Version        : 67da57e9cadf48a2ad8d366b115843ab
Id             : https://contoso.vault.azure.net:443/keys/ITSoftware/67da57e9cadf48a2ad8d366b115843ab
Enabled        : True
Expires        :
Not Before     :
Created        : 5/21/2018 11:10:58 PM
Updated        : 5/21/2018 11:10:58 PM
Purge Disabled : False
Tags           :

此命令在名为 Contoso 的密钥保管库中创建名为 ITSoftware 的软件保护密钥。

示例 2:创建受 HSM 保护的密钥

PS C:\> Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'ITHsm' -Destination 'HSM'

Vault Name     : contoso
Name           : ITHsm
Version        : 67da57e9cadf48a2ad8d366b115843ab
Id             : https://contoso.vault.azure.net:443/keys/ITSoftware/67da57e9cadf48a2ad8d366b115843ab
Enabled        : True
Expires        :
Not Before     :
Created        : 5/21/2018 11:10:58 PM
Updated        : 5/21/2018 11:10:58 PM
Purge Disabled : False
Tags           :

此命令在名为 Contoso 的密钥保管库中创建受 HSM 保护的密钥。

示例 3:创建具有非默认值的键

PS C:\> $KeyOperations = 'decrypt', 'verify'
PS C:\> $Expires = (Get-Date).AddYears(2).ToUniversalTime()
PS C:\> $NotBefore = (Get-Date).ToUniversalTime()
PS C:\> $Tags = @{'Severity' = 'high'; 'Accounting' = "true"}
PS C:\> Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'ITHsmNonDefault' -Destination 'HSM' -Expires $Expires -NotBefore $NotBefore -KeyOps $KeyOperations -Disable -Tag $Tags

Vault Name     : contoso
Name           : ITHsmNonDefault
Version        : 929bfc14db84439b823ffd1bedadaf5f
Id             : https://contoso.vault.azure.net:443/keys/ITHsmNonDefault/929bfc14db84439b823ffd1bedadaf5f
Enabled        : False
Expires        : 5/21/2020 11:12:43 PM
Not Before     : 5/21/2018 11:12:50 PM
Created        : 5/21/2018 11:13:17 PM
Updated        : 5/21/2018 11:13:17 PM
Purge Disabled : False
Tags           : Name        Value
                 Severity    high
                 Accounting  true

第一个命令将值存储在$KeyOperations变量中解密和验证。 第二个命令使用 Get-Date cmdlet 创建一个以 UTC 格式定义的 DateTime 对象。 该对象指定未来两年的时间。 该命令将该日期存储在$Expires变量中。 要了解详情,请键入 Get-Help Get-Date。 第三个命令使用 Get-Date cmdlet 创建 DateTime 对象。 该对象指定当前 UTC 时间。 该命令将该日期存储在$NotBefore变量中。 最后一个命令创建一个名为 ITHsmNonDefault 的密钥,该密钥是受 HSM 保护的密钥。 该命令指定$KeyOperations存储的允许键操作的值。 该命令指定 在上述命令中创建的 ExpiresNotBefore 参数的时间,以及用于高严重性和 IT 的标记。 新密钥已禁用。 可以使用 Set-AzureKeyVaultKey cmdlet 启用它

示例 4:导入受 HSM 保护的密钥

PS C:\> Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'ITByok' -KeyFilePath 'C:\Contoso\ITByok.byok' -Destination 'HSM'

Vault Name     : contoso
Name           : ITByok
Version        : 67da57e9cadf48a2ad8d366b115843ab
Id             : https://contoso.vault.azure.net:443/keys/ITByok/67da57e9cadf48a2ad8d366b115843ab
Enabled        : True
Expires        :
Not Before     :
Created        : 5/21/2018 11:10:58 PM
Updated        : 5/21/2018 11:10:58 PM
Purge Disabled : False
Tags           :

此命令从 KeyFilePath 参数指定的位置导入名为 ITByok 的密钥。 导入的密钥是受 HSM 保护的密钥。 若要从自己的硬件安全模块导入密钥,必须先使用 Azure 密钥库 BYOK 工具集生成 BYOK 包(文件扩展名为 .byok 的文件)。 有关详细信息,请参阅如何为 Azure 密钥库生成和传输受 HSM 保护的密钥。

示例 5:导入受软件保护的密钥

PS C:\> $Password = ConvertTo-SecureString -String 'Password' -AsPlainText -Force
PS C:\> Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'ITPfx' -KeyFilePath 'C:\Contoso\ITPfx.pfx' -KeyFilePassword $Password

Vault Name     : contoso
Name           : ITPfx
Version        : 67da57e9cadf48a2ad8d366b115843ab
Id             : https://contoso.vault.azure.net:443/keys/ITPfx/67da57e9cadf48a2ad8d366b115843ab
Enabled        : True
Expires        :
Not Before     :
Created        : 5/21/2018 11:10:58 PM
Updated        : 5/21/2018 11:10:58 PM
Purge Disabled : False
Tags           :

第一个命令使用 ConvertTo-SecureString cmdlet 将字符串转换为安全字符串,然后将该字符串存储在$Password变量中。 要了解详情,请键入 Get-Help ConvertTo-SecureString。 第二个命令在 Contoso 密钥保管库中创建软件密码。 该命令指定密钥的位置和存储在$Password的密码。

示例 6:导入密钥并分配属性

PS C:\> $Password = ConvertTo-SecureString -String 'password' -AsPlainText -Force
PS C:\> $Expires = (Get-Date).AddYears(2).ToUniversalTime()
PS C:\> $Tags = @{ 'Severity' = 'high'; 'Accounting' = "true" }
PS C:\> Add-AzureKeyVaultKey -VaultName 'contoso' -Name 'ITPfxToHSM' -Destination 'HSM' -KeyFilePath 'C:\Contoso\ITPfx.pfx' -KeyFilePassword $Password -Expires $Expires -Tag $Tags

Vault Name     : contoso
Name           : ITPfxToHSM
Version        : 929bfc14db84439b823ffd1bedadaf5f
Id             : https://contoso.vault.azure.net:443/keys/ITPfxToHSM/929bfc14db84439b823ffd1bedadaf5f
Enabled        : True
Expires        : 5/21/2020 11:12:43 PM
Not Before     : 
Created        : 5/21/2018 11:13:17 PM
Updated        : 5/21/2018 11:13:17 PM
Purge Disabled : False
Tags           : Name        Value
                 Severity    high
                 Accounting  true

第一个命令使用 ConvertTo-SecureString cmdlet 将字符串转换为安全字符串,然后将该字符串存储在$Password变量中。 第二个命令使用 Get-Date cmdlet 创建 DateTime 对象,然后将该对象存储在$Expires变量中。 第三个命令创建$tags变量来设置高严重性和 IT 的标记。 最后一个命令将密钥作为 HSM 密钥从指定位置导入。 该命令指定存储在$Password中的$Expires和密码中的过期时间,并应用存储在$tags中的标记。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DefaultProfile

用于与 azure 通信的凭据、帐户、租户和订阅

Type:IAzureContextContainer
Aliases:AzureRmContext, AzureCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Destination

指定是将密钥添加为受软件保护的密钥还是密钥库服务中受 HSM 保护的密钥。 有效值为:HSM 和软件。 注意:若要将 HSM 用作目标,必须具有支持 HSM 的密钥保管库。 请参阅 Azure 密钥保管库定价网站,了解有关 Azure 密钥保管库的服务层级和功能的详细信息。 创建新密钥时,此参数是必需的。 如果使用 KeyFilePath 参数导入密钥,此参数是可选的:

  • 如果未指定此参数,并且此 cmdlet 导入扩展名为 .byok 的密钥,则会将该密钥导入为受 HSM 保护的密钥。 该 cmdlet 无法将该密钥导入为受软件保护的密钥。
  • 如果未指定此参数,并且此 cmdlet 导入扩展名为 .pfx 的密钥,则会将该密钥导入为受软件保护的密钥。
Type:String
Accepted values:HSM, Software, HSM, Software
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Disable

指示要添加的密钥设置为禁用的初始状态。 使用密钥的任何尝试都将失败。 如果要预加载稍后要启用的密钥,请使用此参数。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Expires

指定此 cmdlet 添加的密钥的过期时间(作为 DateTime 对象)。 此参数使用协调世界时(UTC)。 若要获取 DateTime 对象,请使用 Get-Date cmdlet。 要了解详情,请键入 Get-Help Get-Date。 如果未指定此参数,则密钥不会过期。

Type:Nullable<T>[DateTime]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Vault 对象。

Type:PSKeyVault
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-KeyFilePassword

将导入的文件的密码指定为 SecureString 对象。 若要获取 SecureString 对象,请使用 ConvertTo-SecureString cmdlet。 要了解详情,请键入 Get-Help ConvertTo-SecureString。 必须指定此密码才能导入扩展名为 .pfx 的文件。

Type:SecureString
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyFilePath

指定包含此 cmdlet 导入的密钥材料的本地文件的路径。 有效的文件扩展名为 .byok 和 .pfx。

  • 如果该文件是 .byok 文件,则导入后,密钥会自动受到 HSM 的保护,并且无法替代此默认值。
  • 如果该文件是 .pfx 文件,则导入后软件会自动保护密钥。 若要替代此默认值,请将 目标 参数设置为 HSM,以便密钥受 HSM 保护。 指定此参数时, 目标 参数是可选的。
Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-KeyOps

指定可以使用此 cmdlet 添加的键执行的操作数组。 如果未指定此参数,则可以执行所有操作。 此参数的可接受值是 JSON Web 密钥 (JWK) 规范中定义的一个以逗号分隔的密钥操作列表:

  • 加密
  • 解密
  • 包装
  • 解包
  • 签名
  • 验证
Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

指定要添加到密钥保管库的密钥的名称。 此 cmdlet 基于此参数指定的名称、密钥保管库的名称和当前环境构造密钥的完全限定域名(FQDN)。 该名称的长度必须为 1 到 63 个字符的字符串,仅包含 0-9、a-z、A-Z 和 - (短划线符号)。

Type:String
Aliases:KeyName
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NotBefore

将时间指定为 DateTime 对象,在该对象之前无法使用键。 此参数使用 UTC。 若要获取 DateTime 对象,请使用 Get-Date cmdlet。 如果未指定此参数,则可以立即使用该密钥。

Type:Nullable<T>[DateTime]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ResourceId

保管库资源 ID。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Size

RSA 密钥大小(以位为单位)。 如果未指定,该服务将提供安全的默认值。

Type:Nullable<T>[Int32]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Tag

以哈希表的形式进行键值对。 例如:@{key0=“value0”;key1=$null;key2=“value2”}

Type:Hashtable
Aliases:Tags
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VaultName

指定此 cmdlet 向其添加密钥的密钥保管库的名称。 此 cmdlet 基于此参数指定的名称和当前环境构造密钥保管库的 FQDN。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

PSKeyVault

参数:InputObject (ByValue)

String

输出

PSKeyVaultKey