对模型自定义任务和构件进行加密 - Amazon Bedrock

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

对模型自定义任务和构件进行加密

Amazon Bedrock 将您的训练数据与CreateModelCustomizationJob操作或控制台一起使用,创建自定义模型,该模型是 Amazon Bedrock 基础模型的微调版本。您的自定义模型由管理和存储 AWS。

Amazon Bedrock 仅使用您提供的微调数据来微调亚马逊 Bedrock 基础模型。Amazon Bedrock 不会将微调数据用于任何其他目的。您的训练数据不会用于训练基础Titan模型或分发给第三方。其他使用数据,例如使用时间戳、登录的账户IDs以及服务记录的其他信息,也不会用于训练模型。

微调任务完成后,Amazon Bedrock 不会存储您为微调提供的任何训练或验证数据。

请注意,经过微调的模型可以在生成完成时重放一些微调数据。如果您的应用程序不应以任何形式公开微调数据,则应首先从训练数据中筛选出机密数据。如果您已经错误地使用机密数据创建了自定义模型,则可以删除该自定义模型,从训练数据中筛选出机密信息,然后创建新模型。

要加密自定义模型(包括复制的模型),Amazon Bedrock 为您提供了两个选项:

  1. AWS 拥有的密钥— 默认情况下,Amazon Bedrock 使用加密自定义模型。 AWS 拥有的密钥您无法查看、管理 AWS 拥有的密钥、使用或审核其使用情况。但是您无需执行任何工作或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS 拥有的密钥

  2. 客户托管密钥-您可以选择使用您自己管理的客户托管密钥对自定义模型进行加密。有关更多信息 AWS KMS keys,请参阅《AWS Key Management Service 开发人员指南》中的客户托管密钥

注意

Amazon Bedrock 自动启用静态加密 AWS 拥有的密钥 ,不收取任何费用。如果您使用客户管理的密钥,则需要 AWS KMS 付费。有关定价的更多信息,请参阅 AWS Key Management Service 定价

有关的更多信息 AWS KMS,请参阅《AWS Key Management Service 开发人员指南》

Amazon Bedrock 如何使用补助金 AWS KMS

如果您指定客户托管密钥来加密自定义模型以进行模型自定义或模型复制任务,Amazon Bedrock 会通过向发送CreateGrant请求来 AWS KMS代表您创建与该自定义模型关联的主要KMS授权。此项授权允许 Amazon Bedrock 访问和使用您的客户托管密钥。中的赠款 AWS KMS 用于让 Amazon Bedrock 访问客户账户中的KMS密钥。

Amazon Bedrock 需要获得主授权,才能使用您的客户托管密钥进行以下内部操作:

  • 向发送DescribeKey请求, AWS KMS 以验证您在创建任务时输入的对称客户托管KMS密钥 ID 是否有效。

  • 向发送GenerateDataKey解密请求, AWS KMS 以生成由您的客户托管密钥加密的数据密钥并解密加密的数据密钥,以便它们可用于加密模型工件。

  • 向发送CreateGrant请求,使用上述操作的子集(DescribeKey、、Decrypt)创建限定范围的次要授权GenerateDataKey,用于异步执行模型自定义、模型复制或预配置吞吐量创建。AWS KMS

  • Amazon Bedrock 在创建补助金时指定了退休委托人,因此该服务可以发送请求。RetireGrant

您拥有对客户托管 AWS KMS 密钥的完全访问权限。您可以按照AWS Key Management Service 开发者指南中的停用和撤销授权中的步骤撤消对授权的访问权限,也可以通过修改密钥策略随时删除该服务对您的客户托管密钥的访问权限。如果您这样做,Amazon Bedrock 将无法访问由您的密钥加密的自定义模型。

自定义模型初级和二级补助金的生命周期

  • 主补助金的使用期限很长,只要相关的自定义模型仍在使用,它就会一直处于活动状态。删除自定义模型后,相应的主授权将自动停用。

  • 二级补助金是短暂的。一旦 Amazon Bedrock 代表客户执行的操作完成,它们就会自动停用。例如,模型复制任务完成后,允许 Amazon Bedrock 加密复制的自定义模型的二级授权将立即停用。

了解如何创建客户托管密钥以及如何为其附加密钥策略

