

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Step Functions での保管中のデータの暗号化
<a name="encryption-at-rest"></a>

**ブログを読む**  
カスタマーマネージドキーの詳細については、[「カスタマーマネージド AWS KMS キーによるデータセキュリティの強化](https://aws.amazon.com/blogs/compute/strengthening-data-security-in-aws-step-functions-with-a-customer-managed-aws-kms-key/)」を参照してください。

AWS Step Functions は常に、サーバー側の透過的な暗号化を使用して保管中のデータを暗号化します。保管中のデータをデフォルトで暗号化して、機密データの保護に伴う運用上のオーバーヘッドと複雑な作業を軽減します。セキュリティを重視したアプリケーションを構築して、暗号化のコンプライアンスと規制の厳格な要件を満たすことができます。

この暗号化レイヤーを無効にしたり、代替の暗号化タイプを選択したりすることはできませんが、ステートマシンとアクティビティリソースを作成するときにカスタマーマネージドキーを選択することで、既存の AWS 所有の暗号化キーに 2 番目の暗号化レイヤーを追加できます。
+ **カスタマーマネージドキー** — Step Functions は、作成、所有、管理する対称カスタマーマネージドキーを使用して、既存の AWS 所有暗号化に 2 番目の暗号化レイヤーを追加します。この暗号化層はユーザーが完全に制御できるため、次のようなタスクを実行できます。
  + キーポリシーの策定と維持
  + IAM ポリシーとグラントの策定と維持
  + キーポリシーの有効化と無効化
  + キー暗号化マテリアルのローテーション
  +  タグを追加する
  + キーエイリアスの作成
  + 削除のためのキースケジューリング

  詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)」を参照してください。

 AWS Step Functions ステートマシンとアクティビティの**カスタマーマネージドキー**を使用してデータを暗号化できます。**ステートマシン**を作成または更新するとき、および**アクティビティ**を作成するときに、対称 AWS KMS キーとデータキーの再利用期間を設定できます。実行履歴とステートマシン定義は、ステートマシンに適用されたキーで暗号化されます。アクティビティ入力は、アクティビティに適用されたキーで暗号化されます。

カスタマーマネージド AWS KMS キーを使用すると、**保護された医療情報 (PHI)** を含む顧客データを不正アクセスから保護できます。Step Functions は CloudTrail と統合されているため、イベント履歴の CloudTrail コンソールで最新のイベントを表示および監査できます。

詳細については AWS KMS、[「 とは」を参照してください AWS Key Management Service。](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)

