Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thebrecht/d2ab43f30586644f21fd551e40b1df72 to your computer and use it in GitHub Desktop.
Save thebrecht/d2ab43f30586644f21fd551e40b1df72 to your computer and use it in GitHub Desktop.
最近因為公司AWS帳號整併的緣故,需要將S3的檔案在不同的帳號、region之間轉換。
召喚Google大神後,找到了一篇 "How to Copy or Move Objects from one S3 bucket to another between AWS Accounts - Part 2",寫得相當仔細而詳盡了。
簡單地說一下重點:
目的地的帳號,需要在IAM有一個用戶,用來設定 User Policy,讓這個用戶能存取兩邊的權限
來源地的S3 bucket,需要設定 Bucket Policy ,讓目的地的帳號可以存取來源地的bucket
需要補充的是,這篇文章是在同個region上作示範,如果不同帳號在同個region,照做就可以收工,但是如果你的檔案恰好跟我一樣是在不同的region,就會出現像下面的的警告:
A client error (301) occurred when calling the HeadObject operation: Moved Permanently
解決的辦法,就是註明來源和目的region即可,用aws cli的語法像這樣:
aws s3 cp s3://source-bucket/ s3://destination-bucket/ --source-region us-east-1 --region ap-northeast-1 --recursive
附註
"How to Copy or Move Objects from one S3 bucket to another between AWS Accounts - Part 2" 這篇文章第一個User Policy有JSON語法錯誤,s3:DeleteObject 那行後面多了一個逗號,如果你跟著一步一步照做,這裡會出現問題。猜想應該是作者用完成版改出一個過程版出現的疏失吧。這是作者為了幫助理解的文章書寫策略,要工作的話,直接複製後面 Updated User Policy 就可以了,或者是用延伸閱讀列的 AWS Policy Generator,很棒的工具。
讀到上面文章標題,如果你跟我一樣好奇,大概會想找part 1來看,以防漏掉什麼重要的觀念。以過來人的立場,part 1 主要介紹要做到這件事有哪些工具可以用,以及他建議的作法,如果你也是用aws cli來工作,而且不想花錢或不想用GUI的軟體,基本上就可以跳過part 1,完全不會影響。
延伸閱讀
Bucket Policy Examples
Overview of IAM Policies
AWS Policy Generator (之前不知道有這東西,真是太佛心了,勾一勾就好了,也不用怕打錯語法或寫錯JSON格式)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment