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