我们正在设置API网关,其背后有Lamba功能。该设置使用 aws cognito 授权者。我们有 api 网关的 VPC 端点,因此可以通过私有 IP 进行访问。
但是 Cognito 不支持私有链接,因此我们无法为其提供 VPC 端点。因此,这意味着 Cognito 发行的令牌必须通过互联网从 https://ourdomain.auth.ap-southeast-2.amazoncognito.com 传输到客户端。
Cognito 文档对传输中的数据进行了如下说明:-
”传输中加密
对 Amazon Cognito 的所有请求都必须通过传输层安全协议 (TLS) 发出。客户端必须支持传输层安全性 (TLS) 1.0 或更高版本。我们建议使用 TLS 1.2 或更高版本。客户端还必须支持具有完美前向保密 (PFS) 的密码套件,例如 Ephemeral Diffie-Hellman (DHE) 或 Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)。大多数现代系统(例如 Java 7 及更高版本)都支持这些模式。”
根据上述,令牌应该被加密。
但是我有以下问题:
Cognito 是否强制执行 TLS (1.2)?
即使提供传输加密,安全最佳实践仍然要求通过 VPC 端点使用 Cognito,以便令牌不需要在互联网上传输。
如果客户端应用程序来自本地环境并访问 API,那么如果我们让它通过 AWS 中的代理,那么流量会保留在 AWS 主干网络中还是仍然流经互联网?
Cognito 是否强制执行 TLS (1.2):
不幸的是,没有。对于大多数 API 调用,您可以使用 API Gateway 作为中间层并在那里强制执行 TLS1.2。但是,对于 AUTHORIZATION 和 TOKEN 端点,这不起作用。 或者,您可以通过将 Cognito 部署到美国区域并使用那里的 Cognito 的 FIPS 端点来对所有端点强制实施。请参阅 https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html 了解可用的 FIPS 端点。
即使提供传输加密,安全最佳实践仍然要求通过 VPC 端点使用 Cognito,以便令牌不需要在互联网上传输:
这一切都取决于您的风险偏好。对于大多数组织来说,加密就足够了。但是,如果您的风险偏好较低,您将需要遵循“纵深防御”最佳实践,采取额外的缓解措施。私人连接只是您可以添加的众多选项之一。例如,监控可疑用户活动和自适应 MFA 是其他方法。
如果客户端应用程序来自本地环境并访问 API,那么如果我们让它通过 AWS 中的代理,那么流量会保留在 AWS 主干网络中还是仍然流经互联网?
由于 API 端点是公共的,它们将通过互联网(公共 IP 地址,因此它被路由到 NAT 网关或互联网网关)。
编辑: 在本新闻稿中,AWS 声明所有终端节点均至少具有 TLS1.2: https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/。但是,我还没有测试这是否也适用于上面提到的非控制平面 API。
我向 AWS Support 提交了一张票证,了解到默认情况下 Cognito 自定义域支持向后兼容 TLS 1. 和 1.1,但是可以更改此设置以允许最低协议为 TLS 1.2。经客户批准,支持人员可以提出更改设置的内部请求。