Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-addons-for-gutenberg domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /opt/bitnami/wordpress/wp-includes/functions.php on line 6114
AWS – IAM 架構與用戶分派 - 八寶周的研究小屋

AWS – IAM 架構與用戶分派

權限管理一直以來是最重要的議題,攸關安全性與組織性。 那我們就來看看 IAM 到底如何組成以及如何分派權限吧!

0. 前言


權限管理一直以來是最重要的議題,攸關安全性與組織性。

那我們就來看看 IAM 到底如何組成以及如何分派權限吧!

1. 重點


IAM 可用來賦予用戶或資源執行權限
目前官方建議以 Identity Centre 取代 IAM 來建立與管理子帳戶

2. 內容


2.1. 關於 IAM

該服務用於安全管理 AWS 資源的訪問權限,控制用戶是否能訪問特定資源以確保安全和規範。

在普遍的 IAM 架構我們會有 Policy 去綁定多個 Permission,而我們可以配套給 Group(群組)與 User(個別),另外針對 AWS 服務則是配與 Role(角色)。那在下圖我就配上生活案例搭配解釋。

而在除了官方預設的 Policy 與 Role 都是可以另外建置的,而 Policy 的架構則主要由 Effect (效果), Actions(操作權限), Resource(資源) 組成,並另外能加上 Principal(對象), Condition(條件)。

在下方的範例則是表示 “針對所有 Principal 除了 Condition 中的帳戶之外一律拒絕其對指定 S3 Bucket 的任何操作” 。

Python
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "UsePrincipalArnInsteadOfNotPrincipalWithDeny",
      "Effect": "Deny",
      "Action": "s3:*",
      "Principal": "*",
      "Resource": [
        "arn:aws:s3:::BUCKETNAME/*",
        "arn:aws:s3:::BUCKETNAME"
      ],
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::444455556666:user/user-name"
        }
      }
    }
  ]
}

那在組織中我們肯定不可能給予每個員工管理員權限,而是給予相匹配的最小權限阻止其讀取與業務無關的資源,甚至盜竊組織重要資源。

我們就準備示範如何透過 IAM 建立子帳戶來操作 AWS 介面吧。

事前提醒

由於 AWS 官方目前建議採用 Identity Centre 來管控組織分帳戶,在下一篇章我們會進行介紹。

但現今仍不少公司業務為求快速簡便而慣用 IAM 服務,因此以下實作主要用於示範,建議各位實作後進行刪除,或者純看以下的過程即可。

2.2. IAM Group 的建立

我們首先進到的是群組的概念,卽在內部的用戶會自動繼承相關的權限。我們從 IAM 面板的左側選單找到 User Groups 並進入介面。

進到介面後我們壓下右上側的 Create group 按鈕開始進行建置。

那我們在範例中建立個群組並取作 aws_admin 代表該群組擁有 AWS 所有服務的管理員權限。那目前我們沒有建立任何 User 就先跳過中間的步驟,而權限的部分這邊從簡而選取 AdministratorAccess 套用最大的 Full Access ,完成過後就可以建立群組了。

建立完成過後我們應該能立即看到在頁面上顯示,就可以進到下一步了。

2.3. IAM User 的建立

事前提醒

由於我事先準備後續教材,截圖的版面可能與各位不同,關於 Identity Centre 的部份請忽略它。

那接著我們就要進到 Users 介面來準備建立 IAM 帳號。

直接點擊右上側的 Create user 按鈕進行用戶的建立。

由於在下一期我們會透過 Identity Centre 來取代建立 IAM 用戶的形式,我們就先隨便幫它取個名字為 tmp_admin 代表是暫時性的管理員帳戶。接著請勾選正下方的 access to … Console 才能讓用戶從官方的登入介面進到網頁介面之中。那這邊為了方便我先取消掉要重置密碼的設定。

進入下一步看下權限的設立方式,Copy 是從其他 User 複製權限我們就不多談了,這邊來體驗另兩種建立方式:Add to group 與 Attach policy。

我們先體驗 Attach policy 齁,阿其實就跟剛剛添加權限到 Group 相同的感覺,我們就不多加嘗試了。

接著我們回到預設的 Add to group,選擇我們剛才設定的 aws_admin 群組。那雖然說同處同個 Group 但實際上我們還能另外設置 boundary 限縮該 User 的權限,但我們就先跳過並進到下一步。

再來檢查一下設置並按下 Create user 建立新的 User 在 Group 之中。

建立完成後我們會生成三個資料,這邊直接下載 csv 資料進行保存齁。

那反正實作完我就會將該帳戶刪除,後續該 IAM 的 Account ID 就懶著遮了。但 Account ID 本身也能用於一些處理因此各位盡量不要洩漏,正如我在先前的截圖中都有遮住 root 的 Account ID 。

2.3.1. MFA 設置

建立完成後先別急著測試登入,這邊先帶各位看下怎麼去設定 IAM User 的 MFA 機制。首先點擊 User name 進入到管理介面之中。

這邊額外說明下,雖然我們是透過 Group 的方式來建立用戶,但在後續我們是可以在此頁面給此 User 新增額外的權限。那總之我們進到 Security 分頁來調整重要的安全設定。

在這邊我們也能夠取消該 User 網頁介面登入的許可,那這邊就先留意下這邊可以建立 MFA 就好。

2.3.2. 介面登入

接著我們複製 sign-in link 貼到瀏覽器後,登出 root 帳戶的 AWS Console 來嘗試當入該 IAM 帳號吧。那這個網址的用途就只是會自動填入 IAM 的 Account ID,也就是連結開頭的 12 位碼。接著輸入我們的用戶名稱 tmp_admin 並貼上在 csv 檔案中的用戶密碼。

成功進到我們的頁面,各位也能發現在右上角的用戶名稱為剛所設定的 User 名稱就代表完成了。

2.4. 清除練習資源

因為相對我們下次要講得方法簡便許多,針對小型案件與臨時權限不少的企業仍採用 IAM 進行配發,因此本篇還是稍微介紹下建立與登入 IAM 用戶的方式。

但現在 AWS 官方也本身不太推薦使用 IAM 開設子用戶,主要在於 IAM 的管理與授權很常需要變動,且其 Access / Secret Key 申請後不會自動更新,過往造成不少管理的糾紛案件。

又由於 AWS 本身沒有 Project 的概念,通常都是分出很幾個帳戶作為 Project 進行使用,這樣任何人員都需要好幾把金鑰去應對不同的公司帳戶。

後續我們將採用 Identity Centre 去結合 Single Sign-On 的優點來進行帳戶的分立,那我們接著重新登入我們的 root 帳戶,來把剛練習的資源都砍砍掉。

我們首先到 Users 介面勾選 tmp_admin 並點選 Delete 依照操作進行 User 的刪除。

接著再來到 User Groups 同樣勾選 aws_admin 並透過 Delete 依照操作進行刪除。

如此我們就移除乾淨本篇有異動並稍有安全風險的資源囉。

3. 後話


簡單的認識 IAM 其架構與建立子帳戶的方式,但當組織龐大的時候越來越難管理又還可能員工要領好幾把鑰匙。甚至是員工或顧客不想辦理 AWS 帳號。

那針對這個議題 AWS 後來就推出了 Identity Centre 並結合 SSO 進行快捷的單一登入,並方便組織進行分帳戶的組合管理。那我們下期就來看看又如何從組織分配帳戶呢?

4. 參考


[1] How IAM works? – AWS Doc
https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.