**注記**  
Step Functions は、 AWS 所有キーを使用した保管時の暗号化を無料で自動的に有効にします。ただし、カスタマーマネージドキーを使用する場合、 AWS KMS 料金が適用されます。料金については、「[AWS Key Management Service の料金](https://aws.amazon.com/kms/pricing/)」を参照してください。

## カスタマーマネージドキーでの暗号化
<a name="enable-custom-encryption"></a>

 Step Functions は、ペイロードデータをカスタマーマネージド AWS KMS キーで復号してから、別のサービスに渡してタスクを実行します。Transport Layer Security (TLS) を使用して、転送中のデータを暗号化します。

 統合サービスからデータが返されると、Step Functions はカスタマーマネージド AWS KMS キーを使用してデータを暗号化します。同じキーを使用して、多くの AWS サービスに暗号化を一貫して適用できます。

カスタマーマネージドキーを指定して、次のリソースを暗号化できます。
+ **ステートマシン** - Standard および Express の両方のワークフロータイプ
+ **アクティビティ**

データキーを指定するには、Step Functions がデータの暗号化に使用する **KMS キー ID** を入力します。
+ **KMS キー ID** — キー ID、[キー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) ARN、エイリアス名、またはエイリアス ARN の形式の AWS KMS カスタマーマネージドキーのキー識別子。

## カスタマーマネージドキーを使用してステートマシンを作成する
<a name="create-state-machine-with-cmk"></a>

**前提条件:** カスタマーマネージド AWS KMS キーを使用してステートマシンを作成する前に、ユーザーまたはロールに `DescribeKey`および へのアクセス AWS KMS 許可が必要です`GenerateDataKey`。

次の手順は、 AWS コンソール、 API、または CloudFormation リソースを使用してインフラストラクチャをプロビジョニングすることで実行できます。(CloudFormation の例は、このガイドの後半で説明します。)

### ステップ 1: AWS KMS キーを作成する
<a name="create-key"></a>

 対称カスタマーマネージドキーは、 AWS KMS コンソールまたは AWS KMS APIs を使用して作成できます。

**対称カスタマーマネージドキーを作成するには**

「*AWS Key Management Service デベロッパーガイド*」にある「[対称カスタマーマネージドキーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)」ステップに従います。

**注記**  
*オプション*: キーを作成する際、**キー管理者**を選択できます。選択したユーザーまたはロールには、API を使用してキーを有効または無効にするなど、キーを管理するアクセス権限が付与されます。**キーユーザー**を選択することもできます。これらのユーザーまたはロールには、暗号化オペレーションで AWS KMS キーを使用する権限が付与されます。

### ステップ 2: AWS KMS キーポリシーを設定する
<a name="create-key-policy"></a>

キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。キーポリシーは、カスタマーマネージドキーの作成時に指定できます。詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[Managing access to customer managed keys](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access)」を参照してください。

以下は、 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": "*"
    }
  ]
}
```

[ポリシーのアクセス権限の指定](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#overview-policy-elements)および[キーアクセスのトラブルシューティング](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html#example-no-iam)の詳細については、「*AWS Key Management Service デベロッパーガイド*」を参照してください。

### ステップ 3: CloudWatch Logs を暗号化するためのキーポリシーを追加する
<a name="encrypt-logs"></a>

 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 ロググループを暗号化する *(オプション)*
<a name="encrypt-cloudwatch-log-group"></a>

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 キーを単一のロググループ ARN に制限します。

**注記**  
[ロググループの キーに対するアクセス許可の設定の詳細については、CloudWatch Logs のドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html#cmk-permissions)を参照してください。 AWS KMS 

### ステップ 5: ステートマシンを作成する
<a name="create-state-machine"></a>

キーを作成してポリシーを設定したら、キーを使用して新しいステートマシンを作成できます。

ステートマシンを作成する際は、**[追加の設定]** を選択し、カスタマーマネージドキーで暗号化することを選択します。その後、キーを選択し、データキーの再利用期間を 1 分から 15 分に設定できます。

必要に応じて、ログレベルを設定し、 AWS KMS キーを使用してロググループを暗号化することを選択することで、ログ記録を有効にできます。

**注記**  
Step Functions コンソールでは、**新しいロググループ**でのみ暗号化を有効にできます。 AWS KMS キーを既存のロググループに関連付ける方法については、[AWS KMS 「キーをロググループに関連付ける](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html#associate-cmk)」を参照してください。

カスタマーマネージドキーを使用して 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 キーで暗号化されたステートマシンを呼び出す
<a name="invoke-encrypted-state-machine"></a>

暗号化されたステートマシンは通常どおり呼び出すことができ、データはカスタマーマネージドキーで暗号化されます。

## カスタマーマネージドキーを使用してアクティビティを作成する
<a name="create-activity-with-cmk"></a>

カスタマーマネージドキーを使用して 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 アクセス許可ポリシーをスコープダウンする
<a name="scope-down-kms-permission-policies-with-conditions"></a>

対称カスタマーマネージドキーへのアクセスを制御するために、キーポリシーと IAM ポリシー内の*暗号化コンテキスト*を `conditions` として使用することもできます。特定のロールに代わって Step Functions からのリクエストに AWS KMS キーの使用を制限するには、 `kms:ViaService`条件を使用できます。

### 暗号化コンテキストを使用したスコーピング
<a name="stepfunctions-encryption-context"></a>

[暗号化コンテキスト](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)は、データに関する追加のコンテキスト情報を含むキーと値のペアのオプションセットです。

AWS KMS は、追加の認証済みデータとして暗号化コンテキストを使用して、認証済み暗号化をサポートします。データを暗号化するリクエストに暗号化コンテキストを含めると、 は暗号化コンテキストを暗号化されたデータに AWS KMS バインドします。データを復号化するには、そのリクエストに (暗号化時と) 同じ暗号化コンテキストを含めます。

Step Functions は暗号化 AWS KMS オペレーションで暗号化コンテキストを提供します。キーはステートマシン`aws:states:stateMachineArn`用またはアクティビティ`aws:states:activityArn`用で、値はリソース [Amazon リソースネーム](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) (ARN) です。

**Example**  

```
"encryptionContext": {"aws:states:stateMachineArn": "arn:aws:states:{{region}}:{{account-id}}:stateMachine:stateMachineName"}
```

**Example**  

```
"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 を使用したスコーピング
<a name="stepfunctions-via-service"></a>

`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 呼び出し元 (、、 など) `CreateStateMachine` `CreateActivity`が AWS KMS アクセス許可を必要とする場合にのみ適用されます`GetActivityTask`。**実行ロール**に `kms:ViaService` 条件を追加すると、新しい実行の開始が妨げられたり、実行中の実行が失敗したりする可能性があります。

## API 発信者に必要なアクセス許可
<a name="using-api-with-encryption-required-permissions"></a>

暗号化されたデータを返す Step Functions API アクションを呼び出すには、発信者に AWS KMS アクセス許可が必要です。または、一部の API アクションにはメタデータのみを返すオプション (`METADATA_ONLY`) があり、 AWS KMS アクセス許可の要件がなくなります。詳細については、Step Functions API を参照してください。

カスタマーマネージドキー暗号化の使用時に実行を正常に完了するには、実行ロールを付与`kms:GenerateDataKey`し、ステートマシンが使用する AWS KMS キーの`kms:Decrypt`アクセス許可を付与する必要があります。

次の表は、**ステートマシンの AWS KMS キー**APIs を使用して API の Step Functions API 発信者に提供する必要がある 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 暗号化設定の リソース
<a name="cfn-resources-for-encryption-configuration"></a>

 CloudFormation Step Functions の リソースタイプは、暗号化設定を使用してステートマシンとアクティビティリソースをプロビジョニングできます。

 デフォルトでは、Step Functions は透過的なサーバー側の暗号化を提供します。[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-activity.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-activity.html) と の両方が、サーバー側の暗号化用にカスタマーマネージド AWS KMS キーを設定できるオプションの `EncryptionConfiguration`プロパティ[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)を受け入れます。

**前提条件:** カスタマーマネージド AWS KMS キーを使用してステートマシンを作成する前に、ユーザーまたはロールに `DescribeKey`および へのアクセス AWS KMS 許可が必要です`GenerateDataKey`。

 StateMachine の更新には、[中断は必要ありません](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt)。アクティビティリソースの更新には、[置換](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)が必要です。

 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](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters)」を参照してください。
+ **KmsDataKeyReusePeriodSeconds** - SFN がデータキーを再利用する最大期間。期間が終了すると、Step Functions は `GenerateDataKey` を呼び出します。この設定は、**Type** が `CUSTOMER_MANAGED_KMS_KEY` の場合にのみ設定できます。値の範囲は 60～900 秒です。デフォルトは 300 秒です。

### CloudFormation 例
<a name="cfn-examples"></a>

#### 例: カスタマーマネージドキーを使用した StateMachine
<a name="statemachine-with-managed-key"></a>

```
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
```

#### 例: カスタマーマネージドキーを使用したアクティビティ
<a name="activity-with-managed-key"></a>

```
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
```

#### アクティビティの暗号化を更新するには新しいリソースの作成が必要
<a name="updating-encryption-for-an-activity-requires-creating-a-new-resource"></a>

 アクティビティ設定はイミュータブルであり、リソース名は一意である必要があります。暗号化にカスタマーマネージドキーを設定するには、**新しいアクティビティ**を作成する必要があります。既存のアクティビティの 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
```

## 暗号化キー使用のモニタリング
<a name="monitoring-encryption-keys"></a>

 AWS KMS カスタマーマネージドキーを使用して Step Functions リソースを暗号化する場合、CloudTrail を使用して Step Functions が送信するリクエストを追跡できます AWS KMS。

また、カスタマー管理キーがどのように使用されているかを特定するために、暗号化コンテキストを監査レコードおよびログで使用することもできます。暗号化コンテキストは、[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) が生成したログにも表示されます。

次の例は`Decrypt`、カスタマーマネージドキーによって暗号化されたデータにアクセス`GenerateDataKey`するために Step Functions によって呼び出される AWS KMS オペレーションをモニタリングするための、`DescribeKey`、、および の CloudTrail イベントです。

------
#### [ Decrypt ]

ユーザーが暗号化されたステートマシンまたはアクティビティにアクセスすると、Step Functions は `Decrypt` オペレーションを呼び出し、保存されている暗号化されたデータキーを使用して暗号化済みのデータにアクセスします。

次に、`Decrypt` オペレーションを記録するイベントの例を示します。

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "111122223333:Sampleuser01",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
    "accountId": "111122223333",
    "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "111122223333:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "userName": "Admin"
      },
      "attributes": {
        "creationDate": "2024-07-05T21:06:27Z",
        "mfaAuthenticated": "false"
      }
    },
    "invokedBy": "states.amazonaws.com"
  },
  "eventTime": "2024-07-05T21:12:21Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "Decrypt",
  "awsRegion": "aa-example-1",
  "sourceIPAddress": "states.amazonaws.com",
  "userAgent": "states.amazonaws.com",
  "requestParameters": {
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "encryptionContext": {
            "aws:states:stateMachineArn": "arn:aws:states:aa-example-1:111122223333:stateMachine:example1"
        }
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ DescribeKey ]

