Amazon Location Service 中的静态数据加密 - Amazon Location Service

Amazon Location Service 中的静态数据加密

Amazon Location Service 默认提供加密,以使用 AWS 自有的加密密钥保护敏感的静态客户数据。

  • AWS 自有密钥 – Amazon Location 默认使用这些密钥来自动加密个人身份数据。您无法查看、管理或使用 AWS 拥有的密钥,或者审计其使用情况。但是无需执行任何操作或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS 自有密钥

默认情况下,静态数据加密有助于减少保护敏感数据时涉及的操作开销和复杂性。同时,它使您能够构建符合严格加密合规性和法规要求的安全应用程序。

虽然您无法禁用此加密层或选择其他加密类型,但您可以在创建跟踪器和地理围栏集合资源时选择客户管理的密钥,从而在现有的 AWS 加密密钥上添加第二层加密:

  • 客户托管密钥 – Amazon Location 支持使用您创建、拥有和管理的对称客户托管密钥,以便在现有的 AWS 自有加密基础上添加第二层加密。由于您可以完全控制这一层加密,因此可以执行以下任务:

    • 制定和维护关键策略

    • 建立和维护 IAM 策略和授权

    • 启用和禁用密钥策略

    • 轮换加密材料

    • 添加标签

    • 创建密钥别名

    • 计划删除密钥

    有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的客户托管密钥

下表汇总了 Amazon Location 如何加密个人身份数据。

数据类型 AWS 拥有的密钥加密 客户托管密钥加密(可选)
Position

包含设备位置详细信息的造点几何体。

已启用 已启用
PositionProperties

一组与位置更新关联的键值对。

已启用 已启用
GeofenceGeometry

表示地理围栏区域的多边形地理围栏几何

已启用 已启用
DeviceId

设备位置更新上传到跟踪器资源时指定的设备标识符。

已启用 不支持
GeofenceId

在给定地理围栏集合中存储地理围栏几何一批地理围栏时指定的标识符。

已启用 不支持
注意

Amazon Location 使用 AWS 自有密钥自动启用静态加密,从而免费保护个人身份数据。

但将 AWS KMS 收取客户托管密钥的使用费。有关定价的更多信息,请参阅 AWS Key Management Service 定价

有关 AWS KMS 的更多信息,请参阅什么是 AWS Key Management Service

Amazon Location Service 如何在 AWS KMS 中使用授权

Amazon Location 需要授权,才能使用客户托管密钥。

当您创建使用客户托管密钥加密的跟踪器资源地理围栏集合时,Amazon Location 会通过向 AWS KMS 发送 CreateGrant 请求来代表您创建授权。AWS KMS 中的授权用于授予 Amazon Location 访问客户账户中的 KMS 密钥的权限。

Amazon Location 需要授权,才能将客户托管的密钥用于以下内部操作:

  • DescribeKey 请求发送到 AWS KMS 以验证在创建跟踪器或地理围栏集合时输入的对称客户托管 KMS 密钥 ID 是否有效。

  • GenerateDataKeyWithoutPlaintext 请求发送至 AWS KMS,生成由您的客户托管密钥加密的数据密钥。

  • Decrypt 请求发送到 AWS KMS,以解密加密的数据密钥,以使它们能够用于加密您的数据。

您可以随时撤消针对授权的访问权限,也可以移除服务访问客户托管密钥的权限。如果您这样做,Amazon Location 将无法访问由客户托管的密钥加密的任何数据,这会影响依赖于该数据的操作。例如,如果您尝试从 Amazon Location 无法访问的加密跟踪器中获取设备位置,则该操作将返回 AccessDeniedException 错误。

创建客户托管密钥

您可以使用 AWS Management Console 或 AWS KMS API 创建对称的客户管理型密钥。

创建对称的客户托管密钥

按照《AWS Key Management Service 开发人员指南》中创建对称的客户托管密钥的步骤进行操作。

密钥策略

密钥策略控制对客户托管密钥的访问。每个客户托管式密钥必须只有一个密钥政策,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥政策。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的管理对客户托管密钥的访问

要将客户托管密钥与 Amazon Location 资源结合使用,密钥政策中必须允许以下 API 操作:

  • kms:CreateGrant – 向客户托管密钥添加授权。授予对指定 KMS 密钥的控制访问权限,从而允许访问授予操作,这些操作是 Amazon Location 所需的。有关使用授权的更多信息,请参阅 AWS Key Management Service 开发人员指南

    这将允许 Amazon Location 执行以下操作:

    • 调用 GenerateDataKeyWithoutPlainText 生成加密的数据密钥并将其存储,因为数据密钥不会立即用于加密。

    • 调用 Decrypt 使用存储的加密数据密钥访问加密数据。

    • 设置停用委托人,以允许服务 RetireGrant

  • kms:DescribeKey – 提供客户托管式密钥详细信息以允许 Amazon Location 验证密钥。

以下是您可以为 Amazon Location 添加的政策声明示例:

