[英]Cloudfront returns 403 from a different location
我有一個 S3 存儲桶托管對象,我的用戶可以通過我的應用程序下載它。 我將 Cloudfront 用於帶有簽名 URL 的 CDN。 在美國一切正常,但是當我在另一個國家/地區(印度)的用戶嘗試下載相同的對象時,他們收到錯誤消息稱The remote server returned an error : (403) Forbidden
我確認我沒有在 CloudFront 分配中設置任何地理限制
我在 CloudFront 中配置的源名稱和域路徑的格式為xyz-final-bucket.s3.us-west-2.amazonaws.com
下面是為 CloudFront 生成簽名 URL 的代碼:
Public Shared Function CreateCannedSignedURL(ByVal urlString As String, ByVal durationUnits As String, ByVal durationNumber As String, ByVal CannedPolicy As String, ByVal privateKey As String, ByVal privateKeyId As String) As String
Dim timeSpanInterval As TimeSpan = GetDuration(durationUnits, durationNumber)
Dim strPolicy As String = CreatePolicyStatement(CannedPolicy, urlString, DateTime.Now, DateTime.Now.Add(timeSpanInterval), "0.0.0.0/0")
If "Error!" = strPolicy Then Return "Invalid time frame. Start time cannot be greater than end time."
Dim strExpiration As String = CopyExpirationTimeFromPolicy(strPolicy)
Dim bufferPolicy As Byte() = Encoding.ASCII.GetBytes(strPolicy)
Using cryptoSHA1 As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider()
bufferPolicy = cryptoSHA1.ComputeHash(bufferPolicy)
Dim providerRSA As RSACryptoServiceProvider = New RSACryptoServiceProvider()
Dim xmlPrivateKey As XmlDocument = New XmlDocument()
Dim pemText As String
pemText = privateKey
Dim xmlContent = RsaKeyConverterHelper.PemToXml(pemText)
xmlPrivateKey.LoadXml(xmlContent)
providerRSA.FromXmlString(xmlPrivateKey.InnerXml)
Dim rsaFormatter As RSAPKCS1SignatureFormatter = New RSAPKCS1SignatureFormatter(providerRSA)
rsaFormatter.SetHashAlgorithm("SHA1")
Dim signedPolicyHash As Byte() = rsaFormatter.CreateSignature(bufferPolicy)
Dim strSignedPolicy As String = ToUrlSafeBase64String(signedPolicyHash)
Dim downloadLink As String = urlString & "?Expires=" & strExpiration & "&Signature=" & strSignedPolicy & "&Key-Pair-Id=" & privateKeyId
Return downloadLink
End Using
End Function
我的存儲桶中的所有對象都存儲在 One-Zone IA 中。 我不確定這是否是原因,因為我也嘗試過更改它的標准。
是否需要對我的配置進行任何更改才能啟用從所有地理位置下載?
問題在於在印度發起請求的機器。 它的時間沒有與其時區同步。 該客戶端上設置的時間比實際時間晚了大約一個小時。 因此,當生成到期時間戳時,它總是落后於實際時間。 在客戶端修復時間后,問題得到解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.