中的数据保护 AWS HealthOmics - AWS HealthOmics

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

中的数据保护 AWS HealthOmics

责任 AWS 共担模式适用于 AWS 中的数据保护 HealthOmics。如本模型所述 AWS ,负责保护运行所有内容的全球基础架构 AWS Cloud。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息,请参阅数据隐私常见问题有关欧洲数据保护的信息,请参阅 AWS Security Blog 上的 AWS Shared Responsibility Model and GDPR 博客文章。

出于数据保护目的,我们建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 设置个人用户。这样,每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据:

  • 对每个账户使用多重身份验证(MFA)。

  • 用于 SSL/TLS 与 AWS 资源通信。我们要求使用 TLS 1.2,建议使用 TLS 1.3。

  • 使用设置 API 和用户活动日志 AWS CloudTrail。有关使用 CloudTrail 跟踪捕获 AWS 活动的信息,请参阅《AWS CloudTrail 用户指南》中的使用跟 CloudTrail 踪

  • 使用 AWS 加密解决方案以及其中的所有默认安全控件 AWS 服务。

  • 使用高级托管安全服务(例如 Amazon Macie),它有助于发现和保护存储在 Amazon S3 中的敏感数据。

  • 如果您在 AWS 通过命令行界面或 API 进行访问时需要经过 FIPS 140-3 验证的加密模块,请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息,请参阅《美国联邦信息处理标准(FIPS)第 140-3 版》

强烈建议您切勿将机密信息或敏感信息(如您客户的电子邮件地址)放入标签或自由格式文本字段(如名称字段)。这包括您 AWS 服务 使用控制台、API HealthOmics 或与 AWS 或其他机构 AWS CLI合作时 AWS SDKs。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供网址,强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

静态加密

为了保护敏感的静态客户数据,默认使用服务自有的 AWS Key Management Service (AWS KMS) 密钥 AWS HealthOmics 提供加密。还支持客户管理的密钥。要了解有关客户托管密钥的更多信息,请参阅 Amazon 密钥管理服务

所有 HealthOmics 数据存储(存储和分析)都支持使用客户托管密钥。创建数据存储后,无法更改加密配置。如果数据存储使用的是 AWS 拥有的密钥,则会将其表示为, AWS_OWNED_KMS_KEY 并且您将看不到用于静态加密的特定密钥。

对于 HealthOmics Workflows,临时文件系统不支持客户管理的密钥;但是,使用 XTS-AES-256 分组密码加密算法对所有数据进行静态加密,以加密文件系统。用于启动工作流程运行的 IAM 用户和角色还必须有权访问用于工作流程输入和输出存储桶的 AWS KMS 密钥。工作流程不使用授权, AWS KMS 加密仅限于输入和输出 Amazon S3 存储桶。同时用于工作流程的 IAM 角色还 APIs 必须有权访问所使用的 AWS KMS 密钥以及输入和输出 Amazon S3 存储桶。您可以使用 IAM 角色和权限来控制访问权限或 AWS KMS 策略。要了解更多信息,请参阅的身份验证和访问控制 AWS KMS

当你 AWS Lake Formation 与 HealthOmics Analytics 一起使用时,与 Lake Formation 关联的任何解密权限也会被授予输入和输出 Amazon S3 存储桶。有关如何 AWS Lake Formation 管理权限的更多信息可以在AWS Lake Formation 文档中找到。

HealthOmics Analytics 授予 Lake Formation kms: Decrypt 读取亚马逊 S3 存储桶中加密数据的权限。只要您有权通过 Lake Formation 查询数据,您就可以读取加密的数据。对数据的访问是通过 Lake Formation 中的数据访问控制来控制的,而不是通过 KMS 密钥策略进行的。要了解更多信息,请参阅 Lake Formation 文档中的AWS 集成 AWS 服务请求

AWS 拥有的密钥

