我在cloudformation中创建了一个具有以下权限的EC2角色:
Policies:
- PolicyName: ec2-test-poilcy
PolicyDocument: |
{ "Version": "2012-10-17",
"Statement": [
{
"Action": [
"ssm:DescribeParameters"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:GetParameterHistory",
"ssm:GetParametersByPath",
"ssm:GetParameters",
"ssm:GetParameter",
"ssm:DeleteParameters"
],
"Resource": "arn:aws:ssm:REGION:ACCOUNT-ID:parameter/*"
}
]
}
并将上述角色附加到我的EC2实例,但我无法执行任何SSM参数存储操作,我只是没有得到响应,几分钟后,我超时了。
例如:
aws ssm get-parameter --name test --region us-east-2
Connect timeout on endpoint URL: "https://ssm.us-east-2.amazonaws.com/"
在尝试了各种方法之后,我也附加了AdministratorAccess策略,但它仍然没有响应任何ssm操作。
更新
花了几个小时后,我意识到超时错误只会发生适用于地区:us-east-2
aws ssm get-parameter --name testing --region us-east-1
通过使用其他区域成功运行了上述命令。
当我发现问题时,为了结束我的问题,我自己回答了这个问题,并希望它能帮助其他人调试。
我使用以下命令获取DNS信息:
dig ssm.us-east-2.amazonaws.com
我得到了一个响应,在其中我能够观察到DNS指向私有IP:
;; ANSWER SECTION:
ssm.us-east-2.amazonaws.com. 60 IN A xx.xx.xx.xx7 (private ip)
但正确的DNS解析应该是这样的:
;; ANSWER SECTION:
ssm.us-east-2.amazonaws.com. 60 IN A 52.95.21.xxx
在花了几个小时弄清楚原因后,我发现这是由于对ssm服务使用了不必要的vpc端点,所以我删除了它,现在我可以为us-east-2区域的ssm操作获得正确的响应。
将HTTPS(443(入站规则添加到与VPC Endpoint关联的安全组,允许HTTPS(443。
我们最多可以将5个安全组关联到VPC端点。如果您从任何EC2实例运行命令,则与该实例关联的安全组应与与VPC端点关联的任何安全组相同,或者VPC端点相关的安全组应该允许HTTPS(443(入站规则到您的实例安全组。