Site icon Mr. 沙先生

AWS S3 的 Cross-Account 方式

這篇看起來好像很沒必要一提,覺得在 AWS S3 跑 Cross-Account 好像很簡單阿!!

 

一開始我也是這樣想啦,可是 AWS 就是這麼的博大精深 (難搞),總是有一些美美尬尬的地方。

 

事情的緣由是同事今天跑來問 S3 怎麼 Cross-Account 啊?不就是在 S3 bucket 的 Permissions 那邊填上 Cross-Account 的 Account-ID 就好了嗎?

 

正當覺得很聰明的時候才知道事情不是憨人所想的這麼簡單

 

就是這個地方,當你填上 Account-ID 的時候,他只會告訴你 invalid id,填上 Cross-Account 的 email 是可以過的,但是在這邊直接填 AWS Account email 又很怪 … 覺得很不合常理。

 

決心去找 AWS 文件看看問題,然後在一篇講 S3 Cross-Account 的 example 找到靈感「Example 4: Bucket Owner Granting Cross-account Permission to Objects It Does Not Own」裡面有提到需要 Canonical user ID,原來除了 AWS Account-ID 以外,還有一個叫做 Canonical user ID。

 

Canonical user ID 很不常用也很難找,從 AWS 文件看起來 Canonical user ID 是用於 S3 bucket 使用,那麼要怎麼找到 Canonical user ID?在「AWS Account Identifiers」這邊有提到怎麼搜尋 Canonical user ID,除了用 root user 登入看以外,最快的方式就是直接用 ListBuckets 這隻 API 就可以看到:

$ aws s3api list-buckets | grep ID
"ID": "17388ace6c9f75e7c1b505c5ce0383b840d2d53b9222616e2860549529ee02c0"

 

Canonical user ID 是一個由 64 個字元組成的 String

You can use canonical user IDs in an Amazon S3 bucket policy for cross-account access, which means an AWS account can access resources in another AWS account. For example, to grant another AWS account access to your bucket, you specify the account’s canonical user ID in the bucket’s policy. For more information, see Bucket Policy Examples in the Amazon Simple Storage Service Developer Guide.

 

除此之外 ListBuckets 也會吐 DisplayName,這個值也能直接塞到 S3 Cross-Account 這邊使用。

 

Exit mobile version