AWS Cognito - доступ к S3 с использованием роли IAM - PullRequest
0 голосов
/ 14 февраля 2019

В настоящее время я работаю над сценарием использования, где мне нужно аутентифицировать пользователей веб-приложений с помощью AWS Cognito и предоставить доступ к определенным для пользователя папкам в корзине S3.Для этого я использую JavaScript на стороне браузера и могу аутентифицировать пользователей.

Я создал политику IAM, в которой я пытаюсь ограничить доступ S3 к определенным папкам для аутентифицированных пользователей.Почему-то эта политика не работает.

Политика, которую я здесь пробую, приведена ниже:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "cognito-identity:*",
            "mobileanalytics:PutEvents",
            "cognito-sync:*"
        ],
        "Resource": "*"
    },
    {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::mycognitobuckettest",
        "Condition": {
            "StringLike": {
                "s3:prefix": [
                    "cognito/mycognitobuckettest/${cognito-identity.amazonaws.com:sub}/",
                    "cognito/mycognitobuckettest/${cognito-identity.amazonaws.com:sub}/*"
                ],
                "s3:delimiter": [
                    "/"
                ]
            }
        }
    },
    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::mycognitobuckettest/cognito/mycognitobuckettest/${cognito-identity.amazonaws.com:sub}/*"
    }
]}`

Если я удаляю ${cognito-identity.amazonaws.com:sub} из пути к ресурсу, я могуполучить доступ к S3 ведро.Однако, если я помещу это в путь к ресурсу, а также в ключ условия, я получу ошибку об отказе в доступе.

Согласно моему пониманию, значение для ${cognito-identity.amazonaws.com:sub} - это идентификатор региона и uuid, которые вы можете получить.как это var identityID = AWS.config.credentials.identityId

Я пытаюсь перечислить объекты в пути к ресурсу, и ниже приведен код JavaScript, который я использую для перечисления объектов

var listObjectParms = {Bucket: bucketName, Delimiter: '/', Prefix: bucketPrefix};

    s3.listObjects(listObjectParms, function(err, data) {
        if(err) {
            console.log("Error", err);
        } else {
            console.log("LIST OBJECT successful", data);
        }
    });

Какое точное значение для${cognito-identity.amazonaws.com:sub}?

Я создал папку в корзине S3 в соответствии с идентификатором, который я получаю.

Я застрял в этой точке прямо сейчас.Все, что вы можете оказать любую помощь в решении этой проблемы.

Спасибо,

Avinash

1 Ответ

0 голосов
/ 15 февраля 2019

Я недавно столкнулся с этой проблемой.Это значение $ {cognito-identity.amazonaws.com:sub} не является частью вашего пула пользователей cognito.Это идентификатор, который вы получаете от Cognto.

например: us-east-1: aaaaaaa-bbbb-1111-ccccccccc11f

Вы можете получить этот идентификатор в javascript sdk для cognito, используя get_id метод

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