當我們使用AWS時,常常會需要用到AWS的API,例如我們如果要上傳檔案到S3的話,我們並不會透過AWS的網頁上傳檔案,而是透過程式呼叫S3的API,將檔案上傳到S3;但是讀者還有印象嗎?S3的系統是很封閉的,我們必須建立一個s3:PutObject的權限才行,但是此時的使用者要設定誰呢?設成*(萬用字元)的話,會變成誰都可以放檔案上來,這樣是不行的;此時,就會需要建立一個可以在我們AWS中翱翔的一個帳號,再把權限設在這個帳號裡;這整個概念,就是IAM。
另外,IAM有另一個用法是:建立一個子帳號,這個帳號可以透過網頁的方式,登入AWS主控台,進行各項操作;當然,因為這個子帳號而產生的費用,是掛在父帳號的信用卡下;這種作法比較適合公司使用,公司可以開一個子帳號給同仁去玩,而費用掛在公司名下,但如果你是私人使用的話,請酌酙此用法。
IAM與AWS的費用
IAM在AWS當中,是不收費的服務,所以讀者可以安心的建立任何帳號。
IAM的建立與使用
要建立IAM的資源,可以到下圖的位置:
進入後我們就可以看到IAM的操控界面:
可以看到有幾個東西,其中最重要的是Groups、Users、Roles,我來就來介紹一下這三個。
Groups與Users與Roles
User就是我們剛剛上方提過的,除了可以設定AWS上的權限外,也可以提供這個使用者登入到AWS的網頁主控台。
Groups與Users搭配在一起,其實還蠻好理解的,就是我們有一堆權限,不想一次又一次的設給單一使用者的話,可以把這些權限設給Group,此時再將使用者歸屬到該群組的話,權限的設定就完成了。
反而是Roles比較難理解,明明Group已經可以設定權限了,那麼Roles又在做什麼呢?Roles一樣是可以設定權限,不過Group裡面放的是User,Role裡面放的是AWS的資源,例如:EC2,下圖是EC2在設定Role的截圖:
但是設定EC2的Role可以做什麼呢?在AWS的官網中,Role的應用方式如下圖:
上圖是說,將EC2設定一個IAM role,而這個role的權限是可以存取S3的,所以會變成這台EC2可以直接存取S3;不過這個只是原理,實際上要寫在程式的話,還會需要一些步驟讓S3知道這道Request是由特定的EC2發過來的;所以AWS也提供了一些Sample Code讓開發人員實作。
而Role要套用到AWS資源(例如EC2)的狀況,是有條件的,它必須在一開始建立時就要設定IAM的Role,不能在AWS資料建立後再來調整設定;不過,當AWS資源套用Role之後,如果我們去修改Role的權限的話,會即時生效。
這整個就是IAM的核心--Groups、Users、Roles的分別。
建立使用者
瞭解了IAM的核心後,剩下的就是實作了,我們會在這個範例裡建立一個使用者,讓這個使用者可以去存 /取 /刪 S3的資源,所以我們首先切換到IAM中的User,來建立User:
進入Add user後,可以看到下圖:
上圖中的1:這個使用者可以呼叫AWS的API。
上圖中的2:這個使用者可以登入AWS的網頁主控台;如果有選擇這個的話,必須設定一組密碼給這個使用者。
進到下一步後,在這邊設定這個使用者的API權限;可以看到有三種方法:
-
設定到某Group。
-
複製其他User的權限。
-
手動設定權限。
因為我們的目的是讓這個使用者可以存取S3,所以我們勾選了一些S3的權限。
最後設定完成,AWS就會幫我們建立好一個使用者了。而這個使用者會有一組access key與secret key,這個部份是拿來用在我們的程式裡的。
如果Secret沒有馬上記下來的話,之後是查不到的,只能透過重新建立的方式來彌補。
註:IAM的User如果要登入AWS的話,網址與一般AWS使用者的登入網址是不一樣的,請注意;IAM的User登入網址可以到IAM的Dashboard中看到:
S3的Bucket policy與IAM
上述的步驟就完成了一個IAM的User,並且擁有S3的最大權限;不過或許會有人有疑問:
之前在S3節章裡介紹的權限,明明可以分到很細,但是在IAM裡建立的User,卻只有三種S3的權限可以選擇,怎麼會這樣呢?
沒錯,IAM這邊的確沒有辦法細分權限,所以如果我們想要控制到較細部的權限的話,只能回到S3,利用JSON的方式,來設定權限了;我們回過頭來重新看一下當初的設定範例:
大家還有印象這個功能Principal是在設定使用者的嗎?沒錯,我們IAM的使用者就是用在這樣的地方的,所以假設我們想要讓這個使用者可以存 /取 /刪 S3的資料,另一種方式是直接去設定S3的Bucket policy;不過在設定前,我們必須先找到使用者在IAM中的代表號:
從IAM中點入相關的使用者,就可以看到「User ARN」的文字,右邊的那一串就是這個使用者在AWS中的代表號;有了這一串之後,我們就可以設定S3的Bucket policy了,所以最後的結果會長成像:
這樣就可以設定更細部的權限了。
留言列表