1
すべてのオブジェクトACLをバケット内でループして、それらのすべてから「Everyone」権限を削除します。ここでのアイデアは、現在のすべての権限を保持することです。aws s3オブジェクトACLから.NET APIを使用して「Everyone」を削除
私の問題は、PutACL呼び出しが機能しないことです。以下の例では、新しいAccessControlListが作成され、「everyone」エントリは省略されています。 PutACL呼び出しは正常に戻りますが、オブジェクトのACLは変更されません。
おそらく、特定の補助金を特定して削除する簡単な方法があります。
AmazonS3Client s3 = new AmazonS3Client();
GetACLRequest aclRequest = new GetACLRequest() { BucketName = "my-bucket", Key = "/dir/protect_me.txt" };
var aclResponse = s3.GetACL(aclRequest);
bool foundEveryonePriv = false; //if found at least one.
S3AccessControlList newAcl = new S3AccessControlList();
foreach (var grant in aclResponse.AccessControlList.Grants)
{
bool grantToEveryone = string.Compare(grant.Grantee.URI, "http://acs.amazonaws.com/groups/global/AllUsers") == 0;
Logger.log.InfoFormat("{0},{1},{2},{3}", aclRequest.BucketName, o.Key, grant.Permission, (everyoneHasThisPriv ? "EVERYONE" : string.Empty));
if (grantToEveryone)
{
foundEveryonePriv = true;
newAcl.AddGrant(grant.Grantee, grant.Permission);
}
}
//modify the items if necessary and requested.
if (foundEveryonePriv)
{
newAcl.Owner = aclResponse.AccessControlList.Owner;
var response = s3.PutACL(new PutACLRequest() { AccessControlList = newAcl, BucketName = aclRequest.BucketName, Key = o.Key });
}