这更像是一个健全的检查,因为我已经解决了这个问题,但我不相信我已经以聪明的方式做到了。
问题
我有一些实例被分配了允许他们访问 S3 存储桶的 IAM 角色。然后,我需要运行一些 PowerShell 脚本来访问该 S3 存储桶以下载一些对象。
解决方案
要获取/设置要使用的凭据,我编写了这个 PowerShell 函数:
function Set-MyInstanceProfileCredentials {
param(
[parameter()]
[string]
$StoredCredentialsName = "MyInstanceProfileCredentials"
)
$Uri = "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
Write-Verbose "Retrieving instance profile from $($Uri)"
$Uri = "$Uri$(Invoke-RestMethod -Uri $Uri)"
Write-Verbose "Retrieving security credentials from $($Uri)"
$Response = Invoke-RestMethod -Uri $Uri
Set-AWSCredentials -AccessKey $Response.AccessKey -SecretKey $Response.SecretAccessKey -StoreAs $StoredCredentialsName
Get-AWSCredentials -StoredCredentials $StoredCredentialsName
}
然后,当我需要从 AWS 模块运行 PowerShell cmdlet 时,我只需先调用此函数。
但是,我无法摆脱已经为我解决这个问题的 AWS PowerShell 模块遗漏了一些东西的感觉。