Architecting on AWS 筆記:Account Security
29 Apr 2022Root User 與 IAM User
帳號分兩種 root user 與 IAM user (圖 1)。
圖 1:root user 與 IAM user
Root User
- 綁帳號的 owner,權限最大。
- 可用 email 登入。
- 只用於兩件事:(1) 建立帳號和 (2) 關帳號,並不做管理用。
- 此為綁信用卡的帳號。
IAM User
- 透過 account id、user name 和 password 登入。
- 可被權限控管,來給予不同的資源的權限。
- 注意,由於安全性問題,建立一個 admin 的 IAM user 來當管理者,而非直接使用 root user。
點這裡看怎麼建立 IAM User。
Credential
credential 分為四種
- root user。
- IAM user。
- AK & SK: 用來設定 command line 的權限。先到 IAM user 建立一組 AK & SK,然後到 command line 登入,這樣 command line 就能透過 IAM user 來做事情。
- MFA: 多因素驗證,確保是本人登入。
Policy
IAM user 透過 policy 來決定擁有什麼樣的權限,意即能使用什麼服務、做什麼動作。
分為兩種
- identity-based policy 是指針對特定身份來對資源存取的限制。
- resource-based policy 是指設定給特定資源的 policy,來規範使用者可以怎麼使用它。
根據這兩種 policy 取交集即為結果;若權限衝突,以 Deny 優先,i.e., Deny > Allow。
如下範例,Policy 1 表示可擁有 EC2 全部的權限,意即 CRUD 皆可。
Policy 1
ec2: *
如下範例,Policy 2 為 read-only,不能 CUD,因此限制使用者對 EC2 API 能做的動作。
Policy 2
ec2: Describe*
Identity-based Policy
identity-based policy 是指針對特定身份來對資源存取的限制。
IAM User Group
IAM user group 是指將使用者加到特定 group 就能有特定群組的權限,以便管理或異動權限。
IAM Role
IAM role 是指
- 若使用者需要臨時的權限,意即賦予其額外且永久的權限 (可比較 IAM user group 是擁有永久的權限),就可以建立一個 IAM role (類似 戴上不同帽子或擁有臨時門禁卡的概念)。
- 一個 IAM user 可以擁有多個 IAM role,但一次只能用一個 IAM role。例如:平時做開發使用的帳號,藉由 switch role 來切換身份以作為測試帳號。
利用 IAM policy 用來設定權限
- 建立 IAM policy 來設定權限給 IAM user、IAM role 或 IAM group (備註:IAM group 無法使用 IAM role)。
- IAM policy 可針對 IAM user 或 IAM group 來設定權限,也可以將 policy 設定給 role,讓 IAM user 可以暫時擁有一些權限。
範例 1
如下例所示,利用 IAM policy 設定 IAM user 的存取權限,允許操作 dynamodb 和 s3 所有的權限 (full access)。
{
"Effect": "Allow",
"Action": [
"dynamodb: *",
"s3:*"
],
"Resource": [
"arn:aws:dynamodb:region:xxxxx-xxxxx-xxxxx:table/TABLE-XXXXX",
"arn:aws:bucket:s3:::BUCKET-XXXXX",
"arn:aws:bucket:s3:::BUCKET-YYYYY"
]
}
範例 2
如下例所示
- 在 dynamodb 和 s3 之中,除了這三個資源
arn:aws:dynamodb:region:xxxxx-xxxxx-xxxxx:table/TABLE-XXXXX
、arn:aws:bucket:s3:::BUCKET-XXXXX
、arn:aws:bucket:s3:::BUCKET-YYYYY
之外,都不允許存取。 - 若結合範例 1 (即:範例 1 + 範例 2 ),即可完美限制 IAM user 只能對這三個資源做存取。
{
"Effect": "Deny",
"Action": [
"dynamodb: *",
"s3:*"
],
"NotResource": [
"arn:aws:dynamodb:region:xxxxx-xxxxx-xxxxx:table/TABLE-XXXXX",
"arn:aws:bucket:s3:::BUCKET-XXXXX",
"arn:aws:bucket:s3:::BUCKET-YYYYY"
]
}
Resource-based Policy
resource-based policy 是指設定給特定資源的 policy,用來規範使用者可以怎麼使用它。
範例如下。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AAAAA-BBBBB-CCCCC",
"Effert": "Allow",
"Action": "s3:PutObject",
"Resource": ["arn: aws: s3::: mybucket/folder123/*"]
}]
}
Policy 語法
- Effect (required):設定 “Allow” 或 “Deny” 來決定是否允許存取。
- Principle:誰存取這個服務才會生效,resource-based policy 才需要設定此項目。
- Action (required):設定 allow / deny 的 action 列表。
- Resource (required):針對這些 action 會 apply 到哪些資源上。
- Condition:此 policy 生效的條件。
Assume Role
- assume role 是換 rule 的 API。
- assume role 的時間限制 15 分鐘。
- 不一定要放在 user,上也可以放在 EC2 等服務上。