我找到的最简单的解决方法如下。
参考资料:
https://devblogs.microsoft.com/powershell/secretmanagement-and-secretstore-are-generally-available/
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sourcing-external.html
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.secretmanagement/?view=ps-modules
以下PowerShell代码创建了一个加密保险库。
Install-Module Microsoft.PowerShell.SecretManagement
Install-Module Microsoft.PowerShell.SecretStore
Set-SecretStoreConfiguration -Authentication None -Scope CurrentUser -Interaction None
Register-SecretVault -Name "AWS" -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault -AllowClobber
Set-Secret -Vault "AWS" -Name "test" -Secret "test"
Get-SecretVault
Write-Host "Vault Created"
这个 PowerShell 可以创建密码,注意可以对密码设置过期时间。
$profile = Read-Host -Prompt "Enter AWS Account Number"
$aws_access_key_id = Read-Host -Prompt "Enter AWS access key"
$aws_secret_access_key = Read-Host -Prompt "Enter AWS secret access key"
$secretIn = @{
Version=1;
AccessKeyId= $aws_access_key_id;
SecretAccessKey=$aws_secret_access_key;
SessionToken= $null;
}
$secret = ConvertTo-Json -InputObject $secretIn
Set-Secret -Name $profile -Secret $secret
这个文件名为
credential_process.cmd 的文件需要在路径上或者与terraform.exe放在同一目录下。
@echo off
REM This file needs to be accessible to the aws cli or programs using it.
REM To support other paths, copy it to C:\Program Files\Amazon\AWSCLIV2
Powershell.exe -Command "Get-Secret -Vault AWS -Name %1 -AsPlainText "
最后,在你的{user}.aws\credentials文件中添加以下条目:
[XXXXX-us-east-1]
credential_process = credential_process.cmd "XXXXX"
region=us-east-1
output=json
现在您可以使用以下命令运行 AWS CLI 命令(或 Terraform):
aws ec2 describe-vpcs --profile XXXXX-us-east-1
缺点:
- 无法阻止用户使用简单的aws configure语句并以明文形式存储凭据。
- 无法强制管理员使用此方法。
像AWS的所有其他内容一样:
- 复杂性是不必要的。
- 文档非常详细,但总是缺少重要信息。
- 一切都是hack-job。
可能性:
- 可以创建一个只能访问Secret Manager中某个秘密的用户(User1)(User2凭据)。
- User1凭据存储在本地Vault中。
- User1将在调用credential_process.cmd时从Secret Manager中获取要使用的User2凭据
- 人们永远不会直接获得User2凭据。
- 这将迫使用户使用上述方法。
- 然而,这应该在aws configure中实现,而不是拼凑在一起。这将允许其他依赖工具在配置完成后正常工作。