SSM Parameter Store 为来自 EC2 实例的任何操作提供超时

问题描述

我在 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 Parameter Store 操作,我只是没有得到响应,几分钟后,我超时。

例如:

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 的 ssm 操作获得正确的响应-2 区域。