001_IAM_01_Basics
## User& Groups
- Identity and Access Management,區(qū)域?yàn)?**Global**
- **Root account** 被默認(rèn)創(chuàng)建,但是一般情況下絕不應(yīng)該被使用和分享
- **Users** 是組織內(nèi)的人,可以被分組
- 組僅包含 **Users**,不能包含組
- **Users** 可以屬于多個組
* * *
* * *
## IAM:Permissions
- **Users or Groups** 可以為其分配**策略(policies)**,該策略為 **JSON** 文檔
- 這些策略定義了 **Users** 的 **權(quán)限(permissions)**
- 在 AWS 中應(yīng)遵循 **最小權(quán)限原則(least privilege principle)**:不要授予超過 Users 需求的權(quán)限
* * *
## IAM Policies Inheritance(IAM策略繼承)
如果:
- Developers Team Policy:Alice,Bob,Charles
- Audit Team Policy:Charles,David
- Inline Policy:Fred(未被分組也可以授予policy)
? ? 那么:
- Charles 同時擁有 Developers Team Policy 和 Audit Team Policy 兩個組的權(quán)限
* * *
## IAM Policies Structure
- Coinsists of
? ? - Version:策略語言版本,總是包括“2023-01-14”(xxxx-xx-xx)
? ? - ID:策略的標(biāo)識符,名稱(optional可選的)
? ? - Statement(聲明):一個或者多個 **個人聲明(Individual Statement)**(required規(guī)定的)
- Statements consists of
? ? - Sid:聲明的標(biāo)識符,名稱(optional可選的)
? ? - Effect:該聲明為允許或者拒絕(Allow,Deny)
? ? - Principal:規(guī)定此策略適用于何處(Account,Users,Role)
? ? - Action:此策略允許或拒絕的行動清單
? ? - Resource:上述行動清單應(yīng)用于何處的資源清單
? ? - Condition:此策略啟用期間的條件(optional可選的)
```json
{
? ? "Version": "2023-07-02",
? ? "Id": "S3-Account-Permissions",
? ? "Statement":[
? ? ? ? {
? ? ? ? ? ? "Sid": "1",
? ? ? ? ? ? "Effect": "Allow",
? ? ? ? ? ? "Principal": {
? ? ? ? ? ? ? ? "AWS": ["arn:aws:iam::123456789012:root"]
? ? ? ? ? ? },
? ? ? ? ? ? "Action": [
? ? ? ? ? ? ? ? "s3:GetObject",
? ? ? ? ? ? ? ? "s3:PutObject"
? ? ? ? ? ? ],
? ? ? ? ? ? "Resource": ["arn:aws:s3:::mybucket/*"]
? ? ? ? }
? ? ]
}
```
* * *
## IAM Password Policy
- **Strong passwords(強(qiáng)密碼)** = 對帳戶更高的安全性
- 在 AWS 中可以設(shè)置密碼策略:
? ? - 設(shè)置最小密碼長度限制
? ? - 規(guī)定特殊字符類型:
? ? ? ? - 包括大寫字母
? ? ? ? - 小寫字母
? ? ? ? - 數(shù)字
? ? ? ? - 非字母數(shù)字字符
? ? - 允許所有 IAM Users 去更改為他們自己的密碼
? ? - 規(guī)定 Users 每隔一段時間去變更一次密碼(Password Expiration密碼過期)
? ? - 防止密碼重復(fù)使用(禁止使用曾經(jīng)設(shè)定過的密碼)
* * *
## Multi Factor Authentication - MFA
- Users 可以訪問賬戶,并可能更改配置或刪除賬戶中的資源
- 因此為了保護(hù) Root 賬戶和 IAM Users,可以使用 **MFA設(shè)備(password + security device)**
- 最主要的作用:如果密碼被偷或者被黑,賬戶無法被盜用
- 設(shè)備類型:
? ? - 虛擬 MFA 設(shè)備:Google Authenticator(phone only),Authy(multi-device)
? ? - Universal 2nd Factor(U2F)安全密鑰(YubiKey by Yubico - 3rd party)
? ? - Hardware Key Fob MFA Device(Provided by Gemalto - 3rd party)
? ? - Hardware Key Fob MFA Device for AWS GovCloud(US)(Provided by SurePassID - 3rd party)
* * *
* * *
## Users access AWS
- 連接 AWS 有三種方式:
? ? - AWS Management Console:通過 AWS 管理控制臺登錄(受password + MFA保護(hù))
? ? - AWS Command Line Interface(CLI):通過 CLI 控制臺連接(受access keys保護(hù))
? ? - AWS Software Developer Kit(SDK):通過軟件開發(fā)kit登錄(受access keys保護(hù))
- Access Keys 通過 AWS Console 生成
- Users 管理他們自己的access keys
- Access Keys 是保密的,像密碼一樣,永遠(yuǎn)不應(yīng)該分享他們
? ? - Access Key ID ~= username
? ? - Secret Access Key ~= password
* * *
## AWS CLI
- 通過 CLI 工具可以與 AWS services 進(jìn)行交互
- 直接連接 AWS services 的 Public APIs
- 可以開發(fā)腳本來管理資源
- CLI是開源的
- 可以作為 AWS Management Console 的替代品
* * *
## AWS SDK
- 特定語言APIs(庫集)
- 可以通過編程的方式來管理和訪問 AWS Services
- 嵌入到應(yīng)用程序中
- Supports:
? ? - SDKs(JS,Python,PHP,.NET,Ruby,Java,Go,Node.js,C++)
? ? - Mobile SDKs(Android, IOS,...)
? ? - IOT Device SDKs(Embedded C,Arduino,...)
- Example:CLI是由Python構(gòu)建的
* * *
* * *
## AWS Roles
- 一些 AWS Service 需要代表管理者執(zhí)行操作
- 因此,可以通過給予目標(biāo) IAM Roles 來分配執(zhí)行AWS Service 的權(quán)限
- 常見 Roles:
? ? - EC2 實(shí)例 Roles
? ? - Lambda 函數(shù) Roles
? ? - CloudFormation 的 Roles
* * *
* * *
## IAM Security Tools
- **IAM Credentials Report**(account-level賬戶級別)
? ? - 可以列出賬戶的所有 User 以及他們的各種憑據(jù)的狀態(tài)
- **IAM Access Advisor**(user-level用戶級別)
? ? - Access advisor 可以展示用戶已被授予的權(quán)限和上次訪問這些權(quán)限的時間
? ? - 可以使用這些信息來修改策略(policies)
* * *
* * *
## IAM Guidelines & Best Practices
- 除了用于賬戶設(shè)置以外,**不要**使用 **Root** 賬戶
- One physical user = One AWS user
- 盡量將用戶分組(group),將權(quán)限分配給組(group)
- 創(chuàng)建**強(qiáng)密碼**策略
- 使用并強(qiáng)制使用**MFA**
- 創(chuàng)建和使用 **Roles** 來授予執(zhí)行 AWS Services 權(quán)限
- 使用 **Access Keys** 來進(jìn)行編程式訪問(CLI/SDK)
- 使用 **IAM Credentials Report** 來審計**賬戶權(quán)限**
- 永遠(yuǎn)**不要分享** IAM users 和 Access Keys
* * *
* * *
## IAM Section - Summary
- Users:映射到物理用戶,擁有 AWS Console 的密碼
- Groups:只包含 Users
- Policies:概述 Users 或 Groups 的權(quán)限的 JSON 文檔
- Roles:適用于 EC2 實(shí)例或者 AWS Services
- Security:MFA + Password Policy(密碼策略)
- Audit:IAM Credential Reports(account-level)& IAM Access Advisor(user-level)
* * *
* * *
* * *
Summarize From?Stéphane Maarek, AWS Documention