默认情况下, HealthOmics 用于 AWS 拥有的密钥 自动加密静态数据,因为这些数据可能包含敏感信息,例如个人身份信息 (PII) 或 Protected Health 信息 (PHI)。 AWS 拥有的密钥 未存储在您的账户中。它们是 AWS 拥有和管理的 KMS 密钥集合的一部分,可在多个 AWS 账户中使用。

AWS 服务可以 AWS 拥有的密钥 用来保护您的数据。您无法查看、管理 AWS 拥有的密钥、访问或审核其使用情况。但是无需执行任何工作或更改任何计划即可保护用于加密数据的密钥。

您无需支付月费或使用费 AWS 拥有的密钥,也不计入您账户的 AWS KMS 配额。有关更多信息,请参阅 AWS 托管式密钥

客户托管密钥

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

  • 建立和维护密钥政策、IAM Policy 和授权

  • 轮换密钥加密材料

  • 启用和禁用密钥政策

  • 添加标签

  • 创建密钥别名

  • 安排密钥删除

您还可以使用 CloudTrail 来跟踪代表您 HealthOmics 发送 AWS KMS 的请求。将收取额外的 AWS KMS 费用。有关更多信息,请参阅客户托管密钥

创建客户托管的密钥

您可以使用 AWS 管理控制台创建对称客户托管密钥,或者。 AWS KMS APIs

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

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

要将客户托管密钥与您的 HealthOmics Analytics 资源一起使用,调用主体需要密钥策略中的 kms: CreateGrant 操作。这允许系统使用 FAS 令牌创建对客户托管密钥的授权,以控制对指定 KMS 密钥的访问权限。此密钥允许用户访问所需的 kms: grant 操作。 HealthOmics 有关更多信息,请参阅使用授权

要进行 HealthOmics 分析,必须允许调用方委托人执行以下 API 操作:

  • kms:向特定的客户托管密钥CreateGrant 添加授权,从而允许在 HealthOmics Analytics 中授予操作权限。

  • km DescribeKey s:提供验证密钥所需的客户托管密钥详细信息。这是所有操作所必需的。

  • kms:GenerateDataKey 为所有写入操作提供对静态加密资源的访问权限。此外,此操作还提供客户托管密钥的详细信息,服务可以使用这些详细信息来验证呼叫者是否有权使用密钥。

  • KMS: Decrypt 提供对加密资源的读取或搜索操作的访问权限。

要在 HealthOmics 存储资源中使用客户托管密钥,必须在密钥策略中允许使用 HealthOmics 服务主体和调用主体。这允许服务验证呼叫者是否有权访问密钥,并使用服务主体使用客户托管密钥执行商店管理。对于 HealthOmics 存储,服务主体的密钥策略必须允许以下 API 操作:

  • km DescribeKey s:提供验证密钥所需的客户托管密钥详细信息。这是所有操作所必需的。

  • kms:GenerateDataKey 为所有写入操作提供对静态加密资源的访问权限。此外,此操作还提供客户托管密钥的详细信息,服务可以使用这些详细信息来验证呼叫者是否有权使用密钥。

  • KMS: Decrypt 提供对加密资源的读取或搜索操作的访问权限。

以下示例显示了一个策略声明,该声明允许服务主体创建使用客户托管密钥加密的 HealthOmics 序列或参考存储并与之交互:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "omics.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*" } ] }

以下示例显示了一个策略,该策略为数据存储创建了解密来自 Amazon S3 存储桶的数据的权限。

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "omics:GetReference", "omics:GetReferenceMetadata" ], "Resource": [ "arn:AWS:omics:{{region}}:{{accountId}}:referenceStore/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:AWS:s3:::[[s3path]]/*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:AWS:kms:{{region}}:{111122223333}:key/{{key_id}}" ], "Condition": { "StringEquals": { "kms:ViaService": [ "s3.{{region}}.amazonAWS.com" ] } } } ] }

使用客户托管密钥所需的 IAM 权限

使用客户托管密钥创建诸如 AWS KMS 加密的数据存储之类的资源时,IAM 用户或角色需要密钥策略和 IAM 策略的权限。

