IAM(Identity & Access Management)
IAM 是什麼? 有以下幾個重點:
IAM 是 AWS 核心的服務
用來控制一件事情 => 誰可以做什麼?
幾乎跟所有其他的 AWS service 都有深度的整合,作為其權限控管的機制
IAM 服務是屬於 global service,因此在 IAM 上建立的帳號,可以用在所有的 region 上
因此若是要善用 AWS 上的資源,IAM 是一個必須要熟悉的服務
IAM User
基本上 IAM User 會是一個使用者(or something),被設定可用來存取 AWS resource
第一個建立的 account 稱為
root user
,擁有最大的權限建立帳號時,帳號是不分大小寫的,因此像是
Bob
與bob
是相同的同樣的帳號只能在一個 root account 中出現,不能有重複帳號
在 AWS 中做任何事情都要有權限的,而權限來自於 policy,即使要變更自己的帳號,也是要有
IAMUserChangePassword
policy 權限的一個 root account 可以建立的 user 數量上限是 5,000 (無法更多,AWS 不會提供)
在不同 root account 之間如何識別同名的使用者
其中有一個比較重要的是,每一個 IAM User 要登入之前,需要知道三項資訊:
Username
Password
Account ID
因為 username 是可以隨意定的,不同的使用者可能會有相同的 username,而為了區分差別,此時就需要 Account ID
來識別了;而為了方便使用者登入,AWS 提供了 https://[ACCOUNT_ID].signin.aws.amazon.com/console
這樣的 url 並提供在管理網頁上(Security credentials 頁面中)
Credential
要使用 AWS resource 需要 credential,用來驗證來訪者的身份;而 AWS 不會管你是哪位使用者,只要擁有合法有權限的 credential 就可以存取 AWS resource,因此其實妥善保護自己的 credential 不要被盜取是相當重要的。
此外,由於要服務各種不同的 entity 來使用 AWS resource,credential 大致上可分為以下幾種:
Email address + Password
:這是是給 root account 用的Account ID(Number) + User Name + Password
:這個是給一般的 user 用的Access Key + Secret Key
:這是給透過 API 存取 AWS resource 的時候使用的
真實使用者的類型
現實世界中,有很多種不同的使用者類型,大致上可以分為以下七種:
- Root User
- Team Members
- Federated Users
- Application
- External Users
- Cross Account Users
- Customers
以上每一種類型的使用者在某些場景下,可能都會有存取 AWS resource 的需求。
Root User
基本上這就是最大權限的使用者了,會有以下幾種特性:
屬於該 account 的擁有者
每個 account 只能有一個 root user
有權限把整個 account 刪除
擁有所有的權限,而唯一可以限制 root user 的只有
AWS Organization
的機制Best practice => 不要使用 root user
Team Members
這是很常見的狀況,通常會在新創或小公司出現
需要存取 AWS resource 都用有各自的帳號,而這些帳號是透過 root account 開出來的
這類帳號的組合就是
Account ID + User Name + Password
Federated Users
適用在大型公司,擁有很多組織,並且可能有成百上千的使用者需要存取 AWS resource
由於一般大型公司都會有 AD 的存在,因此 IAM 也支援透過 AD 認證後,就可以進行 AWS resource 的存取,這樣的方式稱為 single sign on
Application
很多時候會有 Application 需要直接存取 AWS resource 的需求,此時使用的就不會是 EMail + Password
取而代之的是
Access Key + Secret Key
,因為 AWS API 僅支援使用這類資訊作為 credential
External Users
存取 AWS resource 的人可能並非來自於組織內部,可能是外部的顧問、供應商、合作夥伴之類的
這些使用者(or 程式)通常是透過我們無法驗證的其他 identity provider 所驗證過
Cross Account Users
這發生在其他 account 的 AWS user 想要存取你的 AWS resource 時,這就屬於 cross account user
兩個不同的 account 可能屬於同一家公司,也可能屬於不同公司
Customers
這通常就是使用服務的用戶,可能透過手機 or 網頁連接到在 AWS 上的服務
可能也會透過 Facebook 作為 identity provider 來作為認證身份機制,來登入運行在 AWS 上的服務
Access Key
Access Key 會與某個 IAM user 有關連
每個 IAM user 最多可以有兩組 Access Key
通常 Access Key 是用來作為操作 AWS CLI 或是開發程式呼叫 AWS API 時使用
要正確的使用 AWS CLI 的功能,就需要把 Access Key 放到
${HOME}/.aws/credentials
中,格式如下:
1 | [default] |
Access Key ID + Secret Access Key
的組合在 AWS 是獨一無二的,因此可以用來識別特定使用者之用,並確認其有沒有足夠的權限存取 AWS resource
IAM Group
其實 Group 概念就很清楚了,基本上就是將同性質的帳號可以群組起來,這樣對群組設定權限就會快多了,然而 IAM Group 有以下特性需要注意:
一個 root account 下最多只能設定 300 個 IAM Group;而每個 IAM User 最多只能加入 10 個 IAM Group 中 (這兩個限制無法請 AWS 提高)
IAM Group 只有一層,因此表示 Group 不能在 Group 內,只有 User 可以在 Grouip 內
IAM Group 沒有 credential