簡體   English   中英

為什么我無法使用具有管理員訪問權限和正確策略集的 AWS Amplify storage.get 訪問我的 s3 私有對象。 收到 403 錯誤

[英]Why can't I access my s3 private objects using AWS Amplify storage.get with Admin access and proper policy set. Getting 403 error

所以默認的“我看遍了……等等”,但沒有運氣。

我的問題是我似乎無法通過我的客戶端下載或訪問我的 s3 對象。 我無法以上傳 object 的用戶身份訪問它,也無法以有權訪問具有專門設置為訪問該存儲桶的策略的組的測試用戶身份訪問它。 上傳就好了。

我嘗試在控制台中下載文件並且工作正常,但在嘗試 url 時出現 403 錯誤。 我知道他們說 URL 請求需要預先簽名,但根據 Amplify 文檔,它應該已經預先簽名。 我不知道這是否重要,但我手動創建了 s3 存儲桶,但通過 Amplify 配置授予訪問權限。

我的用例:我有一個用戶使用 AWS Cognito 進行身份驗證,這允許他們將文件上傳到 s3 存儲桶。 然后,我希望允許該用戶和分配給 AdminPortalUserAccess 組的用戶能夠訪問這些對象。 我們的目標是讓我們的員工查看用戶上傳的文件,並通過界面向用戶提供有關報告的注釋/反饋。

這是我的設置和使用:

放大配置:

Amplify.configure({
  Auth: {
    identityPoolId: 'us-east-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    region: 'us-east-2',
    userPoolId: 'us-east-2_xxxxxxxxx',
    userPoolWebClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
  },
  Storage: {
    AWSS3: {
      bucket: 's3-credit-report-uploads-dev',
      region: 'us-east-2',
      identityPoolId: 'us-east-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    }
  }
});

這是我的 AdminPortalUserAccess 組策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::s3-credit-report-uploads-dev"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor2",
      "Effect": "Allow",
      "Action": "s3:*Object",
      "Resource": "arn:aws:s3:::s3-credit-report-uploads-dev/*"
    }
  ]
}

客戶端:

  async getSummaryPdf(report: any) {
    // const user = await Auth.currentCredentials(); // <-- just to confirm I am logged in
    // console.log('user: ', user); // <-- just to confirm I am logged in
    
    const data = await Storage.get(report.reportId, {
      level: 'private',
      identityId: report.reportUserId
    })
    console.log('data: ', data); // <-- never reaches here
    return data;
  }

如果我將 Storage.get 更改為 then/catch,我可以看到預簽名的 URL 是什么,並且我的公共訪問密鑰看起來正確,並且是分配給我用來在 s3 上放置和獲取(嘗試)的 identityId 的那個桶。

https://s3-credit-report-uploads-dev.s3.us-east-2.amazonaws.com/private/8ef10ec4-efd2-47c3-bed9-f6c878c8ce29/910c335a-46a6-42d1-b4f3-67507cd11322?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAUEICY4AUUI3VO4FS%2F20200620%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20200620T204746Z&X-Amz-Expires=900&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEK3%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMiJGMEQCIFqpajXg7Q1cZJg9QMfg1a0o%2BYQg2GVNhdOaWXn03y5LAiAV8uIcT4SIdSLuKYYwQ3VJk%2Fbnbm9NfNORzFST1CbvsSr%2BAwg2EAAaDDI4NDAxMDUzNzAwMSIMmkR4ZKNqYm292%2F%2B9KtsDtEIi2CAi6zxA3z7F6dVr98KaXwEUg%2BEQir6tkRmhr92AVqHu9an3N35TgTiRdxcaxTF6N1y1rdF67TUnSG1tYRWL33tGA0LYpSiV39HMr2K0jC%2FuSvMf60KMwLwr%2BpzPoCM5qInuRiyNKm05Gc0kTjpu3MjgGzzTuehhCJmBy%2BjL7cc2R%2FvT4x14NwVdrYt1kr2p7Q7lFd6SU4DEA%2FygbWN5NbbWEvx7KsrIAmZNJ0J7%2BCDgZfE47l9UTOctUCENzn%2FfxXjjYBbckF9C8vLgghILCZzGWeqY4WaDXhxsNr8yYIJwRc2rg3yij%2F6C6HEDasWsp4pJsEABPS1BrN7f%2Fyi0Q03iRNt%2B8ccnlStF1T7XZRrzCHYxN69nhJRla%2FnoOjQGHmqkFAU9RBGMZbya%2FC2U42%2FyToO1z0xE8LpN8uNgAwDEvtZYxe8WkJ%2BG2co4VaSxOyC%2FmNbqN6ysawNQJ13Ar3qurQHO%2FnBf%2FaxHnKcAysTqs6f57iUUYLtZKMLKI3cZEqM2PZDOI1CV1X2rshc4vgD8b8dePdvvkxA21QRk1qwMTOoQI1pEv79%2B%2F%2FDKltzS5jpVX76Adwko1kD1%2BrA0u%2B0QW5WxNT5cGnscwF0nC1Wo%2BTWlaaq0UTDy67n3BTrMAkhO%2BPQj6qc7XeXgb13kNinsPHZeHA5%2BRDT6Q3ED3K7EDG%2BkpOiw%2FTdgO%2B8DhztESpchYCyY%2B4kck00No1l78%2F%2FU8Fsb0POFFrwEkSICY1vKMHHduTP5%2Bvq27DBue19BkFYdvkaAE4eJNHkAgShgUmclDLS88c9Hk%2BeyqlWTBvN4xTauWX2S1eb92X%2B5bgIoFCwyI%2FAu6shxAERKRYxAI%2BGnWOy4ifjMePcF38OMJ7HwM5N9Y7UcjBM96DKGJ24EGHdfD50c9DI66X6LLuV%2FhmEA93cjrmDWfA8fT%2BKS4JAqANpnyL%2FWmYucwBjpseUS0Nnd4fYD4G5Pu3Z5mBW3Zh7ySdZvhTEnOIpw0kzgC%2BR%2FJE2urE5%2FjDAw7sUyXKsW0IiIHwmelMnN6DXnDapGPow2z5wERahFVnJqRjpzr%2BYfJgx3%2F4LwT05cCUff&X-Amz-Signature=84b15e834dd93f9dc1f7995097a18c9ad6c58235674e4b0fd48dd42767315cf7&X-Amz-SignedHeaders=host&x-amz-user-agent=aws-sdk-js-v3-%40aws-sdk%2Fclient-s3%2F1.0.0-gamma.2%20Mozilla%2F5.0%20%28Macintosh%3B%20Intel%20Mac%20OS%20X%2010_13_6%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F83.0.4103.61%20Safari%2F537.36%20aws-amplify%2F3.2.8%20js&x-id=GetObject

我錯過了什么?

編輯所以我能夠找出根本原因,盡管我認為這不能解決問題。 當我調用 Storage.put 時,它會在我的聯合身份池中創建一個新身份並將其用作憑據。 未經身份驗證且未分配適當角色來訪問存儲桶的一種。 我通過調用 currentUserCredentials() 發現了這一點,它返回了一個完全不同的身份 ID。 現在的問題是,為什么 Amplify 不使用與我的登錄關聯的身份 ID,它將用戶池鏈接到身份 ID?????

因此,在查看文檔和幾個 github 錯誤報告后,我確定 my.amplify 文件夾中的配置不正確。 我通過放大 cli 重新創建了存儲並部署了資源並且它工作。 因此,我的上述方法似乎沒有任何問題,除了 my.amplify 文件必須在我們本周早些時候遷移 repo 時被更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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