我将图像分类任务外包给亚马逊的 Mechanical Turk。因此,使用 csv 文件存储工人用于分类的图像的 url。根据文档中的示例,这些 url 指向的图像需要公开供工作人员访问。
但是,我的数据很敏感,不允许公开托管。我有机会在访问受限的图像上使用 MTurk 吗?
我将图像分类任务外包给亚马逊的 Mechanical Turk。因此,使用 csv 文件存储工人用于分类的图像的 url。根据文档中的示例,这些 url 指向的图像需要公开供工作人员访问。
但是,我的数据很敏感,不允许公开托管。我有机会在访问受限的图像上使用 MTurk 吗?
我建议将图像托管在私有 S3 存储桶中,并生成具有秒到期的预签名 URL 。expiration
通过这样做,您将允许 MTurk 上的工作人员查看 HIT 图像(通过预签名 URL),并保证expiration
几秒钟后 URL 将过期,不再允许任何人访问敏感数据。
import logging
import boto3
from botocore.exceptions import ClientError
def create_presigned_url(bucket: str, key: str, expiration: int):
"""Generate a presigned URL to share an S3 object
:param bucket: name of the bucket
:param key: key of the object for which to create a presigned URL
:param expiration: Time in seconds for the presigned URL to remain valid
:return: Presigned URL as string. If error, returns None.
"""
# Generate a presigned URL for the S3 object
s3_client = boto3.client('s3')
try:
response = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': bucket, 'Key': key},
ExpiresIn=expiration
)
except ClientError as e:
logging.error(e)
return None
# The response contains the presigned URL
return response
有关如何在此处生成预签名 URL 的更多信息:https ://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html