

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 静态加密
<a name="sd-encryption"></a>

Amazon IoT SiteWise 加密所有静态场景发现会话数据。默认情况下， Amazon IoT SiteWise 使用 Amazon 自有密钥加密您的数据，不收取额外费用，也没有管理开销。您还可以选择使用客户管理的密钥加密会话数据，以完全控制和审核保护您资源的加密密钥。

## 加密选项
<a name="sd-encryption-options"></a>

创建工作空间时，您可以选择以下加密类型之一：
+ **SITEWISE\_DEFAULT\_ENCRYP Amazon IoT SiteWise TION ** — 使用 Amazon 自有密钥加密您的会话数据，无需额外付费。无需进行任何配置。
+ **KMS\_BASED\_ENCRYP ** TI Amazon IoT SiteWise ON — 使用您指定的客户管理密钥加密您的会话数据。您可以完全控制密钥。

**重要**  
加密配置是在创建工作空间时设置的，创建工作空间后无法更改。

## 操作方法 Amazon IoT SiteWise 使用客户管理的密钥
<a name="sd-how-cmk-works"></a>

当您使用客户管理的密钥配置工作空间时， Amazon IoT SiteWise 使用该密钥加密以下数据：
+ **视频 **-为工作空间捕获和存储的所有视频流。
+ **注释 **-与工作空间中会话相关的所有注释数据。
+ **遥测 ** — 为工作空间收集和存储的所有遥测数据。

Amazon IoT SiteWise 使用信封加密来保护您的会话数据。在数据摄取期间， Amazon IoT SiteWise 调用`kms:GenerateDataKey`范围限定在源上下文条件（`aws:SourceAccount`和`aws:SourceArn`）范围内，以生成数据加密密钥。

Amazon IoT SiteWise 通过 FAS（转发访问会话）使用 KMS 授权，代表您执行 KMS 操作。该授权的范围仅限于工作空间， Amazon IoT SiteWise 允许调用`GenerateDataKey``Decrypt`、和`ReEncrypt`操作。 Amazon IoT SiteWise 删除关联工作空间后，取消授权。

此外， Amazon IoT SiteWise 将底层 Amazon 托管数据存储（例如 Amazon S3 和 Amazon S OpenSearch erverless）配置为使用您的客户管理密钥。这意味着存储在这些服务中的会话数据使用您的密钥进行加密，从而在您的控制下提供端到端加密。您可能会使用 KMS 密钥看到来自这些 Amazon 服务 CloudTrail 的事件——这是预期的行为。

## 配置加密
<a name="sd-configuring-cmk"></a>

创建工作空间时，使用带有以下字段的`encryptionConfiguration`参数指定加密配置：
+ **加密类型**（必填）-要使用的加密类型。有效值为 `SITEWISE_DEFAULT_ENCRYPTION` 和 `KMS_BASED_ENCRYPTION`。
+ **kms KeyId**（加密类型为必填项`KMS_BASED_ENCRYPTION`）— 客户管理密钥的 ID、ARN、别名或别名 ARN。该密钥必须是使用 ENCRYPT\_DECRYPT 的对称密钥。