您可以使用 k ms: ViaService 条件密钥将 KMS 密钥的使用限制为仅限来自 HealthOmics的请求。

有关密钥策略的更多信息,请参阅 AWS Key Management Service 开发人员指南中的启用 IAM 策略

分析 API 权限

要进行 HealthOmics 分析,创建商店的 IAM 用户或角色必须具有 kms:CreateGrant kms:GenerateDataKey、、 kms:解密和 kms:DescribeKey 权限以及必要的 HealthOmics 权限。

存储 API 权限

对于 HealthOmics 存储 APIs,调用以下 API 操作的 IAM 用户或角色需要列出的权限:

CreateReferenceStore, CreateSequenceStore

要创建商店,IAM 调用者必须拥有kms:DescribeKey权限和必要的 HealthOmics 权限。 HealthOmics 服务主体调用kms:GenerateDataKeyWithoutPlaintext对数据加载和访问进行访问验证检查。

StartReadSetImportJob, StartReferenceImportJob

要启动数据导入任务,IAM 调用者必须拥有kms:Decrypt存储上用于导入的 KMS 密钥的kms:Decrypt权限,以及包含要导入的对象的 Amazon S3 存储桶的权限。kms:GenerateDataKey此外,传入调用的角色必须对包含要导入的对象的 Amazon S3 存储桶拥有kms:Decrypt权限。IAM 调用者还必须拥有将角色传递给任务的权限。

CreateMultipartReadSetUpload, UploadReadSetPart, CompleteMultipartReadSetUpload

要完成分段上传,IAM 调用者必须拥有kms:Decryptkms:GenerateDataKey才能创建、上传和完成分段上传。

StartReadSetExportJob

要启动数据导出任务,IAM 调用者必须拥有kms:Decrypt存储上的 KMS 密钥从中导出的kms:Decrypt权限kms:GenerateDataKey和接收对象的 Amazon S3 存储桶的权限。此外,传入调用的角色必须拥有接收对象的 Amazon S3 存储桶的kms:Decrypt权限。IAM 调用者还必须拥有将角色传递给任务的权限。

StartReadsetActivationJob

要启动读取集激活作业,IAM 调用者必须拥有kms:Decrypt对象的kms:GenerateDataKey权限。

GetReference, GetReadSet

要从存储中读取对象,IAM 调用者必须拥有对象的kms:Decrypt权限。

读取集 S3 GetObject

要使用 Amazon S3 GetObject API 从商店读取对象,IAM 调用者必须拥有对象的kms:Decrypt权限。为客户托管密钥和 AWS 拥有的密钥 配置设置此权限。

如何在 AWS KMS 中 HealthOmics 使用授权

HealthOmics Analytics 需要获得授权才能使用您的客户托管的 KMS 密钥。 HealthOmics 工作流程不需要或不使用赠款。 HealthOmics 存储使用直接来自服务主体的客户托管密钥,因此请勿使用授权。当您创建使用客户托管密钥加密的分析存储时, HealthOmics Analytics 会通过向 AWS KMS 发送CreateGrant请求来代表您创建授权。AWS KMS 中的赠款用于授予对客户账户中的 KMS 密钥的 HealthOmics 访问权限。

不建议撤销或撤销 HealthOmics 分析代表您创建的资助。如果您撤销或取消授予在您的账户中使用 AWS KMS 密钥的 HealthOmics 权限,则 HealthOmics 无法访问这些数据、加密推送到数据存储的新资源或在提取时对其进行解密。

当您撤销或撤销的授予时 HealthOmics,更改会立即生效。要撤消访问权限,我们建议您删除数据存储而不是撤消授权。当您删除数据存储时, HealthOmics会代表您停用授权。

监控您的加密密钥 AWS HealthOmics

使用客户托管密钥时,您可以使用 CloudTrail 来跟踪 AWS KMS 代表您 AWS HealthOmics 发送的请求。日志中的日志条目在 UserA CloudTrail gent 字段中显示 HealthOmics .Amazonaws.com,以明确区分由发出的请求。 HealthOmics

