我正在开发一项服务,需要通过消息应用程序向用户发送图像。根据Messenger应用程序的API指南,图像需要以以下格式发送:
{
"type": "image",
"originalContentUrl": "https://example.com/original.jpg",
"previewImageUrl": "https://example.com/preview.jpg"
}
为了实现这一目标,我正在考虑将图像上传到 S3 并提供其 URL。但是,我的 S3 存储桶阻止了所有公共访问,因此我一直在评估以下两个选项:
通过使用 CloudFront,我可以安全地访问 S3 存储桶中的文件。 URL 的格式为 {my_domain}/assets/dog.png。
问题:
我的服务仅限登录用户使用,因此未登录的收件人可能无法访问 URL。 URL 格式是可预测的,这可能允许未经授权的用户访问敏感图像。
使用预签名 URL 可以访问 S3 存储桶,而无需公开访问。
优点:
用户无需AWS凭证或无需登录即可访问图像。 URL 复杂且难以猜测,使得共享敏感数据更加安全。 可以设置过期时间,让URL在指定时间后失效,节省存储空间并增强安全性。
示例网址:
https://privatebucketandsignedurl.s3.ap-northeast-1.amazonaws.com/LINE_Brand_icon.png?response-content-disposition=inline&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJb%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLW5vcnRoZWFzdC0xIkcwRQIgeuzauljE10A8zz3%2FpefZvcX1wawEFEi3PlLQh3mcn7YCIQCXyBm2m2DxrnFg8QKsryLsdJZOmgFDExSmpTM%2BURy%2FSiroAwg%2FEAAaDDg1MTcyNTQ2NDk4NyIMQqFWld9eW1rRywNcKsUDXeEe8%2FOgUuwxNAXjwFq9xiFs5lM0z0dNbAx9XRhIIws5Z6GrE%2Buz2ul%2FhJl207OU0HMKG6p48frMFIWzbcEoYXYp0A2xg1P2IbdHDdCT133dxUq41uCwwmtxULqzCF3xPFKPErCjKZsxdSxjR6cIEus2VD4%2B8Fwji2xfNCqxRAVUyvwsCCtjLVCCGEf2HpuoyFzOpNFNEnXssRg33PcwagRsbe8yQsH94DRnLh0NegvPiJJ56CZ%2Fq9nStwYNphKfh1BtfdeWCBU7Vqo5FAhi4UC5gBCU%2FYojZzbGs%2FCr7T7s41uGfEU72YbO8E%2FgGxlEf81DWHmrkgN%2FgOA0pYatnyhuSqLI2NAY6eN4gPxU5XMun1ySk25zpEwTAvvv8slCnmKYZQPAMWG6ZT0mJ%2Bpg44k8Kf3wtranW1PJBJg7OLFu1zMQvj8pW2duxDrt7VDGXE8%2BBl28kSIoxq%2BPFsx5F17UCm%2BEc9g%2BAQokKOqo8%2BYn4s5CZQn9%2F6Q0GAV%2FucGvqqFDksv6ixAiNbXI2FWHD8%2BLYtG0SICUJaS5ytzvsZ%2FTGTdsy2g1%2FxKVXU3Q7%2Brc7wQKrQJMBJhIzb2r6hJwykOl%2FEl1MLTXmroGOuQC8%2Bsy3mWaYqz8lOipn7k7aYzGtXATqX3EGS6CmBIa%2BTdUm5AN8kh2qoFmwAUHHg0brtcmCoQU9sWfOie0E%2FkJIWwPl5a1MkXJUJH2aCcQJNsVeTT4LRFzepbU%2B5S%2F8vZ84IfZrX99dIlggEw3EqbL6NqmIAOWt22wjT8jEjyW2cg%2BhcJs%2FiPHHs4fnm3b3Xd9cpKjr04xw130HJjewsM%2Fqi4hJbOFwiXGxPobRaogpQ6QTxFRwaO4mi78fFM4Iq%2B1fOM8c7t9l79eUOtTJYf0Vd4iX7FdzgjXmosAqW%2FtkTtF7U0XTuSWOI0tKfujcu9b0F4EeONDGhMUuS9XHECGBzZCYADt6UZ8tt%2BlsFCRYbVuVBp50y2B9Pd%2B%2BFTGSjAcEOE%2Fh4dMzJwQRWlajC4k3DU0nRD4jxyR%2BeqUmdNhZxdoQ98P%2FxcX31bz09QYInvJ5xF4qMEo84mkG2Cphj3J6Qr1xIM%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA4MTWLGWNRDFZDGQ6%2F20241127%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20241127T060055Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&X-Amz-Signature=cee308d7ea85628ecaa3bc78f2e45b411cfd981009d478f303d5f520056acfa3
问题:
在这种情况下使用预签名 URL 是否合适?
是否有任何我可能忽略的安全或技术考虑因素?
使用预签名 URL 在这里很有意义。执行此操作时,您可以设置链接的有效时间。然后您可以使用 SNS 等服务向用户发送带有链接的消息。