Я хочу создать корзину S3, к которой могут получить доступ только пользователи, созданные с помощью Cognito при входе в систему. - PullRequest
0 голосов
/ 23 марта 2020

Я хочу быть доступным следующими способами:

const cognitoUser = userPool.getCurrentUser();
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,
Logins: {
  'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx': result.getIdToken().getJwtToken()
}
});

// このようにアクセスしたい。
window.location.href = "https://nabezokodaikon-private.s3.amazonaws.com/private/index.html";

Я создал следующую политику S3 Bucket.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
              "Federated": "cognito-identity.amazonaws.com"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::nabezokodaikon-private/*"
        },
        {
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxxx:user/nabezokodaikon"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::nabezokodaikon-private/index.html"
        }
    ]
}

Но это недоступно. Как я могу делать то, что хочу?

1 Ответ

0 голосов
/ 25 марта 2020

Пока ваш код получает учетные данные из Cognito, эта строка не предоставляет никакой информации, которая идентифицирует запрос как поступающий из учетных данных Cognito:

window.location.href = "https://nabezokodaikon-private.s3.amazonaws.com/private/index.html";

Этот URL-адрес является обычным анонимным запросом, который должен быть отклоненным (как есть).

Чтобы получить доступ к частному контенту, вам необходимо создать предварительно подписанный URL-адрес , который использует учетные данные, предоставленные Cognito, чтобы «подписать» запрос. Предварительно подписанный URL-адрес обеспечивает ограниченный по времени доступ к частному контенту в Amazon S3.

См .: Предварительно подписанные URL-адреса Amazon S3

Вам также необходимо удалить Deny, так как он заблокирует любой доступ, который не получен от указанного пользователя. По умолчанию корзины Amazon S3 являются закрытыми, поэтому Deny следует использовать только в тех случаях, когда Allow необходимо переопределить.

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