creating c# application view folders , files stored in aws s3 clients sign site.
currently can create iam user , assign permission specific folder. ran issues when trying view folder , contents. can view folder if use aws access key , secret key wondering if there user level credential can use retrieve folders user has been given permission to?
this have got far.
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 sub-folders */ console.writeline(subfolder); } foreach (var file in response.s3objects) { /* list files */ } }
but getting error on client.listobjects(request) - access denied error
here generatepolicy code
public static policy generatepolicy(string bucket, string username) { var statement = new statement(statement.statementeffect.allow); // allow access sub folder represented username in bucket statement.resources.add(resourcefactory.news3objectresource(bucket, username + "/*")); // allow , put object requests. statement.actions = new list<actionidentifier>() { s3actionidentifiers.getobject, s3actionidentifiers.putobject }; // lock requests coming client machine. //statement.conditions.add(conditionfactory.newipaddresscondition(ipaddress)); var policy = new policy(); policy.statements.add(statement); return policy; }
here getfederatedcredentials code
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; }
any appreciated. in advance
you should add "listbucket" statement.actions