亚马逊AWS官方博客

使用AWS KMS对存储在自定义Amazon S3存储桶内的输出结果进行加密,并通过Amazon Textract实现多页文档处理

原文链接:

https://aws.amazon.com/cn/blogs/machine-learning/store-output-in-custom-amazon-s3-bucket-and-encrypt-using-aws-kms-for-multi-page-document-processing-with-amazon-textract/

 

Amazon Textract是一项完全托管机器学习(ML)服务,可以从几乎任意类型的文档当中自动提取输出文本、手写内容及其他数据,从而轻松完成文档的规模化处理。Amazon Textract的功能全面超越了传统的简单光学字符识别(OCR),能够准确识别出表单内的字段内容以及表格中存储的信息。以此为基础,金融、医疗、法律以及房地产等众多行业得以轻松针对不同业务需求处理大量文档。例如,医疗保健服务商可以使用Amazon Textract从保险索赔工单中提取患者信息,或从医疗图表的扫描件中提取数值,全程无需自定义或人为干预。对于感兴趣的朋友,推荐大家参阅《Amazon Textract从文档中自动提取文本与结构化数据》一文,了解如何使用Amazon Textract从文档扫描件中自动提取文本及数据——最重要的是,您无需掌握任何机器学习(ML)经验。

Amazon Textract提供同步与异步API操作,可用于提取文档文本并分析文本数据。您可以将同步API用于单页文档及低延迟用例(例如捕捉手机屏幕),而异步API一般更适合处理单页或多页文档,例如包含数千个页面的PDF文件。

在本文中,我们将展示如何控制输出位置,并在使用Amazon Textract异步API的同时通过 AWS Key Management Service (AWS KMS)密钥加密输出数据。

 

Amazon Textract 异步 API

Amazon Textract提供的异步API可从单页(支持jpeg、png以及pdf格式)或多页PDF文档当中提取文本及结构化数据。异步处理文档使您的应用程序能够在等待期间继续完成其他任务。您可以使用StartDocumentTextDetection 与 GetDocumentTextDetection检测文档中的各行及单词,也可以使用StartDocumentAnalysis 与 GetDocumentAnalysis检测文档中各行、单词、表单与表格中的数据。

下图所示,为异步API操作的工作流程。在本文中,我们在计算环境中使用AWS Lambda作为Amazon Textract调用示例,但其中的普适性概念也适用于其他计算环境。

    1. 我们首先调用 StartDocumentTextDetection 或 StartDocumentAnalysis API,同时提供待处理的Amazon Simple Storage Service (Amazon S3)对象存储位置以及其他一些相关参数。
    2. Amazon Textract从S3存储桶处获取文档,并启动一项作业以处理该文档。
    3. 在文档处理完成之后,Amazon Textract的S3存储桶会保存并加密推理结果,而后通过Amazon Simple Notification Service (Amazon SNS)向您发出完成通知。
    4. 接下来,您可以调用相应的GetDocumentTextDetection 或 GetDocumentAnalysis API,以JSON格式获取提取结果。

 

 

将异步API的输出结果保存在自定义S3存储桶内并进行加密

在通过调用StartDocumentTextDetection 或 StartDocumentAnalysis启动Amazon Textract作业时,您可以在API当中使用可选参数OutputConfig。此参数供您指定用于存储输出的S3存储桶。另一项可选输入参数KMSKeyId 则供您指定用于对输出结果进行加密的AWS KMS客户主密钥(CMK)。用户在调用Start操作时,必须具备使用此特定CMK的权限。

下图所示,为使用输出首选参数配合Amazon Textract异步API时的整体工作流。

    1. 首先,发起带有S3对象存储、输出S3存储桶名称、S3路径输出前缀、KMS密钥ID以及其他几项参数的StartDocumentTextDetection 或 StartDocumentAnalysis API调用。
    2. Amazon Textract从该S3存储桶处获取文档,并启动一项作业以处理此文档。
    3. 在文档处理完成后,Amazon Textract会将输出结果以JSON的格式保存在输出存储桶的相应路径处,并使用初始调用时指定的KMS CMK对结果进行加密。
    4. 之后,您将从Amazon SNS收到一条作业完成通知。
    5. 接下来,您可以调用相应的 GetDocumentTextDetection GetDocumentAnalysis 以获取JSON格式结果。您也可以直接通过以下路径在输出S3存储桶上获取JSON结果: s3://{S3Bucket}/{S3Prefix}/{TextractJobId}/*。

 

 

使用OutputConfig启动异步作业

以下代码所示,为如何启动异步API作业以分析文档内容,并将经过加密的推理输出结果存储在自定义的S3存储桶当中:

