为 Fargate 临时存储创建加密密钥
注意
使用客户自主管理型密钥加密 Fargate 临时存储的功能不适用于 Windows 任务集群。
使用客户自主管理型密钥加密 Fargate 临时存储的功能不适用于早于 1.4.0
的 platformVersions
。
Fargate 在临时存储中预留了仅供 Fargate 使用的空间,您无需为此空间付费。具体分配可能与非客户自主管理密钥任务不同,但总空间保持不变。您可以通过 df
等工具查看此更改。
要在 Amazon KMS 中创建客户自主管理型密钥(CMK)来加密 Fargate 临时存储,请执行以下步骤。
-
按照《Amazon Key Management Service 开发人员指南》中 Creating Keyshttps://docs.amazonaws.cn/kms/latest/developerguide/overview.html 部分的说明操作。
-
创建 Amazon KMS 密钥时,请务必在密钥政策中提供 Fargate 服务相关 Amazon KMS 操作权限。要将客户自主管理型密钥用于 Amazon ECS 集群资源,策略中必须允许以下 API 操作。
-
kms:GenerateDataKeyWithoutPlainText
– 调用GenerateDataKeyWithoutPlainText
以利用提供的 Amazon KMS 密钥生成加密的数据密钥。 -
kms:CreateGrant
– 向客户自主管理型密钥添加授权。这些授权会控制对指定 Amazon KMS 密钥的访问权限,从而允许访问 Amazon ECS Fargate 所需的授权操作。有关使用授权的更多信息,请参阅https://docs.amazonaws.cn/kms/latest/developerguide/overview.html《Amazon Key Management Service 开发人员指南》。这将允许 Amazon ECS Fargate 执行以下操作:-
调用
Decrypt
以便 Amazon KMS 获取加密密钥,以便解密临时存储数据。 -
设置停用主体,以允许服务
RetireGrant
。
-
-
kms:DescribeKey
– 提供客户自主管理型密钥详细信息,以便 Amazon ECS 验证该密钥是否是对称密钥以及是否已经启用。
以下示例演示了一个将应用到目标加密密钥的 Amazon KMS 密钥政策。要使用示例策略语句,请将
user input placeholders
替换为您自己的信息。与往常一样,只配置您需要的权限,但需要向至少一个用户提供具有权限的 Amazon KMS 以免出现错误。{ "Sid": "Allow generate data key access for Fargate tasks.", "Effect": "Allow", "Principal": { "Service":"fargate.amazonaws.com" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:ecs:clusterAccount": [ "
customerAccountId
" ], "kms:EncryptionContext:aws:ecs:clusterName": [ "clusterName
" ] } }, "Resource": "*" }, { "Sid": "Allow grant creation permission for Fargate tasks.", "Effect": "Allow", "Principal": { "Service":"fargate.amazonaws.com" }, "Action": [ "kms:CreateGrant" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:ecs:clusterAccount": [ "customerAccountId
" ], "kms:EncryptionContext:aws:ecs:clusterName": [ "clusterName
" ] }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt" ] } }, "Resource": "*" }, { "Sid": "Allow describe key permission for cluster operator - CreateCluster and UpdateCluster.", "Effect": "Allow", "Principal": { "AWS":"arn:aws:iam::customerAccountId
:role/customer-chosen-role
" }, "Action": [ "kms:DescribeKey" ], "Resource": "*" }Fargate 任务使用
aws:ecs:clusterAccount
和aws:ecs:clusterName
加密上下文密钥来执行密钥的加密操作。客户应添加这些权限以限制对特定账户和/或集群的访问。有关更多信息,请参阅 Amazon KMS 开发人员指南中的加密内容。
创建或更新集群时,您可以选择使用条件键
fargateEphemeralStorageKmsKeyId
。借助此条件减,客户可以更精细地控制 IAM 策略。对fargateEphemeralStorageKmsKeyId
配置的更新仅对新的服务部署生效。以下示例将允许客户仅向一组特定的已批准 Amazon KMS 密钥授予权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:UpdateCluster" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:fargate-ephemeral-storage-kms-key": "arn:aws:kms:
us-west-2
:111122223333
:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
" } } } ] }下一个示例将拒绝删除已与集群关联的 Amazon KMS 密钥的尝试。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "ecs:CreateCluster", "ecs:UpdateCluster" ], "Resource": "*", "Condition": { "Null": { "ecs:fargate-ephemeral-storage-kms-key": "true" } } } }
客户可以使用 Amazon CLI
describe-tasks
、describe-cluster
或describe-services
命令查看其非托管式任务或服务任务是否在使用该密钥进行加密。有关更多信息,请参阅《Amazon KMS 开发人员指南》中的 Condition keys for Amazon KMShttps://docs.amazonaws.cn/kms/latest/developerguide/overview.html。
-