我看到的错误是:无法执行http请求:连接到sqs.us-east-1.amazonaws.com:443
org.apache.http.conn.ConnectTimeoutException: Connect to sqs.us-east-1.amazonaws.com:443 [sqs.us-east-1.amazonaws.com/54.239.27.172] failed: connect timed out
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)
at com.amazonaws.http.conn.$Proxy54.connect(Unknown Source)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1181)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1030)
... 21 common frames omitted
我的安全组的出站规则是: 所有流量10.0.0.0/8
我无法更改出站规则以允许所有互联网 - 这是一个限制。
我们知道如何做到这一点吗?
答案 0 :(得分:2)
正如John所说,AWS API是公共端点(例外是VPC Endpoints,它们是VPC专用端点,目前仅适用于S3和DynamoDB)。从私有子网,您需要NAT来访问这些公共端点。
但是,为了限制从您的实例访问仅 AWS服务,您需要配置安全组的出口规则。
亚马逊为其端点发布IP-Ranges,并允许您订阅更改通知:
每当AWS IP地址范围发生变化时,我们都会向AmazonIpSpaceChanged主题的订阅者发送通知。有效负载包含以下格式的信息:
{
"create-time":"yyyy-mm-ddThh:mm:ss+00:00",
"synctoken":"0123456789",
"md5":"6a45316e8bc9463c9e926d5d37836d33",
"url":"https://ip-ranges.amazonaws.com/ip-ranges.json"
}
您从https://ip-ranges.amazonaws.com/ip-ranges.json获得的是描述AWS服务及其IP范围的json。
{
"syncToken": "0123456789",
"createDate": "yyyy-mm-dd-hh-mm-ss",
"prefixes": [
{
"ip_prefix": "cidr",
"region": "region",
"service": "subset"
}
],
"ipv6_prefixes": [
{
"ipv6_prefix": "cidr",
"region": "region",
"service": "subset"
}
]
}
为了限制出口流量,请按照AWS文档中的这些说明向您的SG添加规则:
要允许实例仅访问AWS服务,请创建一个安全组,其规则允许到AMAZON列表中的CIDR块的出站流量减去同样位于EC2列表中的CIDR块。
有关当前详细信息和IP范围json格式,请参阅"Implementing Egress Control" in Amazon's general documentation
部分答案 1 :(得分:1)
Amazon SQS是一项基于互联网的服务。要连接到Amazon SQS Endpoint(sqs.us-east-1.amazonaws.com
),Amazon EC2实例需要访问Internet。
您的Amazon EC2实例位于私有子网中,这意味着无法直接访问Internet 。因此,您需要:
答案 2 :(得分:0)
在这里更新。现在VPC Endpoints支持大多数AWS服务的端点