5

这更像是一个健全的检查,因为我已经解决了这个问题,但我不相信我已经以聪明的方式做到了。

问题

我有一些实例被分配了允许他们访问 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 模块遗漏了一些东西的感觉。

4

1 回答 1

3

但是,我无法摆脱已经为我解决这个问题的 AWS PowerShell 模块遗漏了一些东西的感觉。

:) - 您会很高兴听到这确实是开箱即用的,即适用于 Windows PowerShell 的 AWS 工具是基于适用于 .NET的 AWS 开发工具包构建的,它会自动处理此问题,另请参阅凭证搜索顺序

运行命令时,PowerShell 工具按以下顺序搜索凭据并使用第一个可用集。

[...]

6) 如果您在为 IAM 角色配置的 Amazon EC2 实例上运行该命令,请使用存储在实例配置文件中的 EC2 实例凭证。

有关将 IAM 角色用于 Amazon EC2 实例的更多信息,请访问适用于 .NET 的 AWS 开发人员指南

于 2014-05-22T14:31:26.400 回答