要使用您创建和管理的密钥对 AWS 资源进行加密,请执行以下常规步骤:

  1. (先决条件)确保您的IAM角色拥有CreateKey操作权限。

  2. 按照创建密钥中的步骤,使用 AWS KMS 控制台或CreateKey操作创建客户托管密钥。

  3. 创建密钥时会返回密钥的,您可以将其用于需要使用密钥的操作(例如,提交模型自定义任务运行模型推理时)。Arn

  4. 创建密钥策略并将其附加到具有所需权限的密钥。要创建密钥策略,请按照《 AWS Key Management Service 开发人员指南》中创建密钥策略中的步骤进行操作。

自定义模型和复制模型的权限和密钥策略

创建KMS密钥后,您可以为其附加密钥策略。密钥策略是基于资源的策略,您可以将其附加到客户托管密钥上,以控制对密钥的访问权限。每个客户托管式密钥必须只有一个密钥政策,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。您可以随时修改密钥策略,但更改可能要经过一段短暂的延迟才能生效 AWS KMS。有关更多信息,请参阅https://docs.aws.amazon.com/kms/latest/developerguide/《AWS Key Management Service 开发人员指南》中的管理对客户托管密钥的访问

以下KMS操作用于加密自定义模型和复制模型的密钥:

  1. kms: CreateGrant — 允许 Amazon Bedrock 服务委托人通过授权操作访问指定KMS密钥,从而为客户托管密钥创建授权。有关授权的更多信息,请参阅《AWS Key Management Service 开发者指南AWS KMS中的授权

    注意

    Amazon Bedrock 还设置了退休本金,并在不再需要补助金后自动退出补助金。

  2. kms: DescribeKey — 提供客户托管的密钥详细信息以允许 Amazon Bedrock 验证密钥。

  3. kms: GenerateDataKey — 提供客户托管的密钥详细信息以允许 Amazon Bedrock 验证用户访问权限。Amazon Bedrock 将生成的密文与自定义模型一起存储,用作对自定义模型用户的额外验证检查。

  4. kms: decrypt — 解密存储的密文以验证角色是否可以正确访问加密自定义模型的密钥。KMS

作为最佳安全实践,我们建议您添加 k ms: ViaService 条件密钥,以限制对 Amazon Bedrock 服务的访问密钥。

尽管您只能将一个密钥策略附加到一个密钥策略,但您可以通过在策略Statement字段的列表中添加声明,将多个语句附加到密钥策略。

以下语句与加密自定义模型和复制模型有关:

要使用您的客户托管密钥对自定义或复制的模型进行加密,请在密钥策略中加入以下声明以允许对模型进行加密。在该Principal字段中,将您想要允许加密和解密密钥的帐户添加到AWS子字段映射到的列表中。如果您使用kms:ViaService条件键,则可以为每个区域添加一行,或者使用 * 代替 ${region} 以允许所有支持 Amazon Bedrock 的区域。

{ "Sid": "PermissionsEncryptDecryptModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } }

要允许访问已使用密钥加密的模型,请在KMS密钥策略中包含以下语句以允许对密钥进行解密。在该Principal字段中,将您想要允许解密密钥的帐户添加到AWS子字段映射到的列表中。如果您使用kms:ViaService条件键,则可以为每个区域添加一行,或者使用 * 代替 ${region} 以允许所有支持 Amazon Bedrock 的区域。

{ "Sid": "PermissionsDecryptModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } }

要了解您需要创建的关键策略,请展开与您的用例相对应的部分:

如果您计划对使用密KMS钥自定义的模型进行加密,则密钥的密钥策略将取决于您的用例。展开与您的用例相对应的部分:

如果将调用自定义模型的角色与用于自定义模型的角色相同,则只需使用中的语句即可加密模型。在以下策略模板的Principal字段中,将您想要允许自定义和调用自定义模型的账户添加到AWS子字段映射到的列表中。

{ "Version": "2012-10-17", "Id": "PermissionsCustomModelKey", "Statement": [ { "Sid": "PermissionsEncryptCustomModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } } ] }

如果将调用自定义模型的角色与用于自定义模型的角色不同,则需要同时使用加密模型和中的语句允许访问加密模型。按如下方式修改以下策略模板中的语句:

  1. 第一条语句允许加密和解密密钥。在该Principal字段中,将您想要允许自定义模型的账户添加到AWS子字段映射到的列表中。

  2. 第二条语句只允许解密密钥。在该Principal字段中,将您只想允许调用自定义模型的账户添加到AWS子字段映射到的列表中。

{ "Version": "2012-10-17", "Id": "PermissionsCustomModelKey", "Statement": [ { "Sid": "PermissionsEncryptCustomModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } }, { "Sid": "PermissionsDecryptModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } } ] }

当您复制自己拥有的模型或已与您共享的模型时,您可能需要管理多达两个关键策略:

如果您计划使用KMS密钥对复制的模型进行加密,则密钥的密钥策略将取决于您的用例。展开与您的用例相对应的部分:

如果将调用复制模型的角色与创建模型副本的角色相同,则只需使用中的语句即可加密模型。在以下策略模板的Principal字段中,将您想要允许复制和调用复制的模型的账户添加到AWS子字段映射到的列表中:

{ "Version": "2012-10-17", "Id": "PermissionsCopiedModelKey", "Statement": [ { "Sid": "PermissionsEncryptCopiedModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } } ] }

如果将调用复制模型的角色与创建模型副本的角色不同,则需要同时使用加密模型和中的语句允许访问加密模型。按如下方式修改以下策略模板中的语句:

  1. 第一条语句允许加密和解密密钥。在该Principal字段中,将要允许创建复制模型的账户添加到AWS子字段映射到的列表中。

  2. 第二条语句只允许解密密钥。在该Principal字段中,将您只想允许调用复制的模型的帐户添加到AWS子字段映射到的列表中。

{ "Version": "2012-10-17", "Id": "PermissionsCopiedModelKey", "Statement": [ { "Sid": "PermissionsEncryptCopiedModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } }, { "Sid": "PermissionsDecryptCopiedModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } } ] }

如果您要复制的源模型使用KMS密钥加密,请将来自的语句附加允许访问加密模型到加密源模型的密钥策略中。此语句允许模型复制角色解密加密源模型的密钥。在以下策略模板的Principal字段中,将您想要允许将源模型复制到该AWS子字段映射到的列表中的账户添加到:

{ "Version": "2012-10-17", "Id": "PermissionsSourceModelKey", "Statement": [ { "Sid": "PermissionsDecryptModel", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::${account-id}:user/${role}" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService": [ "bedrock.${region}.amazonaws.com" ] } } } ] }

监控您的 Amazon Bedrock 服务的加密密钥

当您将 AWS KMS 客户托管密钥与您的 Amazon Bedrock 资源一起使用时,您可以使用AWS CloudTrailAmazon CloudWatch Logs 来跟踪 Amaz on Bedrock 向其发送的请求。 AWS KMS

以下是 Amazon Bedrock CreateGrant为创建主拨款而调用的监控KMS操作的示例 AWS CloudTrail 事件:

{ "eventVersion": "1.09", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:SampleUser01", "arn": "arn:aws:sts::111122223333:assumed-role/RoleForModelCopy/SampleUser01", "accountId": "111122223333", "accessKeyId": "EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/RoleForModelCopy", "accountId": "111122223333", "userName": "RoleForModelCopy" }, "attributes": { "creationDate": "2024-05-07T21:46:28Z", "mfaAuthenticated": "false" } }, "invokedBy": "bedrock.amazonaws.com" }, "eventTime": "2024-05-07T21:49:44Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "bedrock.amazonaws.com", "userAgent": "bedrock.amazonaws.com", "requestParameters": { "granteePrincipal": "bedrock.amazonaws.com", "retiringPrincipal": "bedrock.amazonaws.com", "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE", "operations": [ "Decrypt", "CreateGrant", "GenerateDataKey", "DescribeKey" ] }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE", "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "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-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }

对训练、验证和输出数据进行加密

当您使用 Amazon Bedrock 运行模型自定义任务时,会将输入文件存储在您的 Amazon S3 存储桶中。任务完成后,Amazon Bedrock 会将输出指标文件存储在您在创建任务时指定的 S3 存储桶中,并将生成的自定义模型项目存储在由控制的 S3 存储桶中。 AWS

输出文件使用 S3 存储桶的加密配置进行加密。它们使用 SSE-S3 服务器端加密或-加密进行AWS KMS SSE加KMS密,具体取决于您设置 S3 存储桶的方式。