Security 在我的网页上使用AWS S3存储桶中的图像链接安全吗?
我的AWS S3存储桶中有一个图像。将AWS URL放置在Security 在我的网页上使用AWS S3存储桶中的图像链接安全吗?,security,amazon-web-services,amazon-s3,Security,Amazon Web Services,Amazon S3,我的AWS S3存储桶中有一个图像。将AWS URL放置在标签中,将此图像包含在我的网站中是否安全?URL包含参数,如“Amz签名”、“Amz凭据”和“Amz安全令牌”。这些参数是否会被恶意用于访问我S3存储桶中的其他文件 以下是一个示例URL: https://s3.amazonaws.com/MyBucketName/FileName.jpg?X-Amz-Date=20160126T141139Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-
标签中,将此图像包含在我的网站中是否安全?URL包含参数,如“Amz签名”、“Amz凭据”和“Amz安全令牌”。这些参数是否会被恶意用于访问我S3存储桶中的其他文件
以下是一个示例URL:
https://s3.amazonaws.com/MyBucketName/FileName.jpg?X-Amz-Date=20160126T141139Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=Lots_of_letters_and_Numbers2&X-Amz-Credential=MYAMAZON_CREDENTIALS/20160126/us-east-1/s3/aws4_request&X-Amz-SignedHeaders=Host&x-amz-security-token=REALLY_LONG_SECURITYTOKEN
或者,我可以使用AWS SDK从我的C#代码生成过期URL。类似于:
var expiryUrlRequest = new GetPreSignedUrlRequest
{
BucketName = WebConfigurationManager.AppSettings["AWSBucketName"],
Key = fileName,
Expires = DateTime.Now.AddHours(3)
};
这将生成一个以“AWSAccessKeyId”作为参数的URL
在我的网页中使用这些URL是否安全?在我的网站上使用它们会有什么风险
非常感谢您抽出时间。如果您需要更多信息或我不清楚,请告诉我
编辑:为了进一步了解我的应用程序,用户正在将一个文件上载到S3存储桶。我使用SignalR在我的网页上显示S3中的图像以供用户查看,从而确认图像是否在存储桶中。首先,有两种方法限制对存储桶内容的访问:
- Private-用户需要AWS凭据才能访问该文件(与您的答案中所示的方式相同)
- Public-每个人都可以访问bucket()的内容
不要在任何地方发布带有AWS凭据的url!!!不要将存储桶公开。如果这样做,则user1可能会看到user2上载的文件 您可以允许用户使用预先签名的URL在特定时间段内检索单个文件
GetPreSignedUrlRequest
为您希望用户下载的文件生成预签名URL
标记中使用该URLGetPreSignedUrlRequest
调用的一部分)GetPreSignedUrlRequest
时,它会返回带有AWSAccessKeyId=
和签名的url=代码>参数。向用户提供此信息安全吗?这是预签名URL的工作方式,AWSAccessKeyId是临时的,签名是确保URL无法修改的方式。你可以肯定地这样做。是的,我做了几次,但使用的是python boto3包。我不是c#dev,但如果你有相同的访问权限s密钥作为在AWS中为您的IAM用户生成的密钥,那么在您的生成中肯定有错误(url中生成的临时访问密钥通常以“ASIAI”开头,而经典访问密钥以“akai”开头)。实际上,我只是仔细检查了一下(我使用两种不同的方式生成我的url),并且使用boto3实际上使用了我真正的IAM访问密钥。但是,由于这是一个专门从S3下载的IAM用户,并且您无法获得我的密钥,因此这仍然是安全的,并且您使用的方法正确。我确认您可以使用此方法。URL中的凭据可能与用于生成临时URL的访问密钥相同。但是,在仅包括访问密钥部分并且仍然安全。如果这仍然是一个问题,那么(正如Tom提到的),您可以创建一个专用于从S3下载的IAM凭据。我将更新我的答案以反映所有这些。