本篇文章更新時間:2019/10/20
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
網站開發如果需要使用到 AWS S3 儲存空間就會去申請服務(廢話),不過這服務存取會透過 AWS IAM 的權限管理服務來切入。
IAM 就是帳戶存取權限管理的一個服務,這服務管理的對象是整個 AWS ,意思是除了你登入後台的帳密來管理這些服務外,這邊還有一個管理子帳號概念的地方。
過去這服務還沒有很完整的時候其實操作起來滿複雜的,現在都幾乎視覺化介面引導,一步一步就能夠完成設定!
本主題針對我比較常用的 S3 來說明。
需求是希望可以切使用者權限到更細的服務資源上,讓非管理角色就不要有機會觀看到其他 Bucket 空間的資料。
IAM 這服務概念簡單,就是直覺為你每一個想要存取服務資源的使用者開一個使用者帳號,如果不是「真的使用者」,也可以選擇是透過「程式設計方式存取」的作法。
一般來說沒有真的要開管理後台介面的話都是選這個類型。
再來當然就是為這個使用者建立群組來附加權限管理,過程就不多說了。關鍵是那個「Policies」政策設定。
這邊有列出很多權限的「參考」設定,通常如果使用上稍為有點特別,這裡都不會用到。所以就是使用建立政策的方式來自己打造客製化的政策權限。
過程隨著可能改版而不同我也不多說明。圍繞著政策權限核心的設定檔案如下,是 JSON 格式:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutAccountPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"s3:ListJobs",
"s3:CreateJob",
"s3:HeadBucket"
],
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "IP.IP.IP.0/24"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::BUCKET_NAME",
"arn:aws:s3:::*/*",
"arn:aws:s3:*:*:job/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "IP.IP.IP.0/24"
}
}
}
]
}
IP 的部分就是限制了必須是由哪個 IP 段落才能存取,以及存取某個特定的 Bucket,上方 JSON 描述檔案的 IP 與 BUCKET_NAME 皆為變數,自行改成自己情境使用。
建立好以及設定對使用者權限等操作後就會得到 access_key
與 secret_key
這兩個資料,用來帶入程式中呼叫。
剩下就是想像力的競賽了!