目前我面临一个问题,即我无法确定文件是通过 AWS Transfer Family 还是通过 S3 GUI 放置的。
通过 AWS Transfer Family 在 S3 上放置的默认标签文件是否有任何更改?
问候 Ribase
目前我面临一个问题,即我无法确定文件是通过 AWS Transfer Family 还是通过 S3 GUI 放置的。
通过 AWS Transfer Family 在 S3 上放置的默认标签文件是否有任何更改?
问候 Ribase
Transfer Family 用户指南中描述了用于上传后处理的 S3 对象元数据,这表明 Transfer Family 上传了此内容。
使用元数据的一个用例和应用是当 SFTP 用户有一个收件箱和一个发件箱时。对于收件箱,对象由 SFTP 客户端放置。对于发件箱,对象由上传后处理管道放置。如果有 S3 事件通知,处理器端的下游服务可以对元数据进行 S3 HeadObject 调用,如果没有元数据则关闭,只处理传入的文件。
您还可以使用 Transfer Family 管理的工作流程来应用标签步骤。可以在 AWS Transfer Family 托管工作流演示视频的演示 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))