Почему я не могу получить доступ к своим частным объектам s3 с помощью AWS Amplify storage.get с доступом администратора и правильным набором политик. Ошибка 403 - PullRequest
0 голосов
/ 20 июня 2020

, поэтому по умолчанию «Я просмотрел все ... et c», но не повезло.

Моя проблема в том, что я не могу загрузить или получить доступ к своим объектам s3 через мой клиент. Я не могу получить к нему доступ как пользователь, который загрузил объект, ни как тестовый пользователь, имеющий доступ к группе с политикой, специально настроенной для доступа к этому сегменту. Загрузить его можно.

Я попытался загрузить файл в консоли, и он работает нормально, но при попытке указать URL я получаю ошибку 403. Я знаю, что они говорят, что URL-запрос должен быть предварительно подписан, но, согласно документации Amplify, он уже должен быть предварительно подписан. Я не знаю, имеет ли это значение или нет, но я создал ведро s3 вручную, но предоставил доступ через конфигурацию Amplify.

Мой вариант использования: у меня есть аутентификация пользователя с помощью AWS Cognito, что позволяет им загрузить файл в корзину s3. Затем я хочу разрешить этому пользователю и пользователям, назначенным группе AdminPortalUserAccess, иметь доступ к объектам. Цель состоит в том, чтобы наши сотрудники просматривали файлы, загружаемые пользователем, и предоставляли примечания / отзывы об отчете пользователю через интерфейс.

Вот моя установка и использование:

Amplify Конфигурация:

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-адрес, и мой ключ доступа publi c выглядит правильно и является тем, который назначен идентификатору identityId, который я использую для размещения и получения (попытки) в ведре s3.

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

Что мне не хватает?

EDIT Итак, я смог выяснить причину root, хотя я не думаю, что это решит проблему. Когда я вызываю Storage.put, он создает новое удостоверение в моем пуле федеративных удостоверений и использует их в качестве учетных данных. Тот, который не прошел проверку подлинности и не имеет надлежащей роли для доступа к корзине. Я обнаружил это, вызвав currentUserCredentials (), который вернул совершенно другой идентификатор личности. Теперь вопрос в том, почему Amplify не использует идентификатор, связанный с моим логином, который связывает пул пользователей с идентификатором личности ????

1 Ответ

0 голосов
/ 23 июня 2020

Итак, просмотрев документы и несколько отчетов об ошибках на github, я определил, что конфигурация в моей папке .amplify неверна. Я воссоздал хранилище через ampify cli, развернул ресурс, и он сработал. Так что в моем подходе нет ничего неправильного, кроме моих файлов .amplify, которые должны были быть изменены, когда мы переносили репо ранее на этой неделе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...