第一天就該做對的事:帳號、Region、IAM

你的 AWS 帳號有幾個人在用?每個人都用 Root 登入嗎?Region 選對了嗎?如果這三題有一題答不出來,這篇你得認真看。

先講結論

AWS 入門的前三件事:鎖好 Root 帳戶選對 Region用 IAM 管人管權限。這三件事做不好,後面學再多服務都是在沙灘上蓋城堡。帳號被盜或權限失控造成的損失,比技術債貴十倍。


Root 帳戶:用完就鎖起來

登入 AWS 的第一步,你會用 Root 帳戶。這個帳戶擁有所有權限,就像 Linux 的 root 一樣——什麼都能做,也什麼都能搞砸。

我見過最慘的案例:某個團隊所有人共用 Root 帳號,結果有人不小心把 production 的 S3 bucket 砍了。因為大家都用同一個帳號,連是誰幹的都查不出來。

Root 帳戶拿到之後,做完這三件事就不要再碰它:

# 1. 開 MFA(Console 操作)
# IAM → Security credentials → Assign MFA device
 
# 2. 建立一個 IAM admin user 給自己用
aws iam create-user --user-name admin-terry
aws iam create-login-profile --user-name admin-terry \
  --password 'YourSecurePassword!' --password-reset-required
 
# 3. 把 admin user 加入 Admins group
aws iam create-group --group-name Admins
aws iam attach-group-policy --group-name Admins \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
aws iam add-user-to-group --user-name admin-terry --group-name Admins

從此以後,日常操作全用 IAM user,Root 只在帳務管理和緊急時使用。


Region 選擇:一開始選錯,後面搬家超痛苦

Region 就是 AWS 機房的地理位置。選擇原則很簡單:離你的使用者越近越好

你的使用者在哪建議 Region延遲
台灣/日本ap-northeast-1(東京)~30ms
東南亞ap-southeast-1(新加坡)~50ms
美國us-east-1(維吉尼亞)~150ms

我一開始沒注意 Region,在 us-east-1 開了一堆東西,後來才發現延遲高到不行。搬家超痛苦——EC2 snapshot 跨 Region 複製要等很久、RDS 要重建、Security Group 不能搬——別重蹈覆轍。

注意:不是所有 Region 都有所有服務,新服務通常先在 us-east-1 上線。如果你需要最新功能,可能得犧牲一點延遲。

# 查看所有可用 Region
aws ec2 describe-regions --output table
 
# 設定預設 Region
aws configure set region ap-northeast-1

IAM:不是選配,是必配

IAM 的核心觀念就一句話:給每個人剛好夠用的權限,不多不少。

User Group:批次管理權限

一個一個使用者去設權限?等團隊超過 5 個人你就會崩潰。用 Group 管理才是正解。

GroupPolicy誰該加進去
AdminsAdministratorAccess管理員(但也要三思)
DevelopersPowerUserAccess工程師
ReadOnlyReadOnlyAccessPM、監控人員
BillingBilling財務、老闆
DatabaseAdmins自定義 RDS/DynamoDB 權限DBA
# 建立 Group 並附加 Policy
aws iam create-group --group-name Developers
aws iam attach-group-policy --group-name Developers \
  --policy-arn arn:aws:iam::aws:policy/PowerUserAccess
 
# 建立使用者並加入 Group
aws iam create-user --user-name dev-alice
aws iam add-user-to-group --user-name dev-alice --group-name Developers
 
# 建立 Console 登入
aws iam create-login-profile --user-name dev-alice \
  --password 'TempPassword123!' --password-reset-required

自定義 Policy:精準控制

內建的 policy 太粗了?你可以自己寫 JSON policy,精確到「只能讀某個 S3 bucket」:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example-bucket"
    },
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-bucket/*"
    }
  ]
}
# 建立自定義 Policy
aws iam create-policy --policy-name S3ReadOnlyExampleBucket \
  --policy-document file://s3-readonly-policy.json
 
# 附加到 Group
aws iam attach-group-policy --group-name ReadOnly \
  --policy-arn arn:aws:iam::123456789012:policy/S3ReadOnlyExampleBucket

Permissions Boundary:防手滑的保險

Permissions Boundary 設定使用者「最多能有」的權限上限。就算你不小心附加了 AdministratorAccess,boundary 還是會擋住。

# 設定 Permissions Boundary
aws iam put-user-permissions-boundary --user-name dev-alice \
  --permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary

權限管理的四個鐵則

  1. 最小權限原則:只給完成工作需要的權限,不確定就先不給,需要再開
  2. MFA 一定要開:Root 帳號和所有有 Console 權限的 IAM user 都要
  3. 用 Tag 管理資源:幫每個資源打上 team, environment, project 標籤,帳單追蹤和權限管理都會輕鬆很多
  4. 定期檢查:每季看一次,離職的人帳號還在嗎?不用的權限還掛著嗎?
# 產生 Credential Report,看誰的密碼該換了、誰的 MFA 沒開
aws iam generate-credential-report
aws iam get-credential-report --output text --query Content | base64 -d

自架 vs AWS

面向自架(LDAP/Keycloak)AWS IAM
使用者管理自己維護 LDAP/ADAWS Console + CLI
SSO自建 Keycloak + OIDCAWS SSO (Identity Center)
權限模型RBAC 自己定義Managed Policy + Custom Policy
審計自建 audit logCloudTrail 自動記錄所有 API call
MFA自己整合 TOTP內建支援
維護成本高(要自己 patch、備份)零(AWS 託管)

如果你在 Infra 系列讀過 Identity & Access,IAM 就是那些概念的 AWS 版本——一樣是 RBAC,只是 AWS 幫你管好了底層。


K8s 映射

AWS IAMK8s 對應
IAM UserServiceAccount
IAM GroupClusterRole/Role
IAM PolicyRBAC Policy (Role + RoleBinding)
Permissions BoundaryNamespace 隔離 + ResourceQuota
CloudTrailAudit Log
AWS SSOOIDC Provider

詳細的 K8s RBAC 設定,看 K8s 配置管理。EKS 上的 IAM 整合(IRSA),會在 本系列第 08 篇 展開。


系列導覽

上一篇下一篇
AWS 系列目錄 NAT

權限管理不性感,但它是你和天價帳單之間唯一的防線。