0

目前我面临一个问题,即我无法确定文件是通过 AWS Transfer Family 还是通过 S3 GUI 放置的。

通过 AWS Transfer Family 在 S3 上放置的默认标签文件是否有任何更改?

问候 Ribase

4

2 回答 2

2

Transfer Family 用户指南中描述了用于上传后处理的 S3 对象元数据,这表明 Transfer Family 上传了此内容。

使用元数据的一个用例和应用是当 SFTP 用户有一个收件箱和一个发件箱时。对于收件箱,对象由 SFTP 客户端放置。对于发件箱,对象由上传后处理管道放置。如果有 S3 事件通知,处理器端的下游服务可以对元数据进行 S3 HeadObject 调用,如果没有元数据则关闭,只处理传入的文件。

您还可以使用 Transfer Family 管理的工作流程来应用标签步骤。可以在 AWS Transfer Family 托管工作流演示视频的演示 1 中找到使用标签步骤的应用示例。

于 2021-11-15T18:54:44.950 回答
1

配置 Transfer Family 写入文件的 S3 存储桶,以使用事件通知触发 Lambda。

在 Lambda 中使用此 Boto3 代码。它将使用将文件放置在 S3 中的主体来标记文件。如果是 Transfer Familiy,那么它是分配给 Transfer Family 以将文件写入存储桶的角色。如果是通过控制台上传文件的用户,那么它将是该用户角色。

import boto3
import json
import urllib.parse

def lambda_handler(event, context):
       
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    principal = event['Records'][0]['userIdentity']['principalId']
    
    try:
          
       s3 = boto3.client('s3')
          
       response = s3.put_object_tagging(
                     Bucket = bucket,
                     Key = key,
                     Tagging={
                         'TagSet': [
                             {
                                 'Key': 'Principal',
                                 'Value': str(principal)
                             },
                         ]
                     }
                 )
                 
    except Exception as e:
       print('Error {}.'.format(e))
于 2021-11-15T19:01:55.633 回答