更新 AD DS 中的存储帐户标识密码

如果你在强制实施密码过期时间的组织单位或域中注册了表示你的存储帐户的 Active Directory 域服务 (AD DS) 标识/帐户,则必须在最长密码使用期限之前更改密码。 你的组织可能会运行自动清理脚本,删除密码过期的帐户。 因此,如果你在密码过期之前未更改密码,帐户将会被删除,从而导致你无法访问 Azure 文件共享。

若要防止意外的密码轮换,请确保在域中加入 Azure 存储帐户时将 Azure 存储帐户放置到 AD DS 中一个单独的组织单位中。 在此组织单位上禁用组策略继承,以避免应用默认域策略或特定密码策略。

注意

AD DS 中的存储帐户标识可以是服务帐户或计算机帐户。 服务帐户密码可以在 AD 中过期;但由于计算机帐户密码更改由客户端计算机而非 AD 驱动,因此它们不会在 AD 中过期。

有两个选项用于触发密码轮换。 可以使用 AzFilesHybrid 模块或 Active Directory PowerShell。 请使用一种方法,而不是同时使用两种方法。

适用于

文件共享类型 SMB NFS
标准文件共享 (GPv2)、LRS/ZRS Yes No
标准文件共享 (GPv2)、GRS/GZRS Yes No
高级文件共享 (FileStorage)、LRS/ZRS Yes No

使用 AzFilesHybrid 模块

可以从 AzFilesHybrid 模块运行 Update-AzStorageAccountADObjectPassword cmdlet。 必须使用对存储帐户拥有所有者权限并拥有 AD DS 权限的混合标识在已加入 AD DS 的本地环境中运行此命令,才能更改代表该存储帐户的标识的密码。 该命令将执行类似于存储帐户密钥轮换的操作。 具体而言,它会获取存储帐户的第二个 Kerberos 密钥,并使用该密钥来更新 AD DS 中已注册帐户的密码。 然后,它会重新生成存储帐户的目标 Kerberos 密钥,并更新 AD DS 中已注册帐户的密码。

# Update the password of the AD DS account registered for the storage account
# You may use either kerb1 or kerb2
Update-AzStorageAccountADObjectPassword `
        -RotateToKerbKey kerb2 `
        -ResourceGroupName "<your-resource-group-name-here>" `
        -StorageAccountName "<your-storage-account-name-here>"

此操作会将 AD 对象的密码从 kerb1 更改为 kerb2。 按照预期,这是一个两阶段的过程:从 kerb1 轮换到 kerb2(在完成之前将在存储帐户上重新生成 kerb2),等待几小时,然后轮换回 kerb1(此 cmdlet 同样会重新生成 kerb1)。

使用 Active Directory PowerShell

如果不想下载 AzFilesHybrid 模块,可以使用 Active Directory PowerShell

重要

本部分中的 Windows Server Active Directory PowerShell cmdlet 必须由用户使用提升的特权在 Windows PowerShell 5.1 中运行。 PowerShell 7.x 在此方案中不起作用。

请将以下脚本中的 <domain-object-identity> 替换为你的值,然后运行脚本以更新域对象密码:

$KeyName = "kerb1" # Could be either the first or second kerberos key, this script assumes we're refreshing the first
$KerbKeys = New-AzStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -KeyName $KeyName
$KerbKey = $KerbKeys.keys | Where-Object {$_.KeyName -eq $KeyName} | Select-Object -ExpandProperty Value
$NewPassword = ConvertTo-SecureString -String $KerbKey -AsPlainText -Force

Set-ADAccountPassword -Identity <domain-object-identity> -Reset -NewPassword $NewPassword