以下示例是 CreateGrant、 GenerateDataKey、Decrypt 和 DescribeKey 监视 AWS KMS 操作 CloudTrail 的事件,这些操作被调用 HealthOmics 以访问由您的客户托管密钥加密的数据。

下文还展示了 CreateGrant 如何使用允许 HealthOmics 分析访问客户提供的 KMS 密钥,从而 HealthOmics 能够使用该 KMS 密钥加密所有静态客户数据。

您无需创建自己的赠款。 HealthOmics 通过向 AWS KMS 发送 CreateGrant 请求来代表您创建资助。中的授权 AWS KMS 用于授予对客户账户中 AWS KMS 密钥的 HealthOmics 访问权限。

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "xx:test", "arn": "arn:AWS:sts::555555555555:assumed-role/user-admin/test", "accountId": "xx", "accessKeyId": "xxx", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "xxxx", "arn": "arn:AWS:iam::555555555555:role/user-admin", "accountId": "555555555555", "userName": "user-admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2022-11-11T01:36:17Z", "mfaAuthenticated": "false" } }, "invokedBy": "apigateway.amazonAWS.com" }, "eventTime": "2022-11-11T02:34:41Z", "eventSource": "kms.amazonAWS.com", "eventName": "CreateGrant", "AWSRegion": "us-west-2", "sourceIPAddress": "apigateway.amazonAWS.com", "userAgent": "apigateway.amazonAWS.com", "requestParameters": { "granteePrincipal": "AWS Internal", "keyId": "arn:AWS:kms:us-west-2:555555555555:key/a6e87d77-cc3e-4a98-a354-e4c275d775ef", "operations": [ "CreateGrant", "RetireGrant", "Decrypt", "GenerateDataKey" ] }, "responseElements": { "grantId": "4869b81e0e1db234342842af9f5531d692a76edaff03e94f4645d493f4620ed7", "keyId": "arn:AWS:kms:us-west-2:245126421963:key/xx-cc3e-4a98-a354-e4c275d775ef" }, "requestID": "d31d23d6-b6ce-41b3-bbca-6e0757f7c59a", "eventID": "3a746636-20ef-426b-861f-e77efc56e23c", "readOnly": false, "resources": [ { "accountId": "245126421963", "type": "AWS::KMS::Key", "ARN": "arn:AWS:kms:us-west-2:245126421963:key/xx-cc3e-4a98-a354-e4c275d775ef" } ], "eventType": "AWSApiCall", "managementEvent": true, "recipientAccountId": "245126421963", "eventCategory": "Management" }

以下示例说明如何使用 GenerateDataKey 来确保用户在存储数据之前拥有加密数据的必要权限。

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "EXAMPLEUSER", "arn": "arn:AWS:sts::111122223333:assumed-role/Sampleuser01", "accountId": "111122223333", "accessKeyId": "EXAMPLEKEYID", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "EXAMPLEROLE", "arn": "arn:AWS:iam::111122223333:role/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2021-06-30T21:17:06Z", "mfaAuthenticated": "false" } }, "invokedBy": "omics.amazonAWS.com" }, "eventTime": "2021-06-30T21:17:37Z", "eventSource": "kms.amazonAWS.com", "eventName": "GenerateDataKey", "AWSRegion": "us-east-1", "sourceIPAddress": "omics.amazonAWS.com", "userAgent": "omics.amazonAWS.com", "requestParameters": { "keySpec": "AES_256", "keyId": "arn:AWS:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" }, "responseElements": null, "requestID": "EXAMPLE_ID_01", "eventID": "EXAMPLE_ID_02", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:AWS:kms:us-east-1:111122223333:key/EXAMPLE_KEY_ARN" } ], "eventType": "AWSApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }

了解更多

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

有关 AWS Key Management Service 基本概念的更多信息,请参阅 AWS KMS 文档。

有关安全最佳实践的更多信息, AWS KMS 请参阅文档。

传输中加密

AWS HealthOmics 使用 TLS 1.2+ 对通过公共端点和后端服务传输的数据进行加密。