加密 Amazon ECS Service Connect 流量
Amazon ECS Service Connect 支持使用传输层安全性协议(TLS)证书对 Amazon ECS 服务进行自动流量加密。当您将 Amazon ECS 服务指向 AWS Private Certificate Authority(AWS Private CA)时,Amazon ECS 会自动预调配 TLS 证书,以加密您的 Amazon ECS Service Connect 服务之间的流量。Amazon ECS 生成、轮换和分发用于流量加密的 TLS 证书。
通过 Service Connect 进行自动流量加密将使用业界领先的加密功能来保护您的服务间通信,从而帮助您满足安全要求。它支持使用 256-bit
ECDSA
和 2048-bit RSA
加密的 AWS Private Certificate Authority TLS 证书。默认情况下,支持 TLS 1.3,但不支持 TLS 1.0 - 1.2。您还可以完全控制私有证书和签名密钥,从而帮助您满足合规性要求。
注意
要使用 TLS 1.3,您必须在目标上的侦听器上启用它。
只有通过 Amazon ECS 代理的入站和出站流量才会被加密。
AWS Private Certificate Authority 证书和 Service Connect
颁发证书还需要其他的 IAM 权限。Amazon ECS 提供了托管式资源信任策略,其中概述了权限集。有关这项新策略的更多信息,请参阅 AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity。
Service Connect 的 AWS Private Certificate Authority 模式
AWS Private Certificate Authority 可以在两种模式下运行:通用模式和短暂模式。
-
通用 – 可配置为任何到期日期的证书。
-
短期 – 最长有效期为七天的证书。
虽然 Amazon ECS 对这两种模式都支持,但建议使用短期证书。默认情况下,证书每五天轮换一次,与通用型相比,在短期模式下运行可以节省大量成本。
Service Connect 不支持证书吊销,而是利用进行频繁的证书轮换的短期证书。您有权在 Secrets Manager 中使用托管轮换修改轮换频率、禁用或删除密钥,但这样做可能会带来以下可能的后果。
-
较短的轮换频率 – 较短的轮换频率会因 AWS Private CA、AWS KMS 和 Secrets Manager 以及轮换工作负载增加的自动扩缩而导致更高的成本。
-
更长的轮换频率 – 如果轮换频率超过七天,应用程序的通信就会失败。
-
删除密钥 – 删除密钥会导致轮换失败并影响客户应用程序通信。
如果您的密钥轮换失败,则会在 AWS CloudTrail 中发布 RotationFailed
事件。您也可以为 RotationFailed
设置 CloudWatch 警报。
重要
不要将副本区域添加到密钥中。这样做可以防止 Amazon ECS 删除密钥,因为 Amazon ECS 无权从复制中移除区域。如果您已经添加了复制,请运行以下命令。
aws secretsmanager remove-regions-from-replication \ --secret-id
SecretId
\ --remove-replica-regionsregion-name
从属证书颁发机构
您可以将任何 AWS Private CA(根或从属)带到 Service Connect TLS,从而为服务颁发终端实体证书。所提供的颁发者在任何地方都被视为签名者和可信根。您可以从不同的从属 CA 为应用程序的不同部分颁发终端实体证书。使用 AWS CLI 时,请提供用于建立信任链的 CA 的 Amazon 资源名称(ARN)。
本地证书颁发机构
要使用您的本地 CA,请在 AWS Private Certificate Authority 中创建和配置从属 CA。这样可以确保为您的 Amazon ECS 工作负载颁发的所有 TLS 证书都与您在本地运行的工作负载共享信任链,并且能够安全连接。
重要
请在您的 AWS Private CA 中添加所需的标签 AmazonECSManaged :
true
。
基础设施即代码
将 Service Connect TLS 与基础设施即代码(IaC)工具配合使用时,请务必正确配置依赖项,以避免出现服务停滞在耗尽状态等问题。使用完您的 Amazon ECS 服务后应将您的 AWS KMS 密钥(如果提供)、IAM 角色和 AWS Private CA 依赖项删除。
Service Connect 和 Secrets Manager
使用采用 TLS 加密的 Amazon ECS Service Connect 时,服务通过以下方式与 Secrets Manager 进行交互:
Service Connect 利用提供的基础设施角色在 Secrets Manager 中创建密钥。这些密钥用于存储 TLS 证书的关联私钥,用于加密 Service Connect 服务之间的流量。
警告
Service Connect 会自动创建和管理这些密钥,简化了为您的服务实施 TLS 加密的过程。但是,请务必注意潜在的安全影响。对 Secrets Manager 具有读取权限的其他 IAM 角色可能能够访问这些自动创建的密钥。如果访问控制配置不当,这可能会将敏感的加密材料暴露给未经授权的各方。
要降低这种风险,请遵循以下最佳实践:
-
谨慎管理和限制对 Secrets Manager 的访问,尤其是对 Service Connect 创建的密钥的访问。
-
定期审计 IAM 角色及其权限,以确保最低权限原则得到遵循。
在授予对 Secrets Manager 的读取权限时,请考虑排除由 Service Connect 创建的 TLS 私钥。为此,您可以在 IAM 策略中使用一个条件来排除采用与模式匹配的 ARN 的密钥:
"arn:aws:secretsmanager:::secret:ecs-sc!"
拒绝对所有带有 ecs-sc!
前缀的密钥执行 GetSecretValue
操作的 IAM 策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:*:*:secret:ecs-sc!*" } ] }
注意
这是一个一般示例,可能需要根据您的特定用例和 AWS 账户配置进行调整。请始终彻底测试您的 IAM 策略,确保它们在保证安全的同时提供预期访问权限。
通过了解 Service Connect 与 Secrets Manager 的交互方式,您可以更好地管理 Amazon ECS 服务的安全,同时利用自动 TLS 加密的优势。
Service Connect 和 AWS Key Management Service
您可以使用 AWS Key Management Service 来加密和解密您的 Service Connect 资源。AWS KMS 是 AWS 管理的一项服务,可以通过该服务创建和管理用于保护数据的加密密钥。
将 AWS KMS 与 Service Connect 结合使用时,您可以选择使用 AWS 为您管理的 AWS 拥有的密钥,也可以选择现有的 AWS KMS 密钥。您也可以创建新的 AWS KMS 密钥以供使用。
提供您自己的加密密钥
您可以提供自己的密钥材料,也可以通过 AWS Key Management Service 使用外部密钥存储,将自己的密钥导入 AWS KMS,然后在 Amazon ECS Service Connect 中指定该密钥的 Amazon 资源名称(ARN)。
以下是示例 AWS KMS 策略。将所有 user input
值替换为您自己的值。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "
id
", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333
:role/role-name
" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyPair" ], "Resource": "*" } ] }
有关密钥政策的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建密钥政策。
注意
Service Connect 仅支持对称加密 AWS KMS 密钥。您不能使用任何其他类型的 AWS KMS 密钥来加密您的 Service Connect 资源。有关确定 AWS KMS 密钥是否为对称加密密钥的帮助,请参阅 Identify asymmetric KMS keys。
有关 AWS Key Management Service 对称加密密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的对称加密 AWS KMS 密钥。