Сбой политики для пула пользователей Cognito для доступа к S3 - PullRequest
0 голосов
/ 17 октября 2018

У меня есть пользовательский пул Cognito, которому требуется доступ к корзине S3 с префиксом на основе идентификатора пользователя (${cognito-identity.amazonaws.com:sub}).Я настроил роль для пула пользователей в IAM со следующей встроенной политикой, скопированной и отредактированной из существующей аналогичной политики для группы IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::[Bucket Having Problems]"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::[Unrelated Bucket]/${cognito-identity.amazonaws.com:sub}/*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[Bucket Having Problems]/${cognito-identity.amazonaws.com:sub}/*"
        }
    ]
}

На вкладке Доверительные отношения есть

Trusted entities: cognito-identity.amazonaws.com

с

Conditions: StringEquals, cognito-identity.amazonaws.com:aud, [Pool ID of User Pool I want to use]

Когда я пытаюсь либо ListObjects в желаемом Bucket, с префиксом

[Cognito User Id]/[optional: Subfolder, with or without trailing "/"]

или getObject on

[Cognito User Id]/[File I know is there]

Я получаю ошибку 403: Access Denied (или иногда ошибку, что доступ без аутентификации запрещен, после чего мне нужно снова ввести свое имя пользователя и пароль).

Я подтвердил, что UserId (${cognito-identity.amazonaws.com:sub}) на CognitoUserPool.getCurrentUser совпадает с Cognito User, на котором я вхожу (хотя в середине есть CognitoCachingCredentialsProvider, который имеетразные IdentityId связаны с ним.

Я понятия не имею, применяется ли моя политика даже должным образом, я думаю, что все правильно привязано, но Access Advisor говорит, что к ней не обращались впериод отслеживания. Делаю ли я удаленно правильную вещь?очевидно, я скучаю?Могу ли я собрать какие-либо данные о проблеме?Исключения всегда имеют идентификатор запроса и расширенный идентификатор запроса S3, но Google, похоже, предполагает, что я могу воспользоваться этим, только напрямую обратившись в службу технической поддержки AWS.

Как предоставить разрешения пользователю Cognitoчитать из S3 Bucket на основе информации, однозначно идентифицирующей пользователя Cognito?

ОБНОВЛЕНИЕ: я изменил политику, чтобы разрешить доступ GetObject ко всему, и я все еще получаю AccessDenied:

    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "*"
    }

Я думаю, что проблема в том, что политика вообще не используется, и я понятия не имею, почему.

ОБНОВЛЕНИЕ: Я думаю, что мне нужно сделать запрос на использование роли.Выяснение того, как сделать это сейчас.

ОБНОВЛЕНИЕ: Попытка, принимая Роль:

AssumeRoleRequest roleRequest = new AssumeRoleRequest().withRoleArn([ARN for Role]).withRoleSessionName([I made up a name for this]);
AssumeRoleResult result = new AWSSecurityTokenServiceClient(cognitocachingprovider.getCredentials()).assumeRole(roleRequest);
AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(result.getCredentials().getAccessKeyId(), result.getCredentials().getSecretAccessKey()));
S3Object obj = client.getObject(bucket, pathOfKnownObject);

И я получаю 403: Отказано в доступе assumeRole(roleRequest)

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