簡體   English   中英

Cloudfront 從不同位置返回 403

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM