Папка пользователя AWS List для S3

Создание приложения C# для просмотра папок и файлов, хранящихся в AWS S3, для клиентов, которые регистрируются на моем сайте.

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

Это то, что я получил до сих пор.

            Policy pl = GeneratePolicy(bucketName, foldername);
            Credentials creds = GetFederatedCredentials(pl, username);


            var sessionCredentials = new SessionAWSCredentials(creds.AccessKeyId, creds.SecretAccessKey, creds.SessionToken);

            using (var client = new AmazonS3Client(sessionCredentials, Amazon.RegionEndpoint.USEast1))
            {
                var response = client.ListObjects(request);

                foreach (var subFolder in response.CommonPrefixes)
                {
                    /* list the sub-folders */

                    Console.WriteLine(subFolder);
                }
                foreach (var file in response.S3Objects)
                {
                    /* list the files */
                }
            }

Но получаю ошибку на client.ListObjects(запрос) - ошибка отказа в доступе

Вот код GeneratePolicy

public static Policy GeneratePolicy(string bucket, string username)
    {
        var statement = new Statement(Statement.StatementEffect.Allow);

        // Allow access to the sub folder represented by the username in the bucket
        statement.Resources.Add(ResourceFactory.NewS3ObjectResource(bucket, username + "/*"));

        // Allow Get and Put object requests.
        statement.Actions = new List<ActionIdentifier>() { S3ActionIdentifiers.GetObject, S3ActionIdentifiers.PutObject };

        // Lock the requests coming from the client machine.
        //statement.Conditions.Add(ConditionFactory.NewIpAddressCondition(ipAddress));

        var policy = new Policy();
        policy.Statements.Add(statement);

        return policy;
    }

Вот код GetFederatedCredentials

public static Credentials GetFederatedCredentials(Policy policy, string username)
    {
        var request = new GetFederationTokenRequest()
        {
            Name = username,
            Policy = policy.ToJson()
        };

        var stsClient = new AmazonSecurityTokenServiceClient(AWS_ACCESS_KEY, AWS_SECRET_KEY, Amazon.RegionEndpoint.USEast1);

        var response = stsClient.GetFederationToken(request);
        return response.GetFederationTokenResult.Credentials;
    }

Любая помощь будет принята с благодарностью. заранее спасибо


person dogwasstar    schedule 28.04.2015    source источник


Ответы (1)


Вы должны добавить «ListBucket» в оператор. Действия

person Evgeniy Kuzmin    schedule 28.04.2015