Skip to main content

aws iam setting introduction

what is aws IAM

什麼是 IAM aws 官網的資訊一般都寫得滿棒的,本文出處主要是參考官網資訊做整理,因為管理上經驗只限於自己的環境用的 s3,CI 等等,所以打算趁這個機會檢視之前設定的 iAM 有沒有問題,當然,我相信這只是過程,隨著看過的資訊跟事情越多,會得到不同或者多個答案,總之,就先從這一步開始吧!

AWS Identity and Access Management (IAM) 用途:安全地控制對 Amazon Web Services (AWS) 和帳戶資源的存取。使用 IAM 為使用者和角色等身分提供您的帳戶中資源的存取權。

以下是 IAM 安全架構參考網路資源,主要組成如圖

malta_street png

typical composition

Policy -> IAM identities(IAM group or Role)

Policy

格式: 祈使+主詞(IAM identities)+條件+動詞(optional)+資源受詞 (對應:允許 Don 奧丁破關一百次時 吃 麥當勞)

對應 Aws Json(把上面舉例更換而已)

Effect : "允許"
Principal: "Don"
Condition:"奧丁破關一百次時"
Action: "吃"
Resource :"麥當勞"

正式版 Aws Json

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myresume-for-zaxx/*"
}
]
}
info

在 AWS IAM (Identity and Access Management) 的策略,effet, resource, action 是必須,condition 跟 principal 不是.

Principal 部分,分兩種:

  1. 身份策略:附加到 IAM 用戶、群組或角色上的策略。在這種情況下,主體(Principal)是隱式的,因為策略附加到特定的 IAM 實體上。因此,您不需要在策略語句中指定 Principal。也就是說,你不設定 Principal,當這個政策賦予在 user 上就直接得到該權限!

  2. 資源策略:直接附加到 AWS 資源(例如 Amazon S3 存儲桶或 AWS Lambda 函數)上的策略。在這種情況下,您需要在策略語句中指定主體(Principal),以確定允許或拒絕哪些 AWS 身份對資源執行操作。如以下政策是有限定哪個帳號是可以用 s3 資源!如果 Principal 不符合資源策略中指定的身份,則該用戶將無法根據該策略訪問或執行操作。

    {
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/my-user"
},
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
  1. Condition 沒有設定,意味著任何符合上述 Action 和 Resource 的操作都會被允許。如果要精細的控制資源存取,ex.限制存取某個特定的 IP 範圍,s3 的 prefix 帶啥才會過等等.

IAM identities

共有根使用者、IAM 使用者、IAM 使用者群組、IAM 角色、暫時性憑證

根使用者

Root 可以存取所有 aws 資源,且權限最高,aws 建議日常工作事項都用一般使用者,除非是以下工作:

  • 管理一般使用者權限
  • 停用 AWS 帳戶
  • 帳戶花費管理

更多資料可以看官網這篇

IAM 使用者

具備單一人員或應用程式的特定許可,AWS 建議人員金鑰長期憑證者要定期更換,而相比長期憑證更建議用暫時性憑證.

IAM 使用者群組

使用者集合的身份,透過 IAM 使用者群組管理 IAM 使用者

IAM 角色

它類似 IAM 使用者,但不與特定的人員相關聯。角色的目的是讓需要它的任何人可代入,理解上就像是個具有權限的有時效性 token,可以給 code 或使用者或資源使用。

暫時性憑證

最佳實務它類似 IAM 使用者,但不與特定的人員相關聯

何時使用 IAM Identity Center 使用者?

官方回覆

看起來是可以透過單一登入,去取得在所有帳戶中所授的權限

何時建立 IAM 使用者 (而不是角色)

建議您僅將 IAM 使用者用於聯合身分使用者不支援的使用案例。聯合身分使用者(federating exist user)是透過外部資源去連 AWS 上時,透過 IAM role 分配資源取得權限,配合跟 ldP(external identity provider)ex.FB,google 驗證,讓使用者可以取的短期憑證。

何時建立 IAM 角色 (而不是使用者)

程式端向 aws 資源請求、aws 服務間串接、以及公司的 single sign on(系統有採用 SAML 2.0 或建立並使用自訂代理伺服器,將使用者身分從企業轉換為提供暫時 AWS 安全憑證的 IAM 角色)

Brief summary

官方建議大多情況都會適用 IAM role,使用 IMA role 的優點是他是使用暫時性憑證(可設定到期時間),而 IAM 使用者用的都是長期的 aws_secret_access_key(因此官方會建議定時換,不過一般來說沒人那麼勤勞 ZZZ)。

官網提工暫時性憑證的優點

  1. 不必隨應用程式散發或內嵌長期 AWS 安全憑證:舉例來說,公司有個腳本拿來是拿來更新前端資源的,如果使用 IAM 使用者,那他的私 key 就會跟著這隻腳本到處跑,但用 role 的話不用。

  2. 可以提供 AWS 資源存取給使用者,而不必為其定義 AWS 身分。暫時憑證是角色和聯合身分的基礎。

  3. 暫時性安全憑證的存留期有限,因此當不再需要時,您不需要輪換它們或明確予以撤銷

不過每個公司都有各自文化。習慣之後再去看自己公司那套的優缺點~

aws iam setting guide

因為 root 權限強大,所以基本上會給予一些限制(設定建議).流程為以下:

  • 刪除 Root 存取金鑰
  • Root 啟用 MFA 驗證

在設定完 root 的基本安全設定後,接著就是要建立日常的 IAM 使用者.流程為以下:

  • 建立個別 IAM 使用者
  • 建立群組,並連結 Policies 設定以其使用者
  • 套用 IAM 密碼政策

刪除 Root 存取金鑰

因為 root 權限太高,不建議用 root 身份的金鑰(access key)在程式中存取 aws 資源,為避免意外,會執行 root 的 access key 刪除(一般預設不會產生,除非先前有操作產生 access key).

步驟:

click 右上角帳號欄->security credentials->下滑到 Access key 處->停用->刪除->done

啟用 MFA 驗證

預設下,root 登入都用 email 跟 password,因為這些東西都有可能不小心洩漏(習慣用同一組密碼),aws 透過 MFA 提升安全性,驗證方式這邊提供常用的虛擬 MFA 驗證(Authenticator app).

步驟:

先安裝 MFA 驗證 APP->click 右上角帳號欄->安全憑證 security credentials->啟用 MFA(assign MFA device)->Authenticator app -> show QR code 讓 app 掃描 or 填入 MFA codes ->done

建立個別 IAM 使用者

root 權限太高,建議日常操作都用符合相應權限的 IAM 使用者去處理.

步驟: IAM -> Access management->使用者(users)->create user-> click Provide user access to the AWS Management Console -> click i want to create an IAM user -> click Autogenerated password -> click Users must create a new password at next sign-in (recommended)

這邊是 demo 建立一個可以進入 aws console 的使用者,一般而言 aws 建議用 Identity Center 去管理使用者,不過小公司或個人使用就先 i want to create an IAM user 就好,優點是你想要建立能給程式用的 access key 可以直接建立.這邊操作為先建立使用者,之後再連結群組跟政策. ps.要建立 access key 請另外點到 Users 裡面的 security credentials 建立 Access keys.

建立群組,並連結 Policies 設定

這邊設定基本上就是建立群組,並連結自己建立的 policy(依據 EPCAR 原則) 或 aws 內建的 policy

步驟:

IAM -> Access management -> User groups

套用 IAM 密碼政策

基本上每間公司都會有自己的密碼政策,在 IAM 裡面當然也有!

步驟:

IAM ->Access management-> Account settings -> Password policy -> Edit ->Custom

tip

可以到 aws 裡面的 IAM 服務找關鍵字: Sign-in URL for IAM users in this account,複製他給的網址然後加到瀏覽器書籤內歐!這樣登入會較方便! 複製網址都會長類似這樣: https://878783396812.signin.aws.amazon.com/console