为 Fargate 临时存储创建加密密钥 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 Fargate 临时存储创建加密密钥

注意

使用客户自主管理型密钥加密 Fargate 临时存储的功能不适用于 Windows 任务集群。

使用客户自主管理型密钥加密 Fargate 临时存储的功能不适用于早于 1.4.0platformVersions

Fargate 在临时存储中预留了仅供 Fargate 使用的空间,您无需为此空间付费。具体分配可能与非客户自主管理密钥任务不同,但总空间保持不变。您可以通过 df 等工具查看此更改。

要在 Amazon KMS 中创建客户自主管理型密钥(CMK)来加密 Fargate 临时存储,请执行以下步骤。

  1. 导航到 https://console.aws.amazon.com/kms

  2. 按照《Amazon Key Management Service 开发人员指南》中 Creating Keyshttps://docs.amazonaws.cn/kms/latest/developerguide/overview.html 部分的说明操作。

  3. 创建 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:clusterAccountaws: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-tasksdescribe-clusterdescribe-services 命令查看其非托管式任务或服务任务是否在使用该密钥进行加密。

    有关更多信息,请参阅《Amazon KMS 开发人员指南》中的 Condition keys for Amazon KMShttps://docs.amazonaws.cn/kms/latest/developerguide/overview.html

Amazon Web Services Management Console
  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. 选择左侧导航栏中的集群,然后选择右上角的创建集群,或者选择一个现有的集群。对于现有集群,请选择右上角的更新集群

  3. 在工作流的加密部分下,您可以选择在托管存储Fargate 临时存储下选择您的 Amazon KMS 密钥。您也可以在此处选择创建 Amazon KMS 密钥

  4. 创建完新集群后选择创建,或在要更新现有集群时选择更新

Amazon CLI

以下是使用 Amazon CLI 创建集群并配置 Fargate 临时存储的示例(请用自己的值替换红色的值):

aws ecs create-cluster --cluster clusterName \ --configuration '{"managedStorageConfiguration":{"fargateEphemeralStorageKmsKeyId":"arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}}' { "cluster": { "clusterArn": "arn:aws:ecs:us-west-2:012345678901:cluster/clusterName", "clusterName": "clusterName", "configuration": { "managedStorageConfiguration": { "fargateEphemeralStorageKmsKeyId": "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" } }, "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [], "settings": [], "capacityProviders": [], "defaultCapacityProviderStrategy": [] }, "clusterCount": 5 }
Amazon CloudFormation

以下是使用 Amazon CloudFormation 创建集群并配置 Fargate 临时存储的示例模板(请用自己的值替换红色的值):

AWSTemplateFormatVersion: 2010-09-09 Resources: MyCluster: Type: AWS::ECS::Cluster Properties: ClusterName: "clusterName" Configuration: ManagedStorageConfiguration: FargateEphemeralStorageKmsKeyId: "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"