翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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、エイリアス名、またはエイリアス ARN の形式のAWS KMSカスタマーマネージドキーのキー識別子。
カスタマーマネージドキーを使用してステートマシンを作成する
前提条件: カスタマーマネージドAWS KMSキーを使用してステートマシンを作成する前に、ユーザーまたはロールに DescribeKeyおよび へのアクセスAWS KMS許可が必要ですGenerateDataKey。
次の手順は、AWSコンソール、API、または CloudFormationリソースを通じてインフラストラクチャをプロビジョニングすることで実行できます。(CloudFormation の例は、このガイドの後半で説明します。)
ステップ 1: AWS KMSキーを作成する
対称カスタマーマネージドキーは、 AWS KMSコンソールまたは AWS KMSAPIs を使用して作成できます。
対称カスタマーマネージドキーを作成するには
「AWS Key Management Service デベロッパーガイド」にある「対称カスタマーマネージドキーの作成」ステップに従います。
注記
オプション: キーを作成する際、キー管理者を選択できます。選択したユーザーまたはロールには、API を使用してキーを有効または無効にするなど、キーを管理するアクセス権限が付与されます。キーユーザーを選択することもできます。これらのユーザーまたはロールには、暗号化オペレーションで AWS KMSキーを使用する権限が付与されます。
ステップ 2: AWS KMSキーポリシーを設定する
キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。キーポリシーは、カスタマーマネージドキーの作成時に指定できます。詳細については、「AWS Key Management Service デベロッパーガイド」の「Managing access to customer managed keys」を参照してください。
以下は、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::123456789012:root" }, "Action": "kms:*", "Resource": "*" } ] }
ポリシーのアクセス権限の指定およびキーアクセスのトラブルシューティングの詳細については、「AWS Key Management Service デベロッパーガイド」を参照してください。
ステップ 3: CloudWatch Logs を暗号化するためのキーポリシーを追加する
Step Functions は CloudWatch と統合され、ログ記録とモニタリングを行います。独自の KMS キーを使用してステートマシンのサーバー側の暗号化を有効にし、CloudWatch Log 統合を有効にする場合は、 delivery.logs.amazonaws.com がAWS KMSキーポリシーからkms:Decryptアクションを実行できるようにする必要があります。
{ "Sid": "Enable log service delivery for integrations", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "*" }
AWS KMSキーを使用してステートマシン暗号化を有効にし、ステートマシンで CloudWatch Logs 統合が有効になっている場合、ステートマシンの実行ロールには次のポリシーが必要です。
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowKMSPermissionForCloudWatchLogGroup", "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "arn:aws:kms:us-east-1:123456789012:key/keyId", "Condition": { "StringEquals": { "kms:EncryptionContext:SourceArn": "arn:aws:logs:us-east-1:123456789012:*" } } } ] }
ステップ 4: CloudWatch ロググループを暗号化する (オプション)
CloudWatch Log Group のログの暗号化は、独自のAWS KMSキーを使用して有効にできます。これを行うには、そのAWS KMSキーに次のポリシーも追加する必要があります。
注記
同じキーまたは異なる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.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:123456789012:log-group:LOG_GROUP_NAME" } } } ] }
注記
Condition セクションでは、AWS KMSキーを 1 つのロググループ ARN に制限します。
注記
ロググループの キーに対するアクセス許可の設定の詳細については、CloudWatch Logs のドキュメントを参照してください。AWS KMS
ステップ 5: ステートマシンを作成する
キーを作成してポリシーを設定したら、キーを使用して新しいステートマシンを作成できます。
ステートマシンを作成する際は、[追加の設定] を選択し、カスタマーマネージドキーで暗号化することを選択します。その後、キーを選択し、データキーの再利用期間を 1 分から 15 分に設定できます。
必要に応じて、ログレベルを設定し、 AWS KMSキーを使用してロググループを暗号化することを選択することで、ログ記録を有効にできます。
注記
Step Functions コンソールでは、新しいロググループでのみ暗号化を有効にできます。AWS KMSキーを既存のロググループに関連付ける方法については、AWS KMS「キーをロググループに関連付ける」を参照してください。
カスタマーマネージドキーを使用して Standard ワークフローと非同期 Express ワークフローの実行を正常に開始するには、実行ロールに kms:Decrypt および kms:GenerateDataKey アクセス許可が必要です。同期 Express 実行の実行ロールには kms:Decrypt が必要です。コンソールでステートマシンを作成し、[新しいロールの作成] を選択すると、これらのアクセス許可が自動的に含まれます。
実行ロールのポリシーの例を次に示します。
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowKMSPermissionsForStepFunctionsWorkflowExecutions", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/keyId" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:states:stateMachineArn": [ "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName" ] } } } ] }
ステップ 6: AWS KMSキーで暗号化されたステートマシンを呼び出す
暗号化されたステートマシンは通常どおり呼び出すことができ、データはカスタマーマネージドキーで暗号化されます。
カスタマーマネージドキーを使用してアクティビティを作成する
カスタマーマネージドキーを使用して Step Functions アクティビティを作成することは、カスタマーマネージドキーを使用してステートマシンを作成するのと似ています。カスタマーマネージドAWS KMSキーを使用してアクティビティを作成する前に、ユーザーまたはロールには へのアクセスAWS KMS許可のみが必要ですDescribeKey。アクティビティの作成時に、キーを選択し、暗号化設定パラメータを設定します。
Step Functions アクティビティリソースは変更できないままであることに注意してください。既存のアクティビティのアクティビティ ARN の encryptionConfiguration を更新することはできません。新しいアクティビティリソースを作成する必要があります。Activity API エンドポイントへの呼び出し元には、AWS KMSキーを使用してアクティビティを正常に作成するためのkms:DescribeKeyアクセス許可が必要です。
アクティビティタスクでカスタマーマネージドキー暗号化が有効になっている場合、ステートマシン実行ロールはアクティビティキーに kms:GenerateDataKey および kms:Decrypt アクセス許可を要求します。Step Functions コンソールからこのステートマシンを作成する場合、自動ロール作成機能によってこれらのアクセス許可が追加されます。
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowKMSPermissionsForStepFunctionsActivities", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/keyId" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:states:activityArn": [ "arn:aws:states:us-east-1:123456789012:activity:activityName" ] } } } ] }
条件付きで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:account-id:stateMachine:stateMachineName"}"encryptionContext": {"aws:states:activityArn": "arn:aws:states:region:account-id:activity:activityName"}次の例は、 kms:EncryptionContextおよび aws:states:stateMachineArnコンテキストAWS KMSキーを使用して、実行ロールのキーの使用を特定のステートマシンに制限する方法を示しています。
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowKeyManagement", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/keyId" ], "Condition": { "StringEquals": { "kms:EncryptionContext:aws:states:stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName" } } } ] }
kms:ViaService を使用したスコーピング
kms:ViaService 条件キーは、 AWS Key Management Serviceキーの使用を、指定されたAWSサービスからのリクエストに制限します。
次のポリシー例では、 kms:ViaService条件を使用して、リクエストが us-east-1リージョンの Step Functions から発信され、ExampleRole に代わって動作する場合にのみ、AWS KMSキーを特定のアクションに使用できるようにします。
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Allow access for Key Administrators in a region", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ExampleRole" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "states.us-east-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 Functions API を参照してください。
カスタマーマネージドキー暗号化の使用時に実行を正常に完了するには、実行ロールを付与kms:GenerateDataKeyし、ステートマシンが使用するAWS KMSキーのkms:Decryptアクセス許可を付与する必要があります。
次の表は、ステートマシンの AWS KMSキーを使用して API の Step Functions APIs 発信者に提供する必要があるAWS KMSアクセス許可を示しています。ロールのキーポリシーまたは IAM ポリシーにアクセス許可を付与できます。
| ステートマシンの AWS KMS キーを使用する API | 発信者が必須 |
| 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 |
次の表は、アクティビティのAWS KMSキーAPIs を使用して API の Step Functions API 発信者に提供する必要があるAWS KMSアクセス許可を示しています。ロールのキーポリシーまたは IAM ポリシーでアクセス許可を付与できます。
| アクティビティの AWS KMS キーを使用する API | 発信者が必須 |
| CreateActivity | kms:DescribeKey |
| GetActivityTask | kms:Decrypt |
発信者または実行ロールにアクセス許可を付与するタイミング
IAM ロールまたはユーザーが Step Functions API を呼び出すと、Step Functions サービスは API 発信者AWS KMSに代わって を呼び出します。この場合、API 発信者にアクセスAWS KMS許可を付与する必要があります。実行ロールがAWS KMS直接 を呼び出す場合は、実行ロールに対するAWS KMSアクセス許可を付与する必要があります。
CloudFormation暗号化設定の リソース
CloudFormationStep Functions の リソースタイプは、暗号化設定を使用してステートマシンとアクティビティリソースをプロビジョニングできます。
デフォルトでは、Step Functions は透過的なサーバー側の暗号化を提供します。AWS::StepFunctions::Activity と の両方が、サーバー側の暗号化用にカスタマーマネージドAWS KMSキーを設定できるオプションの EncryptionConfigurationプロパティAWS::StepFunctions::StateMachineを受け入れます。
前提条件: カスタマーマネージドAWS KMSキーを使用してステートマシンを作成する前に、ユーザーまたはロールに DescribeKeyおよび へのアクセスAWS KMS許可が必要ですGenerateDataKey。
StateMachine の更新には、中断は必要ありません。アクティビティリソースの更新には、置換が必要です。
CloudFormationテンプレートで EncryptionConfigurationプロパティを宣言するには、次の構文を使用します。
JSON
{ "KmsKeyId" : String, "KmsDataKeyReusePeriodSeconds" : Integer, "Type" : String }
YAML
KmsKeyId: String KmsDataKeyReusePeriodSeconds: Integer Type: String
プロパティ
-
タイプ - ステートマシンまたはアクティビティの暗号化オプション。許可される値:
CUSTOMER_MANAGED_KMS_KEY|AWS_OWNED_KEY -
KmsKeyId - データキーを暗号化する対称暗号化AWS KMSキーのエイリアス、エイリアス ARN、キー ID、またはキー ARN。別のAWSアカウントでAWS KMSキーを指定するには、顧客はキー ARN またはエイリアス ARN を使用する必要があります。kmsKeyId の詳細については、AWS KMSドキュメントのKeyId」を参照してください。
-
KmsDataKeyReusePeriodSeconds - SFN がデータキーを再利用する最大期間。期間が終了すると、Step Functions は
GenerateDataKeyを呼び出します。この設定は、Type がCUSTOMER_MANAGED_KMS_KEYの場合にのみ設定できます。値の範囲は 60~900 秒です。デフォルトは 300 秒です。
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 イベントです。
よくある質問
キーが削除対象としてマークされているか、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 concepts」および「security best practices for AWS Key Management Service」を参照してください。