Fargate エフェメラルストレージ用の暗号化キーを作成する - Amazon Elastic Container Service

Fargate エフェメラルストレージ用の暗号化キーを作成する

注記

カスタマーマネージドキーによる Fargate エフェメラルストレージの暗号化は、Windows タスククラスターでは利用できません。

カスタマーマネージドキーによる Fargate エフェメラルストレージの暗号化は、1.4.0 より前のバージョンの platformVersions では利用できません。

Fargate は、Fargate のみが使用するエフェメラルストレージのスペースを予約します。そのスペースに対して料金は発生しません。割り当ては、カスタマー管理以外のキータスクとは異なる場合がありますが、スペースの合計は変わりません。この変更については、df などのツールで確認できます。

AWS KMS で Fargate のエフェメラルストレージを暗号化するカスタマーマネージドキー (CMK) を作成するには、次のステップに従ってください。

  1. https://console.aws.amazon.com/kms に移動します。

  2. 手順については、「AWS Key Management Service デベロッパーガイド」の「Creating Keys」を参照してください。

  3. AWS KMS キーを作成するときは、キーポリシーで Fargate サービスに関連する AWS KMS オペレーションのアクセス許可を必ず付与してください。Amazon ECS クラスターリソースでカスタマー管理キーを使用するには、ポリシーで次の API オペレーションを許可する必要があります。

    • kms:GenerateDataKeyWithoutPlainTextGenerateDataKeyWithoutPlainText を呼び出し、提供された AWS KMS キーから暗号化されたデータキーを生成します。

    • kms:CreateGrant - カスタマーマネージドキーに許可を追加します。指定された AWS KMS キーへのアクセス制御を付与します。これは、Amazon ECS Fargate が必要なグラントオペレーションへのアクセスを許可するものです。詳細については、「AWS Key Management Service デベロッパーガイド」の「Using Grants」を参照してください。これにより、Amazon ECS Fargate で以下を行うことができます。

      • Decrypt から AWS KMS を呼び出し、エフェメラルストレージのデータを復号するための暗号化キーを取得します。

      • RetireGrant にサービスが許可するための、廃止するプリンシパルを設定します。

    • kms:DescribeKey — カスタマーマネージドキーの詳細を提供し、キーが対称、かつ有効である場合に、Amazon ECS がキーを検証できるようにします。

    次の例は、暗号化するターゲットキーに適用する AWS KMS キーポリシーを示しています。ポリシーステートメントの例を使用する際は、ユーザー入力用プレースホルダーを独自の情報に置き換えます。通常どおり、必要なアクセス許可のみを設定しますが、エラーを回避するために、少なくとも 1 人のユーザーにアクセス許可付きの AWS 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 暗号化コンテキストキーを使用します。特定のアカウントやクラスターへのアクセスを制限するには、これらのアクセス許可を追加する必要があります。

    詳しくは、AWS KMS デベロッパーガイドEncryption context を参照してください。

    クラスターを作成または更新する場合、条件キー fargateEphemeralStorageKmsKeyId を使用するオプションを利用できます。この条件キーにより、お客様は IAM ポリシーをよりきめ細かく制御できます。fargateEphemeralStorageKmsKeyId 設定の更新は、新しいサービスのデプロイでのみ有効になります。

    以下は、お客様が特定の承認された AWS 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" } } } ] }

    次に、クラスターに既に関連付けられている AWS KMS キーの削除を拒否する例を示します。

    { "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "ecs:CreateCluster", "ecs:UpdateCluster" ], "Resource": "*", "Condition": { "Null": { "ecs:fargate-ephemeral-storage-kms-key": "true" } } } }

    お客様は、AWS CLI、describe-tasksdescribe-cluster または describe-services コマンドを使用して、管理されていないタスクまたはサービスタスクが、キーを使用して暗号化されているかどうかを確認できます。

    詳細については、「AWS KMS デベロッパーガイド」の「Condition keys for AWS KMS」を参照してください。

AWS Management Console
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

  2. 左側のナビゲーションで [クラスター]を選択し、右上で [クラスターの作成] を選択するか、既存のクラスターを選択します。既存のクラスターの場合は、右上の [クラスターの更新] を選択します。

  3. ワークフローの [暗号化] セクションでは、[マネージド型ストレージ][Fargate エフェメラルストレージ] で AWS KMS キーを選択することもできます。ここで [AWS KMS キーの作成] を選択することもできます。

  4. 新しいクラスターの作成が完了したら [作成] を選択し、既存のクラスターを更新する場合は [更新] を選択します。

AWS CLI

以下は、クラスターを作成し、AWS 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 }
AWS CloudFormation

以下は、クラスターを作成し、AWS 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"