翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions での保管中のデータの暗号化
ブログを読む
「カスタマーマネージドキーによるデータセキュリティの強化」の「カスタマーマネージド AWS KMS キー
AWS Step Functions は、常に透過的なサーバー側の暗号化を使用して、保管中のデータを暗号化します。デフォルトでは、保管中のデータを暗号化することで、機密データの保護に伴う運用上のオーバーヘッドと複雑さが軽減されます。厳格な暗号化コンプライアンスと規制要件を満たすセキュリティ重視のアプリケーションを構築できます。
この暗号化レイヤーを無効にしたり、代替の暗号化タイプを選択したりすることはできませんが、ステートマシンとアクティビティリソースを作成するときにカスタマーマネージドキーを選択することで、既存の AWS 所有の暗号化キーに 2 つ目の暗号化レイヤーを追加できます。
-
カスタマーマネージドキー — Step Functions は、ユーザーが作成、所有、管理する対称カスタマーマネージドキーの使用をサポートし、既存の AWS 所有暗号化に 2 番目の暗号化レイヤーを追加します。この暗号化層はユーザーが完全に制御できるため、次のようなタスクを実行できます。
-
キーポリシーの策定と維持
-
IAM ポリシーと許可の確立と維持
-
キーポリシーの有効化と無効化
-
キー暗号化マテリアルのローテーション
-
タグの追加
-
キーエイリアスの作成
-
キー削除のスケジュール設定
詳細については、「 AWS Key Management Service デベロッパーガイド」の「カスタマーマネージドキー」を参照してください。
-
AWS Step Functions ステートマシンとアクティビティのカスタマーマネージドキーを使用してデータを暗号化できます。ステートマシン を作成または更新するとき、およびアクティビティ を作成するときに、対称 AWS KMS キーとデータキーの再利用期間を設定できます。実行履歴とステートマシン定義は、ステートマシンに適用されたキーで暗号化されます。アクティビティ入力は、アクティビティに適用されたキーで暗号化されます。
カスタマーマネージド AWS KMS キーを使用すると、保護された医療情報 (PHI) を含む顧客データを不正アクセスから保護できます。Step Functions は と統合されているため CloudTrail、イベント履歴の CloudTrail コンソールで最新のイベントを表示および監査できます。
の詳細については AWS KMS、「 とは」を参照してください AWS Key Management Service。
注記
Step Functions は、 AWS 所有キーを使用した保管時の暗号化を無料で自動的に有効にします。ただし、カスタマーマネージドキーを使用する場合は AWS KMS 料金が適用されます。料金については、「AWS Key Management Service の料金
カスタマーマネージドキーによる暗号化
Step Functions は、カスタマーマネージド AWS KMS キーを使用してペイロードデータを復号してから、別のサービスに渡してタスクを実行します。データは転送中に Transport Layer Security () を使用して暗号化されますTLS。
統合サービスからデータが返されると、Step Functions はカスタマーマネージド AWS KMS キーを使用してデータを暗号化します。同じキーを使用して、多くの AWS サービスに暗号化を一貫して適用できます。
カスタマーマネージドキーは、次のリソースで使用できます。
-
ステートマシン - Standard ワークフロータイプと Express ワークフロータイプの両方
-
アクティビティ
データキーを指定するには、Step Functions KMS がデータの暗号化に使用するキー ID を入力します。
-
KMS キー ID — キー ID、キー 、エイリアス名ARN、またはエイリアス の形式の AWS KMS カスタマーマネージドキーのキー識別子ARN。
カスタマーマネージドキーを使用してステートマシンを作成する
前提条件: カスタマーマネージド AWS KMS キーを使用してステートマシンを作成する前に、ユーザーまたはロールに DescribeKey
および へのアクセス AWS KMS 許可が必要ですGenerateDataKey
。
次の手順は、 AWS コンソール、 、APIまたは AWS CloudFormation リソースを通じてインフラストラクチャをプロビジョニングすることで実行できます。(CloudFormation 例については、このガイドの後半で説明します)。
ステップ 1: AWS KMS キーを作成する
対称カスタマーマネージドキーは、 AWS KMS コンソールまたは を使用して作成できます AWS KMS APIs。
対称カスタマーマネージドキーを作成するには
AWS Key Management Service デベロッパーガイド にある 対称カスタマーマネージドキーの作成 ステップに従います。
注記
オプション : キーを作成するときに、キー管理者 を選択できます。選択したユーザーまたはロールには、 を介してキーを有効または無効にするなど、キーを管理するアクセス許可が付与されますAPI。キーユーザー を選択することもできます。これらのユーザーまたはロールには、暗号化オペレーションで AWS KMS キーを使用する権限が付与されます。
ステップ 2: AWS KMS キーポリシーを設定する
キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。カスタマーマネージドキーを作成する際に、キーポリシーを指定することができます。詳細については、「 AWS Key Management Service デベロッパーガイド」の「カスタマーマネージドキーへのアクセスの管理」を参照してください。
以下は、 AWS KMS キー管理者またはキーユーザー を含まない、コンソールからのキーポリシーの例です。
{ "Version": "2012-10-17", "Id": "key-consolepolicy-1", "Statement": [ { "Sid": "Enable IAM User Permissions for the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" } ] }
ポリシーでのアクセス許可の指定とキーアクセスのトラブルシューティングについては、「 AWS Key Management Service デベロッパーガイド」を参照してください。 https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html#example-no-iam
ステップ 3: (オプション) CloudWatch ログを暗号化するキーポリシーを追加する
Step Functions は、ログ記録とモニタリング CloudWatch のために と統合されています。 CloudWatch ログに送信されるデータを暗号化することもできます。暗号化されたログ記録を使用するには、ステートマシンキーポリシーのログ配信サービスへのアクセスを AWS KMS アクションに提供する必要があります。ステートマシンキーを使用してロググループを暗号化することも、ロググループ専用の別のキー (「ロググループキー」など) を選択することもできます。
ステートマシンの暗号化された CloudWatch ログ統合を有効にするには、 AWS KMS キーポリシーに以下を追加する必要があります。
{ "Id": "key-consolepolicy-logging", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable log service for a single log group", "Effect": "Allow", "Principal": { "Service": "logs.
region
.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region
:account-id
:log-group:log-group-name
" } } } ] }
注記
Condition
セクションでは、 AWS KMS キーを単一のロググループ に制限しますARN。
また、次のキーポリシーとの統合に対してログサービス配信を有効にする必要があります。
{ "Sid": "Enable log service delivery for integrations", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:Decrypt*", "Resource": "*" }
注記
CloudWatch ロググループの キーに対するアクセス許可の設定の詳細については、ログのドキュメントを参照してください。 AWS KMS
ステップ 4: ステートマシンを作成する
キーを作成してポリシーを設定したら、そのキーを使用して新しいステートマシンを作成できます。
ステートマシンを作成するときは、追加設定 を選択し、カスタマーマネージドキーで暗号化することを選択します。その後、キーを選択し、データキーの再利用期間を 1 分から 15 分に設定できます。
オプションで、ログレベルを設定し、 AWS KMS キーを使用してロググループを暗号化することを選択することで、ログ記録を有効にできます。
注記
暗号化は、Step Functions コンソールの新しいロググループでのみ有効にできます。 AWS KMS キーを既存のロググループに関連付ける方法については、AWS KMS 「キーをロググループに関連付ける」を参照してください。
ステップ 5: AWS KMS キーで暗号化されたステートマシンを呼び出す
暗号化されたステートマシンは通常どおり呼び出すことができ、データはカスタマーマネージドキーで暗号化されます。
カスタマーマネージドキーを使用して標準ワークフローと非同期 Express ワークフローの実行を開始するには、実行ロールに kms:Decrypt
および アクセスkms:GenerateDataKey
許可が必要です。Synchronous Express 実行の実行ロールには が必要ですkms:Decrypt
。コンソールでステートマシンを作成し、新しいロールの作成を選択すると、これらのアクセス許可が自動的に含まれます。
カスタマーマネージドキーを使用してアクティビティを作成する
カスタマーマネージドキーを使用して Step Functions アクティビティを作成することは、カスタマーマネージドキーを使用してステートマシンを作成することに似ています。カスタマーマネージド AWS KMS キーを使用してアクティビティを作成する前に、ユーザーまたはロールに必要なのは へのアクセス AWS KMS 許可のみですDescribeKey
。アクティビティの作成時に、 キーを選択し、暗号化設定パラメータを設定します。
Step Functions アクティビティリソースは変更不可能なままであることに注意してください。既存のアクティビティARNのアクティビティencryptionConfiguration
の を更新することはできません。新しいアクティビティリソースを作成する必要があります。アクティビティAPIエンドポイントへの呼び出し元には、 AWS KMS キーを使用してアクティビティを正常に作成するためのkms:DescribeKey
アクセス許可が必要です。
アクティビティタスクでカスタマーマネージドキーの暗号化が有効になっている場合、ステートマシンの実行ロールにはアクティビティキーの kms:GenerateDataKey
および アクセスkms:Decrypt
許可が必要です。Step Functions コンソールからこのステートマシンを作成する場合、自動ロール作成機能によってこれらのアクセス許可が追加されます。
条件付きの AWS KMS アクセス許可ポリシーの範囲を絞り込む
暗号化コンテキストをキーポリシーおよび IAMポリシーで として使用conditions
して、対称カスタマーマネージドキーへのアクセスを制御できます。特定のロールに代わって Step Functions からのリクエストに AWS KMS キーの使用を制限するには、 kms:ViaService
条件を使用できます。
暗号化コンテキストによるスコープ
暗号化コンテキストは、データに関する追加のコンテキスト情報が含まれたキーと値のペアのオプションのセットです。
AWS KMS は、追加の認証データとして暗号化コンテキストを使用して、認証された暗号化 をサポートします。データを暗号化するリクエストに暗号化コンテキストを含めると、 は暗号化コンテキストを暗号化されたデータに AWS KMS バインドします。データを復号化するには、そのリクエストに (暗号化時と) 同じ暗号化コンテキストを含めます。
Step Functions は、 AWS KMS 暗号化オペレーションで暗号化コンテキストを提供します。キーはステートマシンaws:states:stateMachineArn
用またはアクティビティaws:states:activityArn
用で、値はリソース Amazon リソースネーム () ですARN。
"encryptionContext": {"aws:states:stateMachineArn": "arn:aws:states:region
:123456789012:stateMachine:state_machine_name
"}
"encryptionContext": {"aws:states:activityArn": "arn:aws:states:region
:123456789012:activity:activity_name
"}
次の例は、実行ロールの AWS KMS キーの使用を、 kms:EncryptionContext
および aws:states:stateMachineArn
コンテキストキーを持つ特定のステートマシンに制限する方法を示しています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow KMS Permissions for StepFunctionsWorkflowExecutions", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:aa-example-1:1234567890:key/a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:states:stateMachineArn": "arn:aws:states:aa-example-1:1234567890:stateMachine:MyStateMachine" } } } ] }
km によるスコープ:ViaService
kms:ViaService
条件キーは、 AWS Key Management Service キーの使用を、指定された AWS サービスからのリクエストに制限します。
次のポリシー例では、 kms:ViaService
条件を使用して、リクエストが ca-central-1
リージョンの Step Functions から発信され、 に代わって動作する場合にのみ、 AWS KMS キーを特定のアクションに使用できるようにします ExampleRole。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow access for Key Administrators in a region", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1234567890:role/ExampleRole" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "states.ca-central-1.amazonaws.com" } } } ] }
注記
このkms:ViaService
条件は、API発信者が AWS KMS アクセス許可を必要とする場合にのみ適用されます (、CreateStateMachine
CreateActivity
、 GetActivityTask
など)。実行ロールにkms:ViaService
条件を追加すると、新しい実行が開始されたり、実行中の実行が失敗したりする可能性があります。
API 発信者に必要なアクセス許可
暗号化されたデータを返す Step Functions APIアクションを呼び出すには、発信者に アクセス許可が必要です AWS KMS 。または、一部のAPIアクションにはメタデータのみを返すオプション (METADATA_ONLY
) があり、 AWS KMS アクセス許可の要件は削除されています。詳細については、「Step FunctionsAPI」を参照してください。
カスタマーマネージドキー暗号化の使用時に実行を正常に完了するには、ステートマシンで使用される AWS KMS キーの実行ロールkms:GenerateDataKey
とkms:Decrypt
アクセス許可を付与する必要があります。
次の表は、Step Functions ステートマシンAPIの発信者に付与するために必要な AWS KMS アクセス許可を示しています。ロールのキーポリシーまたはIAMポリシーでアクセス許可を指定できます。
APIs ステートマシンの AWS KMS キーの使用 | 発信者が必須 |
CreateStateMachine | kms:DescribeKey、kms:GenerateDataKey |
UpdateStateMachine | kms:DescribeKey、kms:GenerateDataKey |
DescribeStateMachine | kms:Decrypt |
DescribeStateMachineForExecution | kms:Decrypt |
StartExecution | -- |
StartSyncExecution | kms:Decrypt |
SendTaskSuccess | -- |
SendTaskFailure | -- |
StopExecution | -- |
RedriveExecution | -- |
DescribeExecution | kms:Decrypt |
GetExecutionHistory | kms:Decrypt |
次の表は、Step Functions アクティビティAPI発信者 に付与するために必要な AWS KMS アクセス許可を示しています。ロールのキーポリシーまたはIAMポリシーでアクセス許可を指定できます。
APIs アクティビティの AWS KMS キーの使用 | 発信者が必須 |
CreateActivity | km:DescribeKey |
GetActivityTask | kms:Decrypt |
発信者または実行ロールにアクセス許可を付与するタイミング
IAM ロールまたはユーザーが Step Functions を呼び出すとAPI、Step Functions サービスはAPI発信者 AWS KMS に代わって を呼び出します。この場合、API発信者にアクセス AWS KMS 許可を付与する必要があります。実行ロールが AWS KMS 直接 を呼び出す場合は、実行ロールに対する AWS KMS アクセス許可を付与する必要があります。
AWS CloudFormation 暗号化設定の リソース
AWS CloudFormation Step Functions の リソースタイプは、暗号化設定を使用してステートマシンとアクティビティリソースをプロビジョニングできます。
デフォルトでは、Step Functions は透過的なサーバー側の暗号化を提供します。AWS::StepFunctions::Activity
と の両方が、サーバー側の暗号化用にカスタマーマネージド AWS KMS キーを設定できるオプションの EncryptionConfiguration
プロパティAWS::StepFunctions::StateMachine
を受け入れます。
前提条件: カスタマーマネージド AWS KMS キーを使用してステートマシンを作成する前に、ユーザーまたはロールに DescribeKey
および へのアクセス AWS KMS 許可が必要ですGenerateDataKey
。
の更新では、中断 StateMachine は必要ありません。アクティビティリソースの更新には、次のものが必要です: 代替 。
AWS CloudFormation テンプレートで EncryptionConfiguration
プロパティを宣言するには、次の構文を使用します。
JSON
{ "KmsKeyId" : String, "KmsDataKeyReusePeriodSeconds" : Integer, "Type" : String }
YAML
KmsKeyId: String KmsDataKeyReusePeriodSeconds: Integer Type: String
プロパティ
-
タイプ - ステートマシンまたはアクティビティの暗号化オプション。許可される値:
CUSTOMER_MANAGED_KMS_KEY
|AWS_OWNED_KEY
-
KmsKeyId - データキーを暗号化する対称暗号化ARNキーARNのエイリアス、エイリアス、 AWS KMS キー ID、またはキー。別の AWS アカウントで AWS KMS キーを指定するには、顧客はキー ARN またはエイリアス を使用する必要がありますARN。の詳細については kmsKeyId、「 AWS KMS ドキュメントKeyId」の「」を参照してください。
-
KmsDataKeyReusePeriodSeconds - SFNがデータキーを再利用する最大期間。期間が終了すると、Step Functions は を呼び出します
GenerateDataKey
。この設定は、Type が の場合にのみ設定できますCUSTOMER_MANAGED_KMS_KEY
。値の範囲は 60~900 秒です。デフォルトは 300 秒です。
AWS CloudFormation 例
例: カスタマーマネージドキー StateMachine の使用
AWSTemplateFormatVersion: '2010-09-09' Description: An example template for a Step Functions State Machine. Resources: MyStateMachine: Type: AWS::StepFunctions::StateMachine Properties: StateMachineName: HelloWorld-StateMachine Definition: StartAt: PassState States: PassState: Type: Pass End: true RoleArn: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/example" EncryptionConfiguration: KmsKeyId: !Ref MyKmsKey KmsDataKeyReusePeriodSeconds: 100 Type: CUSTOMER_MANAGED_KMS_KEY MyKmsKey: Type: AWS::KMS::Key Properties: Description: Symmetric KMS key used for encryption/decryption
例: カスタマーマネージドキーを使用したアクティビティ
AWSTemplateFormatVersion: '2010-09-09' Description: An example template for a Step Functions Activity. Resources: Activity: Type: AWS::StepFunctions::Activity Properties: Name: ActivityWithKmsEncryption EncryptionConfiguration: KmsKeyId: !Ref MyKmsKey KmsDataKeyReusePeriodSeconds: 100 Type: CUSTOMER_MANAGED_KMS_KEY MyKmsKey: Type: AWS::KMS::Key Properties: Description: Symmetric KMS key used for encryption/decryption
アクティビティの暗号化を更新するには、新しいリソースを作成する必要があります
アクティビティ設定はイミュータブルであり、リソース名は一意である必要があります。暗号化にカスタマーマネージドキーを設定するには、新しいアクティビティ を作成する必要があります。既存のアクティビティのCFNテンプレート内の設定を変更しようとすると、ActivityAlreadyExists
例外が発生します。
カスタマーマネージドキーを含めるようにアクティビティを更新するには、CFNテンプレート内に新しいアクティビティ名を設定します。カスタマーマネージドキー設定を使用して新しいアクティビティを作成する例を次に示します。
既存のアクティビティ定義
AWSTemplateFormatVersion: '2010-09-09'
Description: An example template for a new Step Functions Activity.
Resources:
Activity:
Type: AWS::StepFunctions::Activity
Properties:
Name: ActivityName
EncryptionConfiguration:
Type: AWS_OWNED_KEY
新しいアクティビティ定義
AWSTemplateFormatVersion: '2010-09-09' Description: An example template for a Step Functions Activity. Resources: Activity: Type: AWS::StepFunctions::Activity Properties: Name: ActivityWithKmsEncryption EncryptionConfiguration: KmsKeyId: !Ref MyKmsKey KmsDataKeyReusePeriodSeconds: 100 Type: CUSTOMER_MANAGED_KMS_KEY MyKmsKey: Type: AWS::KMS::Key Properties: Description: Symmetric KMS key used for encryption/decryption
暗号化キーの使用状況のモニタリング
AWS KMS カスタマーマネージドキーを使用して Step Functions リソースを暗号化する場合、 を使用して CloudTrail、Step Functions が に送信するリクエストを追跡できます AWS KMS。
また、カスタマー管理キーがどのように使用されているかを特定するために、暗号化コンテキストを監査レコードおよびログで使用することもできます。暗号化コンテキストは、 によって生成されたログにも表示されますAWS CloudTrail。
次の例はDecrypt
、カスタマーマネージドキーで暗号化されたデータにアクセスGenerateDataKey
するために Step Functions によって呼び出される AWS KMS オペレーションをモニタリングするための DescribeKey
、、および の CloudTrail イベントです。
FAQs
キーが削除対象としてマークされている場合、または削除された場合はどうなりますか AWS KMS?
キーが削除されるか、 で削除対象としてマークされると AWS KMS、関連する実行中の実行は失敗します。ワークフローに関連付けられたキーを削除または変更するまで、新しい実行を開始することはできません。 AWS KMS キーを削除すると、ワークフロー実行に関連付けられたすべての暗号化されたデータは暗号化されたままになり、復号化できなくなり、データは回復できなくなります。
で AWS KMS キーが無効になっている場合はどうなりますか AWS KMS?
で AWS KMS キーが無効になっている場合 AWS KMS、関連する実行中の実行は失敗します。新しい実行を開始することはできません。再度有効にするまで、その無効化された AWS KMS キーで暗号化されたデータを復号できなくなります。
に送信された実行ステータス変更イベントはどうなりますか EventBridge?
カスタマーマネージド AWS KMS キーを使用して暗号化されたワークフローの実行ステータス変更イベントには、実行入力、出力、エラー、および原因は含まれません。
詳細
保管時のデータ暗号化の詳細については、「 AWS Key Management Service デベロッパーガイド」の「 のAWS Key Management Service 概念とセキュリティのベストプラクティス」を参照してください。 AWS Key Management Service