您现在可以控制 亚马逊虚拟私有云 (Amazon VPC)和您的加密设置 亚马逊领悟 API使用 AWS身份和访问管理 (IAM)条件密钥,并通过客户托管密钥(CMK)对您的Amazon Comprehend自定义模型进行加密 AWS密钥管理服务 (AWS KMS)。 IAM条件密钥使您可以进一步细化应用IAM策略声明的条件。 授予创建异步作业以及创建自定义分类或自定义实体培训作业的权限时,可以在IAM策略中使用新的条件键。
Amazon Comprehend现在支持五个新的条件键:
comprehend:VolumeKmsKey
comprehend:OutputKmsKey
comprehend:ModelKmsKey
comprehend:VpcSecurityGroupIds
comprehend:VpcSubnets
这些密钥使您可以确保用户只能创建符合组织安全状况的作业,例如连接到允许的VPC子网和安全组的作业。 您还可以使用这些密钥对存储卷强制加密设置,在该存储卷中,将数据下拉进行计算并在 亚马逊简单存储服务 (Amazon S3)存储操作输出的存储区。 如果用户尝试使用不允许的VPC设置或加密参数使用API,则Amazon Comprehend将以403 Access Denied异常同步拒绝该操作。
解决方案概述
下图说明了我们解决方案的体系结构。
我们要执行一项政策来执行以下操作:
- 确保使用VPC设置指定了所有自定义分类培训作业
- 为分类器训练作业,分类器输出和Amazon Comprehend模型启用了加密
这样,当某人开始自定义分类培训工作时,将从Amazon S3提取的培训数据复制到您指定的VPC子网中的存储卷,并使用指定的加密 VolumeKmsKey
。 该解决方案还确保使用指定的值对模型训练的结果进行加密 OutputKmsKey
。 最后,将Amazon Comprehend模型本身存储在VPC中时,将使用用户指定的AWS KMS密钥对其进行加密。 该解决方案分别为数据,输出和模型使用三个不同的键,但是您可以选择对所有三个任务使用相同的键。
此外,此新功能使您可以审核以下模型的使用情况: AWS 云跟踪 通过跟踪模型加密密钥的使用情况。
使用IAM策略加密
以下策略确保用户必须为VPC设置指定VPC子网和安全组,为分类器和输出指定AWS KMS密钥:
{ "Version": "2012-10-17", "Statement": [{ "Action": ["comprehend:CreateDocumentClassifier"], "Effect": "Allow", "Resource": "*", "Condition": { "Null": { "comprehend:VolumeKmsKey": "false", "comprehend:OutputKmsKey": "false", "comprehend:ModelKmsKey": "false", "comprehend:VpcSecurityGroupIds": "false", "comprehend:VpcSubnets": "false" } } }] }
例如,在下面的代码中,用户1提供VPC设置和加密密钥,并且可以成功完成操作:
aws comprehend create-document-classifier --region region --document-classifier-name testModel --language-code en --input-data-config S3Uri=s3://S3Bucket/docclass/filename --data-access-role-arn arn:aws:iam::[your account number]:role/testDataAccessRole --volume-kms-key-id arn:aws:kms:region:[your account number]:alias/ExampleAlias --output-data-config S3Uri=s3://S3Bucket/output/file name,KmsKeyId=arn:aws:kms:region:[your account number]:alias/ExampleAlias --vpc-config SecurityGroupIds=sg-11a111111a1exmaple,Subnets=subnet-11aaa111111example
另一方面,用户2不提供以下任何必需设置,并且不允许其完成操作:
aws comprehend create-document-classifier --region region --document-classifier-name testModel --language-code en --input-data-config S3Uri=s3://S3Bucket/docclass/filename --data-access-role-arn arn:aws:iam::[your account number]:role/testDataAccessRole --output-data-config S3Uri=s3://S3Bucket/output/file name
在前面的代码示例中,只要设置了VPC设置和加密密钥,就可以运行自定义分类器训练作业。 将VPC和加密设置保留为默认状态会导致403 Access Denied异常。
在下一个示例中,我们实施了更加严格的策略,其中我们必须将VPC和加密设置设置为还包括特定的子网,安全组和KMS密钥。 该策略将这些规则应用于所有启动新异步作业,创建自定义分类器和创建自定义实体识别器的Amazon Comprehend API。 请参见以下代码:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "comprehend:CreateDocumentClassifier", "comprehend:CreateEntityRecognizer", "comprehend:Start*Job" ], "Effect": "Allow", "Resource": "*", "Condition": { "ArnEquals": { "comprehend:VolumeKmsKey": "arn:aws:kms:region:[your account number]:key/key_id", "comprehend:ModelKmsKey": "arn:aws:kms:region:[your account number]:key/key_id1", "comprehend:OutputKmsKey": "arn:aws:kms:region:[your account number]:key/key_id2" }, "ForAllValues:StringLike": { "comprehend:VpcSecurityGroupIds": [ "sg-11a111111a1exmaple" ], "comprehend:VpcSubnets": [ "subnet-11aaa111111example" ] } } }] }
在下一个示例中,我们首先在Amazon Comprehend控制台上创建自定义分类器,而不指定加密选项。 因为我们有策略中指定的IAM条件,所以操作被拒绝。
启用分类器加密后,Amazon Comprehend将在处理作业时对存储卷中的数据进行加密。 您可以使用您账户中的AWS KMS客户托管密钥,也可以使用其他账户。 您可以为自定义分类器作业指定加密设置,如以下屏幕截图所示。
输出加密使Amazon Comprehend可以对您的分析输出结果进行加密。 与Amazon Comprehend作业加密类似,您可以从您的账户或其他账户使用AWS KMS客户托管密钥。
由于我们的政策还强制执行要在启用VPC和启用安全组访问权限的情况下启动的作业,因此您可以在 VPC设定 部分。
Amazon Comprehend API操作和IAM条件密钥
下表列出了撰写本文时支持的Amazon Comprehend API操作和IAM条件密钥。 有关更多信息,请参见 Amazon Comprehend的操作,资源和条件键.
使用CMK进行模型加密
除了加密训练数据外,您现在还可以使用CMK在Amazon Comprehend中加密您的自定义模型。 在本节中,我们将详细介绍此功能。
先决条件
您需要添加IAM策略,以允许委托人使用或管理CMK。 CMK在策略声明的Resource元素中指定。 撰写政策声明时, 最佳实践 将CMK限制为委托人需要使用的CMK,而不是给委托人访问所有CMK的权限。
在以下示例中,我们使用一个AWS KMS密钥(1234abcd-12ab-34cd-56ef-1234567890ab
)以加密Amazon Comprehend自定义模型。
使用AWS KMS加密时,模型加密需要kms:CreateGrant和kms:RetireGrant权限。
例如,提供给Amazon Comprehend的dataAccessRole中的以下IAM策略语句允许主体仅在策略语句的Resource元素中列出的CMK上调用创建操作:
{"Version": "2012-10-17", "Statement": {"Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:RetireGrant", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:[your account number]:key/1234abcd-12ab-34cd-56ef-1234567890ab" ] } }
最佳做法是通过密钥ARN指定CMK,以确保权限仅限于指定的CMK。
启用模型加密
在撰写本文时,自定义模型加密仅可通过 AWS命令行界面 (AWS CLI)。 以下示例使用模型加密创建一个自定义分类器:
aws comprehend create-document-classifier --document-classifier-name my-document-classifier --data-access-role-arn arn:aws:iam::[your account number]:role/mydataaccessrole --language-code en --region us-west-2 --model-kms-key-id arn:aws:kms:us-west-2:[your account number]:key/[your key Id] --input-data-config S3Uri=s3://path-to-data/multiclass_train.csv
下一个示例训练使用模型加密的自定义实体识别器:
aws comprehend create-entity-recognizer --recognizer-name my-entity-recognizer --data-access-role-arn arn:aws:iam::[your account number]:role/mydataaccessrole --language-code "en" --region us-west-2 --input-data-config '{ "EntityTypes": [{"Type": "PERSON"}, {"Type": "LOCATION"}], "Documents": { "S3Uri": "s3://path-to-data/documents" }, "Annotations": { "S3Uri": "s3://path-to-data/annotations" } }'
最后,您还可以为启用了加密的自定义模型创建端点:
aws comprehend create-endpoint --endpoint-name myendpoint --model-arn arn:aws:comprehend:us-west-2:[your account number]:document-classifier/my-document-classifier --data-access-role-arn arn:aws:iam::[your account number]:role/mydataaccessrole --desired-inference-units 1 --region us-west-2
结论
现在,您可以使用IAM条件密钥实施安全设置,例如为Amazon Comprehend作业启用加密和VPC设置。 IAM条件键可用于所有 AWS区域 Amazon Comprehend可用的地方。 您还可以使用客户托管密钥对Amazon Comprehend自定义模型进行加密。
要了解有关新条件键和查看策略示例的更多信息,请参见 使用IAM条件键进行VPC设置 和 Amazon Comprehend API的资源和条件。 要了解有关使用IAM条件键的更多信息,请参阅 IAM JSON政策元素:条件.
作者简介
山姆·帕拉尼(Sam Palani) 是AWS的AI / ML专家解决方案架构师。 他喜欢与客户合作,以帮助他们大规模构建机器学习解决方案。 在不帮助客户时,他喜欢阅读和探索户外活动。
尚丹·克萨拉茹(Shanthan Kesharaju) 是AWS ProServe团队的高级架构师。 他通过AI / ML策略,体系结构和有针对性的开发产品来帮助我们的客户。 Shanthan拥有杜克大学的市场营销MBA和俄克拉荷马州立大学的管理信息系统硕士学位。
来源:https://aws.amazon.com/blogs/machine-learning/enforce-vpc-rules-for-amazon-comprehend-jobs-and-cmk-encryption-for-custom-models/