使用 IAM 角色,脚本可以在 AWS cli 中运行,但不能在 AWS Tools for powershell 中运行

Using an IAM Role, a script works in AWS cli, but not in AWS Tools for powershell

这个问题很奇怪,我不知道怎么回答。

所以我们有一个脚本,其中列出了与盒子关联的安全组 - 用 powershell 编写:

$ErrorActionPreference = "Stop"

if ($boxName -eq $NULL)
{
    Write-Host "Box name wasn't specified!"
    Exit 1    
}

if ($region -eq $NULL)
{
   $region = "eu-west-1"
}

Set-DefaultAWSRegion -Region $region

$searchFor =@(
    @{
        name = 'tag:Name'
        values = $boxName
    }
)
$SecurityGrp = Get-EC2SecurityGroup -Filter $searchFor

Write-Host $SecurityGrp.GroupName

function DisplayIPPermissions {
    param (
        $Permission
    )

    Write-Host "`nSecurity Group Name $($Permission.GroupName)"
    Write-Host "Security Group ID $($Permission.GroupId)"
    Write-Host "Protocol $($Permission.IpProtocol)"
    Write-Host "FromPort: $($Permission.FromPort)"
    Write-Host "ToPort: $($Permission.ToPort)"

    Write-Host "IPv4 Ranges";
    foreach($iprange in $Permission.Ipv4Ranges)
    {
        Write-Host $iprange.CidrIp
    }

    Write-Host "UserGroupIdPairs"

    foreach($pair in $Permission.UserGroupIdPairs)
    {
        Write-Host $pair.GroupId
    }
}


Write-Host "`n`nInBound`n`n"

foreach($rule in $SecurityGrp.IPPermissions)
{
    DisplayIPPermissions $rule
}

Write-Host "`n`nOutBound`n`n"
foreach($rule in $SecurityGrp.IPPermissionsEgress)
{
    DisplayIPPermissions $rule
}

这在我的本地计算机上使用 IAM 访问密钥 运行ning 时非常有效。它 returns 安全组的详细信息,包括名称、ID、端口和用户组对。

但是,当我 运行 在附加了 IAM 角色的实例 EC2 上执行此操作时,我得到了一些非常奇怪的行为。脚本 运行s 没有错误,但除了端口之外的所有值都有空字符串。示例输出:

InBound



Security Group Name 
Security Group ID 
Protocol tcp
FromPort: 3579
ToPort: 3579
IPv4 Ranges
UserGroupIdPairs

Security Group Name 
Security Group ID 
Protocol tcp
FromPort: 22
ToPort: 22
IPv4 Ranges
UserGroupIdPairs

Security Group Name 
Security Group ID 
Protocol tcp
FromPort: 443
ToPort: 443
IPv4 Ranges
UserGroupIdPairs


OutBound



Security Group Name 
Security Group ID 
Protocol tcp
FromPort: 3579
ToPort: 3579
IPv4 Ranges
UserGroupIdPairs

Security Group Name 
Security Group ID 
Protocol -1
FromPort: 0
ToPort: 0
IPv4 Ranges
UserGroupIdPairs

Security Group Name 
Security Group ID 
Protocol tcp
FromPort: 443
ToPort: 443
IPv4 Ranges
UserGroupIdPairs

这完全令人困惑,因为出于某种原因,代码显然在遍历规则并正确获取端口。我不明白为什么端口被区别对待。

陌生人还是这个命令: aws ec2 describe-security-groups --filters "Name=tag:Name,Values=$boxName"

使用 IAM 角色完美工作。

为什么会这样?

已通过更新 AWS 工具解决此问题