import boto3
client = boto3.client('textract')
response = client.start_document_analysis(
    DocumentLocation={
        'S3Object': {
            'Bucket': 'string',
            'Name': 'string',
            'Version': 'string'
        }
    },
    ...
    OutputConfig={
        'S3Bucket': 'string',
        'S3Prefix': 'string'
    },
    KMSKeyId='string'
)

以下代码所示,为如何通过结果API作业分析文档内容:

response = client.get_document_analysis(JobId='string',MaxResults=123,NextToken='string')

您也可以使用AWS SDK直接从自定义S3存储桶处下载输出结果。

下表所示,为Amazon Textract输出结果如何根据调用中提供的OutputConfig与KMSKeyId参数进行存储与加密:

OutputConfig KMSKeyId Amazon Textract输出结果
Amazon Textract输出将被存储在Amazon Textract内部,并使用AWS自带CMK进行加密。
客户的S3存储桶 Amazon Textract输出将被存储在客户的S3存储桶中,并使用SSE-S3进行加密。
客户CMK Amazon Textract输出将被存储在Amazon Textract内部,并使用客户提供的CMK进行加密。
客户的S3存储桶 客户CMK

Amazon Textract输出将被存储在客户的S3存储桶中,并使用客户提供的CMK进行加密。[MOU1]

[MOU1]表格需要有线框

IAM权限

在使用Amazon Textract API启动分析或检测作业时,您必须有权访问调用命令中所指定的S3对象。要使用输出首选项将输入结果写入至Amazon S3并进行加密,您必须具备对目标S3存储桶进行写入、调用分析或使用所指定CMK的必要权限。

以下示例AWS身份与访问管理(IAM)身份策略,允许您从textract-input S3存储桶中获取带有前缀的对象:

{
"Sid":"AllowTextractUserToReadInputData",
"Action":["s3:GetObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::textract-input/documents/*"]
}

以下IAM身份策略,允许您向textract-output S3存储桶写入带有前缀的对象:

{
"Sid":"AllowTextractUserToReadInputData",
"Action":["s3:GetObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::textract-input/documents/*"]
}

在使用SSE-KMS加密Amazon S3中的对象时,您还需要具备对特定CMK的使用权限。以下CMK策略语言允许用户(textract-start)使用此CMK对Amazon Textract分析或检测作业中的输出文件加以保护:

{
  "Sid": "Allow use of the key to write Textract output to S3",
  "Effect": "Allow",
  "Principal": {"AWS":"arn:aws:iam::111122223333:user/textract-start"},
  "Action": ["kms:DescribeKey","kms:GenerateDataKey", "kms:ReEncrypt", "kms:Decrypt"],
  "Resource": "*"
}

以下KMS策略允许用户(textract-get)获取由SSE-KMS加密的输出文件。

{
"Sid": "Allow use of the key to read S3 objects for output",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:user/textract-get"},
"Action": ["kms:Decrypt","kms:DescribeKey"],
"Resource": "*"
}

请注意,您需要完整的密钥策略才能管理所使用的密钥。

对于某些工作负载,您可能需要为用户、角色或者Amazon Textract中所使用AWS服务的操作保留一份记录。Amazon Textract与AWS CloudTrail相集成,后者可以将Amazon Textract上的所有API调用捕捉为事实形式。关于更多详细信息,请参阅使用AWS CloudTrail记录Amazon Textract API调用

AWS KMS与Amazon S3也提供类似的CloudTrail集成功能。关于更多详细信息,请分别参阅使用AWS CloudTrail记录AWS KMS API调用以及使用AWS CloudTrail记录Amazon S3 API调用。要查看Amazon S3 GET与PUT记录内容,您需要在Amazon S3当中启用数据跟踪(data trail),借此获得对文档处理生命周期的端到端可见性。

 

 

总结

在本文中,我们共同了解了如何使用Amazon Textract异步API、S3存储桶以及AWS KMS CMK对Amazon Textract输出结果进行存储与加密。我们还重点介绍了如何使用CloudTrail集成功能以跟踪整个文档处理生命周期。

关于在Amazon Textract当中使用多种安全控制机制的更多详细信息,请参阅Amazon Textract中的安全性议题

 

 

本篇作者

Kashif Imran

Amazon Web Services公司首席解决方案架构师。他与多家重量级AWS客户合作,运用AI/ML解决方案解决各类复杂的业务问题。他负责提供技术指导与设计建议,支持规模化计算机视觉类应用。他的专长涵盖应用程序架构、无服务器、容器、NoSQL以及机器学习等多个领域。

Peter M. O’Donnell

AWS首席解决方案架构师,主要负责研究安全性、风险与战略客户团队的合规性问题。Peter此前曾专门负责美国某主要商业银行的客户服务工作。目前他主要服务于多家体量庞大且业务需求复杂的AWS战略客户,关注与安全性相关的主题,包括数据保护、加密、事件响应与CISO参与等。