Step Functions は `DescribeKey` オペレーションを使用して、ステートマシンまたはアクティビティに関連付けられた AWS KMS カスタマーマネージドキーがアカウントとリージョンに存在するかどうかを確認します。

次に、`DescribeKey` オペレーションを記録するイベントの例を示します。

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "111122223333:Sampleuser01",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
    "accountId": "111122223333",
    "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "111122223333:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "userName": "Admin"
      },
      "attributes": {
        "creationDate": "2024-07-05T21:06:27Z",
        "mfaAuthenticated": "false"
      }
    },
    "invokedBy": "states.amazonaws.com"
  },
  "eventTime": "2024-07-05T21:12:21Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "DescribeKey",
  "awsRegion": "aa-example-1",
  "sourceIPAddress": "states.amazonaws.com",
  "userAgent": "states.amazonaws.com",
  "requestParameters": {
    "keyId": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
  },
  "responseElements": null,
  "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "readOnly": true,
  "resources": [
    {
      "accountId": "111122223333",
      "type": "AWS::KMS::Key",
      "ARN": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": true,
  "recipientAccountId": "111122223333",
  "eventCategory": "Management",
  "sessionCredentialFromConsole": "true"
}
```

------
#### [ GenerateDataKey ]

ステートマシンまたはアクティビティの AWS KMS カスタマーマネージドキーを有効にすると、Step Functions は暗号化ステートマシン定義または実行データにデータキーを取得する`GenerateDataKey`リクエストを送信します。

次に、`GenerateDataKey` オペレーションを記録するイベントの例を示します。

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "111122223333:Sampleuser01",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
    "accountId": "111122223333",
    "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "111122223333:Sampleuser01",
        "arn": "arn:aws:iam::111122223333:role/Admin",
        "accountId": "111122223333",
        "userName": "Admin"
      },
      "attributes": {
        "creationDate": "2024-07-05T21:06:27Z",
        "mfaAuthenticated": "false"
      }
    },
    "invokedBy": "states.amazonaws.com"
  },
  "eventTime": "2024-07-05T21:12:21Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "GenerateDataKey",
  "awsRegion": "aa-example-1",
  "sourceIPAddress": "states.amazonaws.com",
  "userAgent": "states.amazonaws.com",
  "requestParameters": {
    "keySpec": "AES_256",
    "encryptionContext": {
      "aws:states:stateMachineArn": "arn:aws:states:aa-example-1:111122223333:stateMachine:example1"
    },
    "keyId": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
  },
  "responseElements": null,
  "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "readOnly": true,
  "resources": [
    {
      "accountId": "111122223333",
      "type": "AWS::KMS::Key",
      "ARN": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": true,
  "recipientAccountId": "111122223333",
  "eventCategory": "Management"
}
```

------

## よくある質問
<a name="faqs"></a>

### キーが削除対象としてマークされているか、 AWS KMSで削除済みの場合はどうなりますか?
<a name="what-happens-if-my-key-is-marked-for-deletion-or-deleted-in-kms-"></a>

 キーが削除されるか、削除対象としてマークされている場合 AWS KMS、関連する実行中の実行は失敗します。ワークフローに関連付けられたキーを削除または変更するまで、新しい実行を開始することはできません。 AWS KMS キーを削除すると、ワークフロー実行に関連付けられたすべての暗号化されたデータは暗号化されたままになり、復号できなくなり、データは***回復できなくなります***。

### で AWS KMS キーが無効になっている場合はどうなりますか AWS KMS?
<a name="what-happens-if-a-kms-key-is-disabled-in-kms-"></a>

 で AWS KMS キーが無効になっている場合 AWS KMS、関連する実行中の実行は失敗します。新しい実行を開始することはできません。その無効な AWS KMS キーで暗号化されたデータは、再度有効になるまで復号できなくなります。

### EventBridge に送信された実行ステータスの変更イベントはどうなりますか。
<a name="what-happens-to-execution-status-change-events-sent-to-ev-"></a>

 カスタマーマネージド AWS KMS キーを使用して暗号化されたワークフローの実行ステータス変更イベントには、実行入力、出力、エラー、および原因は含まれません。

## 詳細情報
<a name="learn-more-data-at-rest-encryption"></a>

保管中のデータ暗号化の詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[AWS Key Management Service concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)」および「[security best practices for AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)」を参照してください。