специальные символы в политиках AWS S3 - PullRequest
1 голос
/ 06 апреля 2019

Мой сервер выдает клиенту указанную ниже политику, чтобы они могли перечислить содержимое своего домашнего каталога в сегменте:

s3://abcd/public/USERNAME

Со стороны клиента я использую API-интерфейс AWS с политикой для вывода списка сегментов..

Все работает нормально с обычными словами, однако, когда имя пользователя включает символ @, я получаю ЗАПРЕЩЕННЫЙ ответ.

s3://abcd/public/@makeihan

Я подозреваю, что это мешаетс этими амазонскими ARN-вещами, но, видимо, символ @ является допустимым и поддерживаемым символом в ключах (также пытался создавать объекты из консоли, и он работает нормально), мне интересно, если я могу избежать этого где-нибудь в политике , или этот символ не поддерживается?

Заранее спасибо.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::abcd"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "public/@makeihan/*",
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::abcd/public/@makeihan",
                "arn:aws:s3:::abcd/public/@makeihan/*"
            ]
            }
        ]
}

1 Ответ

2 голосов
/ 07 апреля 2019

Мне нужно было две вещи, чтобы решить эту проблему, которая включала ошибку в SDK, который я использовал:

1) указать encoding="url" в запросе listObjects.Если не указано, SDK экранирует ключи.Если указан URL-адрес, SDK использует необработанные ключи.- Кстати, для меня это звучит нелогично

        ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                    .withBucketName(S3_BUCKET)
                    .withDelimiter(DEFAULT_DELIMITER)
                    .withEncodingType("url")    // THIS DOES THE MAGIC
                    .withPrefix(prefix);

2) Обновление AWS SDK.В старых sdks есть ошибка, касающаяся именно этого, поэтому остальные методы, такие как PutObject, GetObject и т. Д., Заново перекодировали ключи.

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