## 密钥策略
<a name="sd-cmk-key-policy"></a>

 Amazon IoT SiteWise 要允许使用客户管理的密钥，密钥策略必须授予必要的权限。以下是包含六个语句的最低权限密钥政策：

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSiteWiseIngestionGenerateDataKey",
      "Effect": "Allow",
      "Principal": {
        "Service": "iotsitewise.amazonaws.com"
      },
      "Action": "kms:GenerateDataKey*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iotsitewise:us-east-1:111122223333:workspace/*"
        }
      }
    },
    {
      "Sid": "AllowSiteWiseDecryptDescribeReEncrypt",
      "Effect": "Allow",
      "Principal": {
        "Service": "iotsitewise.amazonaws.com"
      },
      "Action": [
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:ReEncrypt*"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowSiteWiseToEncryptDataViaGrant",
      "Effect": "Allow",
      "Principal": {
        "Service": "iotsitewise.amazonaws.com"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "kms:GrantOperations": [
            "Decrypt",
            "GenerateDataKey",
            "ReEncrypt"
          ]
        }
      }
    },
    {
      "Sid": "AllowCustomerRoleDescribeKeyViaSiteWise",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/YourRole"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "iotsitewise.us-east-1.amazonaws.com"
        }
      }
    },
    {
      "Sid": "AllowCustomerRoleDecryptViaSiteWise",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/YourRole"
      },
      "Action": "kms:Decrypt",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "iotsitewise.us-east-1.amazonaws.com"
        },
        "StringLike": {
          "kms:EncryptionContext:aws:iotsitewise:subscriberId": "111122223333"
        }
      }
    },
    {
      "Sid": "AllowCustomerRoleCreateGrantViaSiteWise",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/YourRole"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "iotsitewise.us-east-1.amazonaws.com"
        },
        "StringLike": {
          "kms:EncryptionContext:aws:iotsitewise:subscriberId": "111122223333"
        },
        "ForAllValues:StringEquals": {
          "kms:GrantOperations": [
            "Decrypt",
            "GenerateDataKey",
            "ReEncrypt"
          ]
        }
      }
    }
  ]
}
```

### 每份政策声明的解释
<a name="sd-key-policy-explanation"></a>

以下内容描述了密钥策略中每条语句的用途：
+ **AllowSiteWiseIngestionGenerateDataKey**— 允许该 Amazon IoT SiteWise 服务在数据摄取期间调用`kms:GenerateDataKey*`以创建数据加密密钥。`aws:SourceAccount`和`aws:SourceArn`条件限制了对您的帐户和工作空间的访问权限，从而防止出现混乱的代理问题。
+ **AllowSiteWiseDecryptDescribeReEncrypt**— 允许 Amazon IoT SiteWise 服务呼叫`kms:Decrypt``kms:DescribeKey`、和`kms:ReEncrypt*`。这些操作不会在请求上下文中携带工作空间源 ARN，因此源条件不适用于此语句。
+ **AllowSiteWiseToEncryptDataViaGrant**— 允许该 Amazon IoT SiteWise 服务调用`kms:CreateGrant`以创建范围为`Decrypt``GenerateDataKey`、和`ReEncrypt`操作的授权。该`kms:GrantOperations`条件将补助金仅限于这些业务。
+ **AllowCustomerRoleDescribeKeyViaSiteWise**— 允许您的 IAM 角色`kms:DescribeKey`通过 FAS 调用。 Amazon IoT SiteWise 在创建工作空间时调用此函数以验证密钥是否存在、处于启用状态、是否为 SYMMETRIC\_DEFAULT KeySpec 以及是否为 ENCRYPT\_DECRYPT。 KeyUsage 
+ **AllowCustomerRoleDecryptViaSiteWise**— 允许您的 IAM 角色`kms:Decrypt`通过 FAS 调用。 Amazon IoT SiteWise 使用它来验证调用主体对密钥是否具有解密权限。该`kms:ViaService`条件确保此权限只能通过以下方式使用 Amazon IoT SiteWise，并且加密上下文条件限制了对您账户的访问权限。
+ **AllowCustomerRoleCreateGrantViaSiteWise**— 允许您的 IAM 角色在创建工作空间期间`kms:CreateGrant`通过 FAS 调用。 Amazon IoT SiteWise 使用此授权在工作空间的生命周期内调用`GenerateDataKey``Decrypt`、和`ReEncrypt`操作。授权操作条件限制了授予权可以授权的内容。

## 使用客户管理的密钥创建工作空间
<a name="sd-create-workspace-cmk"></a>

要使用客户管理的密钥创建工作区，请在 `CreateWorkspace` API 请求中指定`--encryption-configuration`参数：

```
aws iotsitewise create-workspace \
    --workspace-name my-workspace \
    --encryption-configuration encryptionType=KMS_BASED_ENCRYPTION,kmsKeyId=arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --region us-east-1
