今天我們要來介紹 AWS IAM 的架構概念,那我們開始吧!
IAM 裡面有個重要元件叫做 Policy,是用來規範某人使用 AWS 資源的權限,而在 Policy 之下有兩個類別,分別為 Identity-based policy 與 Resouce-based policy,如下圖:
每一個 Identity-based policy 中有多個 Statement ,這邊用 * 符號代表多個(圖#1),而每一個 Statement 只會歸屬於一個 Policy (圖#2),而 Statement 就是更細部去定義如何去使用特定的 AWS 服務,Statement 之中有三大要素:
在 IAM 中有一個叫 User 的東西,也就是常見的登錄帳號,每一個 Policy 可以被多個 User 使用,而每一個 User 也可以擁有多個 Policy (下圖中的 * 符號代表多個)。
除了 User 以外,IAM 還提供給我們 Group,每一個 Group 可以涵蓋多個 User,每一個 User 可以同時存在於多個 Group 中。
而 Group 與 Policy 之間的關係也一樣,一個 Policy 可以被多個 Group 使用,Group 也可以同時套用多個 Policy。如下圖:
除了 User 與 Group 之外,IAM 還提供給我們 Role 作使用,一個 Policy 可以同時給多個 Role 使用,一個 Role 也可以套用多個 Policy。
Role 主要目的,就是讓「不是登錄帳號」的其他東西(譬如說不是Group/User),來使用 AWS 的 Service (例如 EC2 Instance),透過這個方式就可以將 AWS Service 連接到 IAM 服務之中。舉例,當我創造一個 EC2 Instance 時同時創建一個 Role,讓他可以去連接到 S3 Bucket 的權限。如下圖:
與 Identity-based policy 相同,每一個 Resource-based policy 中有多個 Statement (下圖中的 * 符號代表多個),而每一個 Statement 只會歸屬於一個 Policy (圖中以數字 1 代表此關係)。不過 Statement 中的 Resource (下圖紅框)與上述介紹有不同的意義,這邊特別寫上 self 來表示。
通常在設定 Resource-based policy 時,通常是去各個服務的介面設定,譬如說在某個 S3 Bucket 的介面下,去設定 Resource-based policy,而 Resource (下圖紅框)就表示此 S3 Bucket 本身。
要決定套用給誰,必須使用 Statement 的 Principal 欄位(下圖粉色),若想使 User 能使用 AWS Service,就必須在 Principal 裡進行設定。如下圖:
Identity-based policy: 可以看到 User、Group 與 Role,他們是在 Policy level,一套用就是整個 Policy 底下的 Statement 一次套用(下圖#1)
Resource-based policy: 而 Principal 則不是,Principal 是在 Statement level,換言之,在每一個 Statement 都要做一次 Principal 的設定(下圖#2)
除此之外 Identity-based policy 有重複使用的概念,設定好一次就可以套用給 User/Group/Role (下圖#3)
Resource-based policy 在每一次撰寫時都要到 Service 底下去做設定,跨 Service 之間無法重複使用(下圖#4)
從不同角度看 Policy 的功用:
整理結果如下圖:
那以上是這次對 IAM 架構的介紹。
那麼明天,我們將接著看到「權限寶石:【Lab】IAM User 建立與使用(上)」!