要保护AWS S3对象免受直接URL访问,可以使用以下方法:
import boto3
# 创建S3客户端
s3 = boto3.client('s3')
# 设置对象的ACL为私有
response = s3.put_object_acl(
ACL='private',
Bucket='your-bucket-name',
Key='your-object-key'
)
import boto3
import json
# 创建S3客户端
s3 = boto3.resource('s3')
# 设置存储桶策略
bucket_policy = {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAll",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
# 将策略转换为JSON字符串
policy_json = json.dumps(bucket_policy)
# 应用策略到存储桶
bucket = s3.Bucket('your-bucket-name')
bucket.Policy().put(Policy=policy_json)
import boto3
# 创建CloudFront客户端
cloudfront = boto3.client('cloudfront')
# 创建CloudFront分发
response = cloudfront.create_distribution(
DistributionConfig={
'CallerReference': 'your-distribution-reference',
'DefaultCacheBehavior': {
'TargetOriginId': 'your-s3-origin-id',
'ForwardedValues': {
'QueryString': False
},
'TrustedSigners': {
'Enabled': False,
'Quantity': 0
},
'ViewerProtocolPolicy': 'redirect-to-https',
'AllowedMethods': {
'Quantity': 2,
'Items': ['GET', 'HEAD'],
'CachedMethods': {
'Quantity': 2,
'Items': ['GET', 'HEAD']
}
},
'DefaultTTL': 86400,
'MinTTL': 3600
},
'Enabled': True,
'Origins': {
'Quantity': 1,
'Items': [
{
'Id': 'your-s3-origin-id',
'DomainName': 'your-bucket-name.s3.amazonaws.com',
'S3OriginConfig': {
'OriginAccessIdentity': ''
}
}
]
}
}
)
# 获取CloudFront的URL
cloudfront_url = response['Distribution']['DomainName']
使用以上方法之一,可以保护AWS S3对象免受直接URL访问。