使用 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 工具解决此问题
这个问题很奇怪,我不知道怎么回答。
所以我们有一个脚本,其中列出了与盒子关联的安全组 - 用 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 工具解决此问题