是否有专门允许访问 AWS KMS 的 AWS 安全组规则?

问题描述

我有一个在 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)。