背景:S3跨帳戶的訪問:在閱讀自己的水桶一個對象,由另一個帳戶書面
我有兩個賬號A
和B
。帳戶A
擁有一個存儲桶my-bucket
。我已經給賬戶B
訪問這個桶 - 賬戶B
可以從這個桶中讀取對象並將其寫入對象。這是按預期工作的。
但是,帳戶A
只能讀取它自己寫入的my-bucket
中的那些對象。雖然它可以列出帳戶B
寫入的那些對象,但它不能讀取這些對象。
以下是當我嘗試使用AWS CLI以A
的AWS配置從my-bucket
下載所有對象時所看到的內容。
download: s3://my-bucket/PN1492646400000.csv to tp/PN1492646400000.csv
download: s3://my-bucket/PN1491264000000.csv to tp/PN1491264000000.csv
download: s3://my-bucket/PN1493942400000.csv to tp/PN1493942400000.csv
download failed: s3://my-bucket/PN1503346865232.csv to tp/PN1503346865232.csv An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
download: s3://my-bucket/PN1495389670000.csv to tp/PN1495389670000.csv
download: s3://my-bucket/PN1496685403000.csv to tp/PN1496685403000.csv
download: s3://my-bucket/PN1497945130000.csv to tp/PN1497945130000.csv
download: s3://my-bucket/PN1500508800000.csv to tp/PN1500508800000.csv
正如人們所看到的,我可以下載所有的文件,但PN1503346865232.csv
(這是使用Java方法putObject
寫帳戶B
)。
我試過到目前爲止:
我特地到以下兩個問題:
- Amazon S3 file 'Access Denied' exception in Cross-Account:一個評論的要求做了putObject與
acl
,但沒有指定什麼acl
。 - S3: User cannot access object in his own s3 bucket if created by another user:這說明停止帳戶B將對象放入
my-bucket
而不給予所有權訪問權限。 只是把這個約束幫助我獲得完整的訪問權限嗎?
這是我在將對象放入java代碼時嘗試放置ACL的方式。
AccessControlList acl = new AccessControlList();
acl.grantPermission(new CanonicalGrantee(S3_BUCKET_OWNER_ID), Permission.FullControl);
PutObjectRequest putObjectRequest = new PutObjectRequest(S3_BUCKET, remoteCleanedPrismFilename, fileStream, null)
.withAccessControlList(acl);
s3Client.putObject(putObjectRequest);
它拋出異常的說法:com.amazonaws.services.s3.model.AmazonS3Exception: Invalid id
問題:
- 我不知道我怎麼得到這個ID。它不是aws帳號ID,即10-12位數字嗎?
- 即使我找到了這個ID,是否會給這個ACL一樣的
bucket-owner-full- control
?