```

## 缩小客户管理密钥的访问权限
<a name="sd-scope-cmk-access"></a>

### 加密上下文
<a name="sd-encryption-context"></a>

Amazon IoT SiteWise 每个 KMS 请求中都包含以下加密上下文 Amazon 密钥值对：

```
"aws:iotsitewise:subscriberId": "<CustomerAccountId>"
```

您可以使用密钥策略中的`kms:EncryptionContext`条件来进一步限制哪些资源可以使用密钥进行加密和解密。加密上下文也以纯文本形式出现在 Amazon CloudTrail 日志中。 Amazon IoT SiteWise 创建的每项授权都包含加密上下文约束，因此该授权不能用于加密或解密其他工作空间或 Amazon 帐户的数据。

### 混淆代理保护
<a name="sd-confused-deputy"></a>

`aws:SourceArn`和`aws:SourceAccount`条件通过确保只有您的工作空间才能触发密钥的使用，从而防止出现混乱的副手问题。这些条件`GenerateDataKey`仅适用于。`Decrypt``DescribeKey`、和`ReEncrypt`操作在请求上下文中不携带工作空间源 ARN，因此源条件不能应用于这些操作。

### kms：ViaService 状态
<a name="sd-kms-viaservice"></a>

`kms:ViaService`条件密钥将密钥的使用限制为来自 Amazon IoT SiteWise以下来源的转发访问会话请求：

```
"kms:ViaService": "iotsitewise.us-east-1.amazonaws.com"
```

这样可以确保密钥策略中的客户角色权限仅在请求源时才可用 Amazon IoT SiteWise，从而防止在服务环境之外直接使用密钥。

## 使用监控 KMS 的使用情况 CloudTrail
<a name="sd-monitoring-kms-cloudtrail"></a>

Amazon CloudTrail 在您的客户管理密钥上记录基础 Amazon 服务发出的 Amazon IoT SiteWise 所有 KMS API 调用。使用 CloudTrail 控制台或`LookupEvents`操作搜索日志条目。以下是您可以期待看到 CloudTrail 的事件示例。

### CreateGrant （亚马逊 OpenSearch 无服务器）
<a name="sd-cloudtrail-creategrant-oss"></a>

Amazon OpenSearch Serverless 创建了一项使用您的客户管理密钥加密索引会话数据的授权：

```
{
  "eventSource": "kms.amazonaws.com",
  "eventName": "CreateGrant",
  "userIdentity": {
    "type": "AWSService",
    "invokedBy": "aoss.amazonaws.com"
  },
  "requestParameters": {
    "granteePrincipal": "aoss.us-east-1.amazonaws.com",
    "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "constraints": {
      "encryptionContextSubset": {
        "aws:aoss:arn": "arn:aws:aoss:us-east-1:111122223333:collection/*"
      }
    },
    "retiringPrincipal": "aoss.us-east-1.amazonaws.com",
    "operations": ["Decrypt", "GenerateDataKey"]
  }
}
```

### GenerateDataKey （亚马逊 S3）
<a name="sd-cloudtrail-generatedatakey-s3"></a>

Amazon S3 使用您的客户管理密钥对存储的视频数据进行加密：

```
{
  "eventSource": "kms.amazonaws.com",
  "eventName": "GenerateDataKey",
  "userIdentity": {
    "type": "AWSService",
    "invokedBy": "fas.s3.amazonaws.com"
  },
  "requestParameters": {
    "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "keySpec": "AES_256",
    "encryptionContext": {
      "aws:s3:arn": "arn:aws:s3:::iotsitewise-workspace-111122223333-us-east-1"
    }
  }
}
```

### GenerateDataKey (Amazon IoT SiteWise)
<a name="sd-cloudtrail-generatedatakey-itsw"></a>

Amazon IoT SiteWise 为内部加密操作生成数据密钥：

```
{
  "eventSource": "kms.amazonaws.com",
  "eventName": "GenerateDataKey",
  "userIdentity": {
    "type": "AWSService",
    "invokedBy": "AWS Internal"
  },
  "requestParameters": {
    "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "keySpec": "AES_256",
    "encryptionContext": {
      "aws:iotsitewise:subscriberId": "111122223333"
    }
  }
}
```