问题描述
我有一个在 EC2 中运行的 node.js 服务器,它使用 AWS KMS 来加密/解密数据。 我可以成功地使用 aws-sdk 来执行我的任务
const AWS = require('aws-sdk');
const kms = new AWS.KMS();
kms.decrypt( ... )
我现在想使用安全组锁定我的基础设施。 我无法确定使用什么规则来允许此服务器访问 AWS KMS 资源,而没有允许任何地方所有流量的传出规则:
Outbound rules:
Type | Protocol | Port range | Destination
All traffic | All | All | 0.0.0.0/0
All traffic | All | All | ::/0
这可能有点过分,但是有没有我可以使用的规则专门允许对 AWS KMS 服务的出站访问?
A CIDR block,a security group ID or a prefix list has to be specified
,所以我不能使用来自 KMS 服务对象的端点主机名或 href:
kms Service {
...
isGlobalEndpoint: false,endpoint: Endpoint {
protocol: 'https:',host: 'kms.eu-west-2.amazonaws.com',port: 443,hostname: 'kms.eu-west-2.amazonaws.com',pathname: '/',path: '/',href: 'https://kms.eu-west-2.amazonaws.com/'
},...
}
检查 https://kms.eu-west-2.amazonaws.com/
的远程地址提供了 52.94.48.24:443
的 IP 地址。在特定规则中使用它会间歇性地工作,但我找不到任何 AWS 文档表明此 IP 地址是固定的。我想它不是。
Type | Protocol | Port range | Destination
HTTPS | TCP | 443 | 52.94.48.24/32
非常感谢任何指导!
谢谢,A。
解决方法
我假设通过锁定您的基础设施,我们了解到您放置的 EC2 实例是 private subnet。在这种情况下,您应该为 KMS 服务创建一个 VPC Endpoint。
VPC 终端节点将在您的子网中拥有一个网络接口,它将为每个子网提供一个私有 IP 地址以及潜在的私有 DNS 主机名(如果 VPC 启用了此属性)。
此外,您可以根据安全组允许 EC2 实例和 VPC 端点之间的流量(无需指定 IP)。