"Statement" : [ { "Sid" : "Allow access to principals authorized to use Amazon Location", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:DescribeKey", "kms:CreateGrant" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "geo.region.amazonaws.com", "kms:CallerAccount" : "111122223333" } }, { "Sid": "Allow access for key administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:*" ], "Resource": "arn:aws:kms:region:111122223333:key/key_ID" }, { "Sid" : "Allow read-only access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource" : "*" } ]

有关在策略中指定权限的更多信息,请参阅 AWS Key Management Service 开发人员指南

有关密钥访问故障排除更多的信息,请参阅 AWS Key Management Service 开发人员指南

指定 Amazon Location 的客户托管密钥

您可以将客户托管密钥指定为以下资源的第二层加密:

创建资源时,您可以通过输入 KMS ID 来指定数据密钥,Amazon Location 使用该 ID 来加密资源存储的可识别个人数据。

  • KMS ID – AWS KMS 客户托管密钥的密钥标识符。输入密钥 ID、密钥 ARN、别名名称或别名 ARN。

Amazon Location Service 加密上下文

加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。

AWS KMS 将加密上下文用作其他经过身份验证的数据,来支持经过身份验证的加密。在请求中包含加密上下文以加密数据时,AWS KMS 将加密上下文绑定到加密的数据。要解密数据,您需要在请求中包含相同的加密上下文。

Amazon Location Service 加密上下文

Amazon Location 在所有 AWS KMS 加密操作中使用相同的加密上下文,其中密钥为 aws:geo:arn,值为资源 Amazon 资源名称 (ARN)。

"encryptionContext": { "aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:geofence-collection/SAMPLE-GeofenceCollection" }

使用加密上下文进行监控

当您使用对称的客户托管密钥来加密您的跟踪器或地理围栏集合时,您还可以使用审计记录和日志中的加密上下文来识别客户托管密钥的使用情况。加密上下文还会显示在AWS CloudTrail 生成的日志或 Amazon CloudWatch Logs 中

使用加密上下文控制对客户托管式密钥的访问

您可以使用密钥策略和 IAM 策略中的加密上下文作为 conditions 来控制对您的对称客户托管密钥的访问。您还可以在授权中使用加密上下文限制。

Amazon Location 在授权中使用加密上下文限制,以控制对您账户或区域中的客户管理密钥的访问。授权约束要求授权允许的操作使用指定的加密上下文。

以下是密钥策略声明示例,用于授予对特定加密上下文的客户托管密钥的访问权限。此策略声明中的条件要求授权具有指定加密上下文的加密上下文约束。

{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "Enable CreateGrant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker" } } }

监控您的 Amazon Location Service 的加密密钥

当您在 Amazon Location Service 资源中使用 AWS KMS 客户托管密钥时,您可以使用 AWS CloudTrailAmazon CloudWatch Logs 来跟踪 Amazon Location 向 AWS KMS 发送的请求。

以下示例是 CreateGrantGenerateDataKeyWithoutPlainTextDecryptDescribeKey 监控 Amazon Location 为访问由您的客户托管密钥加密的数据而调用的 KMS 操作的 AWS CloudTrail 事件:

CreateGrant

当您使用 AWS KMS 客户托管密钥加密您的跟踪器或地理围栏集合资源时,Amazon Location 会代表您发送访问您 AWS 账户中的 KMS 密钥的 CreateGrant 请求。Amazon Location 创建的授权特定于与 AWS KMS 客户托管密钥关联的资源。此外,当您删除资源时,Amazon Location 会使用 RetireGrant 操作来删除授权。

以下示例事件记录了 CreateGrant 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-22T17:02:00Z" } }, "invokedBy": "geo.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "retiringPrincipal": "geo.region.amazonaws.com", "operations": [ "GenerateDataKeyWithoutPlaintext", "Decrypt", "DescribeKey" ], "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE", "granteePrincipal": "geo.region.amazonaws.com" }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE" }, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }
GenerateDataKeyWithoutPlainText

当您为跟踪器或地理围栏集合资源启用 AWS KMS 客户托管密钥时,Amazon Location 会创建一个唯一的表密钥。它向 AWS KMS 发送 GenerateDataKeyWithoutPlainText 请求,指定资源的 AWS KMS 客户托管密钥。

以下示例事件记录了 GenerateDataKeyWithoutPlainText 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "geo.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyWithoutPlaintext", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:geofence-collection/SAMPLE-GeofenceCollection" }, "keySpec": "AES_256", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "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:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "57f5dbee-16da-413e-979f-2c4c6663475e" }
Decrypt

当您访问加密的跟踪器或地理围栏集合时,Amazon Location 会地理围栏 Decrypt 操作以使用存储的加密数据密钥来访问加密数据。

以下示例事件记录了 Decrypt 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "geo.amazonaws.com" }, "eventTime": "2021-04-22T17:10:51Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:geofence-collection/SAMPLE-GeofenceCollection" }, "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE", "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "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:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "dc129381-1d94-49bd-b522-f56a3482d088" }
DescribeKey

Amazon Location 使用 DescribeKey 操作来验证账户和地区中是否存在与您的跟踪器或地理围栏集合关联的 AWS KMS 客户托管密钥。

以下示例事件记录了 DescribeKey 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-22T17:02:00Z" } }, "invokedBy": "geo.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "keyId": "00dd0db0-0000-0000-ac00-b0c000SAMPLE" }, "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:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }

了解更多

以下资源提供有关静态数据加密的更多信息。