~Staging ~
special iptables rule :
#!/bin/sh
/sbin/iptables -F
#newse
/sbin/iptables -A INPUT -p TCP -s IP --dport 22 -j ACCEPT #stage-se
/sbin/iptables -A INPUT -p TCP -s IP --dport 22 -j ACCEPT #stage-se
/sbin/iptables -A INPUT -p TCP -s IP --dport 22 -j ACCEPT #stage-se
/sbin/iptables -A INPUT -p TCP -s IP --dport 22 -j ACCEPT #stage-se
/sbin/iptables -A INPUT -p TCP -sIP --dport 22 -j ACCEPT #stage-vac02
/sbin/iptables -A INPUT -p TCP -s IP --dport 22 -j ACCEPT #stage-vac02
/sbin/iptables -I INPUT -p TCP -s any/0 --dport 25 -j ACCEPT #local mail services
/sbin/iptables -I OUTPUT -p TCP -s any/0 -d 127.0.0.1 --dport 25 -j ACCEPT #jblog mail
/sbin/iptables -I OUTPUT -p TCP -d IP --dport 25 -j ACCEPT #jblog mail
/sbin/iptables -I OUTPUT -p TCP -d IP--dport 25 -j ACCEPT #104 mail
/sbin/iptables -A INPUT -p TCP --dport 22 -j LOG --log-prefix "*Drop ssh*"
/sbin/iptables -A INPUT -p TCP --dport 22 -j DROP
#/sbin/iptables -A OUTPUT -p TCP --dport 25 -j LOG --log-prefix "*Drop smtp*"
/sbin/iptables -A OUTPUT -p TCP --dport 25 -j DROP
2017年5月18日 星期四
2017年3月30日 星期四
一堆英文單子 要背 ~ @@
http://g23988.blogspot.tw/2017/03/awsaws-certified-solutions-architect.html
resilient 彈性
tolerate 容忍
sufficient 足夠
remaining 剩餘
independent 獨立
separated 分離
distributing 分發
incident 事件 2
audit 審計
periodically 定期
individual 各自 2
significant 顯著
compliance 規範
appropriate 適當 3
establish 建立
redundant 冗餘
segregation 隔離
remain 留下
proactively 主動 2
sensitive 敏感 2
reliably 可靠 2
preventative 預防 2
violation 違規
measures 措施
applicable 適用
relevant 相關
explicitly 明確
mitigate 減輕
encourage 鼓勵
obtain 獲得
preventing 防止
tampering 竄改
restricted 限制
condition 條件
preserve 保留
aggregated 聚合
alternate 備用
suspended 中斷
elevated 高架
observe 觀察
relative 相對
retention 保留
penalty 懲罰
recently 最近
suitable 適合
retrieval 恢復,取回
transparently 顯而易見
symmetric 對稱
associates 聯繫
aspects 方面
conversely 反過來說
specify 指定
predictable 可預測的
provisioning 供應
spreads 傳播
consistent 一致
durability 耐久
flexibly 靈活
isolation 隔離
subsequently 接下來
further 進一步
typically 通常
simultaneously 同時
regardless 而不管
eliminate 消除
resume 恢復
disruption 中斷
reduce 減少
related 相關
seldom 很少
fraction 分數
conduct 進行
perform 執行
indicates 表示 2
categories 類別
optimized 優化
rapidly 迅速
extremely 非常
massively 大規模
determines 決定
execution 執行
intelligence 情報
retained 保留
slight 輕微
degradation 降解
accelerated 加速
suites 套件
ephemeral 短暫
rely 依靠
tasks 任務
fluctuates 波動
persistently 堅持
potential 潛力
concurrency 並發
coordination 協調
interact 交互作用
participate 參加
appears 出現
revokes 撤銷
recipient 接受
attempts 嘗試
reference 參考
preset 預設
resolution 解析度
particular 特別
entitlement 權力
utilizes 利用
standalone 獨立
proprietary 所有權
adapts 適應 2
vast 廣大
behalf 代表
external 外部
inadvertently 無意中
intended 意圖 2
situations 情況
sequence 序列
inspect 檢查
interpret 解釋
integrate 整合
producer 生產者
reflect 反映
preconditions 前置條件
certain 某些
assumes 假設,採取
embed 鑲入
rarely 稀少
summarizes 總結
entries 條目
dedicated 專用
tied 綁
centralized 集中
regular 定期
resides 居住
alternative 替代
approach 方法
declared 宣告
exposed 裸露
composed 組成
entirely 完全
thereby 從而
fleet 隊伍
represents 代表
forged 偽造
purpose 目的
permanently 永久
duplicate 重複
investment 投資
efficient 高效率
respective 各自
confidential 機密
amending 修正
divided 分為
acceleration 加速
propagate 傳播
fundamental 基本的
delivery 交付
composite 綜合
essentially 基本上
examines 檢查
distinct 不同的
suppose 假設
expectation 期望
2017年2月21日 星期二
104AWS 教育訓練
- 104 AWS 教育訓練 - 歐文克理夫
- 教育訓練目標
- Part2 - 2017/02/13-14
- 全球基礎設施
- 機房的分類:
- Availability Zones = 1 個以上的 IDC 以上,間隔100公里以上,因為有自有光纖所以很快。
- Regions = 2 個以上的 Availability zones 組成。
- Edge Locations = 全球68個,多數給 CDN 使用 (台灣有,但是出口太小,所以多數還是從香港出,僅有半夜從台灣。)
- 全部都是 API Service,寫程式搞定。
- Why to Cloud
- 提供什麼:
- Iaas: 提供虛擬主機,OS 以下不歸你管:如 EC2 ,廣播封包一律無法使用,如 DRBD。
- Paas: 提供服務: 如 MySQL
- SaaS: 全包,直接使用。 (還有很多沒有 Global release 的服務)
- 為何要從 IDC 上雲端:
- 利用率夠高:必須考量加機器的時間成本,在 IDC 只能有約 30% 的利用率,但雲端可以約有 90% 的利用率,在 5 分鐘搞定所有佈署工作。
- 能直接提供高效率的工作 (i.e. 運算效能),但在 IDC 無法提供這樣的規模以及時間利用。
- 能符合實際成長的期望值,降低成本浪費及超乎預期成長的風險。
- 自動化:
- AWS 提供既有的自動化工作 Auto-scaling, CI / CD, DR。
- RDS 提供 35 天內的資料狀態,利於測試可即時使用。
- 產品
- Computer
- EC2
- Container
- Elastic Beanstalk
- 整套 Total switch:EC2、ELB、VPC ... 直接 run 起來,僅計算 EC2 費用,開發只要 Push code。
- 難維護,無法知道如何 Debug and setting。
- Lambda
- serverless,提供function執行不需要開機器
- Storage
- S3
- All HTTP access ( if mount S3, use Get )
- object storage
- Glacier:磁帶
- Storage Gateway:Cont Gateway
- Database
- RDS
- 支援幾乎所有 SQL。(貴)
- DynamoDB
- SAS
- background save 3 part
- Network
- VPC
- like IDC datacenter
- Direct Connect
- 海外專線 to Commany ( Taiwan low )
- Route 53
- DNS
- CloudFront
- CDN
- Developer
- CodeCommit
- Git
- CodeBuild
- CI
- CodeDeploy
- CD to EC2
- CodePipeline
- to Data
- Management
- CloudFormation
- 用 json template (or yaml template) 架構整個 AWS service
- 設定起AWS服務的範本
- 可能會有少數服務因為太新或其他因素,無法在 CloudFormation實作,但大部份都支援
- CloudTrail
- 稽核所有 API 行為 to S3
- OpsWorks
- support Puppet, Chef
- Security
- IAM (Identity and Access Management)
- All AWS resources access manager
- Inspector
- 弱掃
- Certificate Manager
- free
- not output AWS
- Directory Service
- AD
- with connect (中斷重做)
- WAF
- 要自行寫 rule
- Analytics
- Kinesls
- 主要給 IoT,拿來收訊息。
- AI
- 直接應用 AI 服務。
- Mobile Services
- Device farm
- All device information for test
- Business Productivity
- WorkDocs
- VDI , support Windows 7, 10
- AWS elearning Labs
- Start
- IAM
- IAM user 即使 admin 也無法查看 Billing
- Create Group, Create User set Group
- Enable two-factor auth
- Login from "IAM users sign-in link"
- 建議 root and IAM user 不同的 two-factor auth,或多一個 IAM user給另一隻手機 2FA,以防手機GG時,就臨時都進不去了
- Security credentials
- 3 type
- Account / Password / MFA
- Access key ID / Secret access key
- AWS All resource default deny
- Use AccessKey + SecretKey access API resource
- 如果key沒有保存好被盜用,會被拿來開很多service,所以不能連同版控上到git上
- Key Pair
- Part2 - 2017/02/16-17
- 虛擬化的定義
全虛擬和半虛擬的差異- 全虛擬 (Full Virtualization)
- ex: Virtualbox
- 攔截Cpu指令、memory、I/O
- 效能有10~30%的耗損
- 半虛擬 (Para Virtualization)
- Hyper-V, XEN,KVM,VMware
- 效能有5~10%的耗損
- 最大的差異在IO
- AWS 底層虛擬化是 XEN
- Intel-VT, AMD-V
- AWS的硬碟IO寫入方式
- 如果EBS讀一個從來沒有寫過的block,會先寫入0,再讓你讀取
- 用意:完全避免讀取到別人的資料(類似dd的方式,先清除block)先dd寫一次整顆硬碟,之後使用效能較好) <--- 建議資料庫
- TCP/IP
OSI七層 (Open System Interconnection)- Physical Layer : Hub, 纜線
- Data Link Layer : MAC Address, switch ( 有MAC learning機制,可防止MAC查詢Flooding,現在已不保證MAC世界唯一)
- Network Layer : Internet Portocol (IP), Router
- Transport Layer : 資料傳輸, 流量管制及錯誤控制
- Session Layer : 網路連線的建立與中斷
- Presentation Layer 壓縮、加解密、格式轉換
- Application Layer : 應用層
TCP/IP- Network Access Layer : CSMA/CD , 對應 OSI 1 ~ 3
- Internet Layer : 對應OSI的Network Layer
- Transport Layer:對應OSI的Transport Layer
- Application Layer : 對應OSI的5~7
- ( TCP 使用錯誤重傳,確保順序及流量管控 )
- ( UDP ex: DNS )
DNS (Domin Name System)- Domain Name是給人看的
- Top Level是 IANA 管理,全球有13台root name server,彙整到 Whois 資料庫。
- DNS的階層架構:
- 正規的 DNS 網址為 www.104.com.tw.
- 瀏覽器幫我們把最後面的 . 自動補上。
- www.104.com.tw
- . > tw > com > 104 > www
- Record Type (在aws上常用的部分)
- A : Host Record
- CNAME:Alias
- 在 Route53 不收費
- SOA : 提供domain name的administrator, version, TTL等資訊
- NS:Name Server , 該網域的 Content DNS 位址。
- MX:Mail Exchange
Routing- IP Class:
- Class A:0.x.x.x~127.x.x.x
- Class B:128.x.x.x~191.x.x.x
- Class C:192.x.x.x~223.x.x.x
- Class D:224.x.x.x~239.x.x.x
- Class E:240.x.x.x~255.x.x.x
- CIDR : classless lnter-domain routing 把原來的class再細切割
- IP速算法:請洽 歐文(CCNA Certified)
- subnet mask: 26
- network 以 class B
- 26-16=10
- 2^10=1024
- ip numbers
- 32-26=6
- 2^6=64
- subnet mask 26
- network 以 class C
- 26-24
- 2^2
- ip numbers
- 32-26
- 2^6
- subnet mask 參考資源:
- Private Subnet : RFC1918
- 10.0.0.0/8
- 172.16.0.0/12 ~ 172.31.0.0/12
- 192.168.0.0/24 ~ 192.168.255.0/24
Gateway- 網關/閘道器,連接兩個不同的網段。
- Default Gateway:從路由表查詢沒有比對到網段,就往 Default Gateway (0.0.0.0/0) 送
Routing table- 條列式的對應方式,註明要去的目的端,要走哪個網關,如果都沒有,就會往預設的gateway送,但不保證一定送得到(如果gateway也沒有那筆路由或是被firewall擋掉)
Firewall- Networking Firewall
- 在網路邊界的 Firewall
- Host-base Firewall
- 在 Device 的 Firewall , 如 iptables。
- First Generation : packet filters,進出的方向都需要自行維護rule(aws的對應服務:nACL)
- Second Generation : stateful filter (AWS Security Group : Host-based ),只要開單向,返回的 packet 會自動 allow。
- Third Generation
- Application Firewall:應用層防火牆(WAF)
- AWS WAF:規則必須自己寫。
NAT- 簡單來說就是「換 IP」(Private IP -> Public IP)
- 是一種在 IP 封包通過路由器或防火牆時重寫來源 IP 位址或目的 IP 地址的技術。
- 僅有 NAT 並不能直接上網,必須依靠 Routing 路由到 Internet。
- LAB Part1 - EC2 and VPC
- 目標:
- 起一台 EC2 連上 SSH。
- 實作:
- region 選擇 oregon (奧勒岡),因為最便宜。
- 選不到大陸地區。
- 選在美國地區的所有權都為美國資產 (愛國條款)
- 登入 AWS console 點選「VPC」 之後,不要直接用「Start VPC Wizard」
- 有一個預設 VPC 172.31.0.0/16 千萬不能砍,會有許多服務無法使用。而且砍了救不回來
- 例如: 把 default vpc 刪了,那要 packer時就需指定vpc ,設定上變麻煩。
- 選擇「Create VPC」,每個 VPC 是虛擬獨立的。
- Name tag 命名規則。
- Tenancy 請不要選擇 Dedicated,所有的設備都會變成專用,費用會非常昂貴。
- 會因為法規無法使用虛擬機 or 共用機器所以才會使用 Dedicated。
- 建立 VPC 不會收費。
- 選擇「Create subnet」,
- subnet 不能跨 AZ,只能選一個 AZ,每個人看到的 AZ Mapping 有可能對應到不一樣的
- CIDR 無法切比 VPC 還要大的。
- 選擇「internet Gateways」> 「Create internet Gateways」>「Attact to VPC」
- 選擇「Route table」> 「Create Route table」> 「Routes」「Edit」= 0.0.0.0/0 , target 是目標 VPC
- 把 Subnet 和 Route table 關聯起來,選擇「Subnets」> 「Route Tables」>「Edit」>「change to ... VPC」。
- 完成 VPC 網路環境。
- 建立 EC2
- Resource 選擇「EC2」> 「Instances」>「Launch Instances」
- 選擇 AMI 版本:Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
- 使用免費的 t2.micro
- Number of instances = 1
- Network = 目標 VPC
- Auto-assign Public IP = Enable
- 是動態的 IP,會更換。
- 使用 EIP 綁定固定 IP 在 EC2,需要收費,即使在 STOP 的狀態也會收費,約 $1000。
- 在 Cloud 上面 IP 無法作為任何判斷依據。
- Storage
- Magnetic 官網僅有說是使用 SAS。
- Delete on Termination 為刪除 EC2 時是否刪除 Volume 的依據。
- Tags
- 命名機器
- Security Group
- 命名要能一看就知道用途。
- 每張網卡最多可以attach 5個,更多需連絡AWS Support,一個 VPC最多500個 Security Group, 要更多一樣連絡 AWS Support (參考資料: aws docs )
- 一個 Security Group 可以給無限多個網卡 Attach
- Create Key
- 建立 ssh key,並 Download Key,若遺失將無法再登入。
- 正確規範在 Production 不打 Key,不允許 SSH,僅作為運算工具。
- Key Pair 不能跨 region
- 選擇 Launch
- 約等待 2~3 分鐘建立,狀態為「running」。
- 下載下來的 ssh key 權限請修改為 400,否則會出現「Permissions 0644 for 'keyname.pem' are too open」
- chmod 400 keyname.pem
- 登入 EC2
- ssh -i keyname.pem ubuntu@PublicIP
- Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-59-generic x86_64)
- ...
- ...
- ubuntu@ip-10-128-78-48:~$
- 更安全的方式為產生自己的 ssh key,用自己的 user login。
- Clean up
- 移除 EC2
- 勾選 EC2 >「Actions」>「Instance State」>「Terminate」
- 移除 VPC
- 勾選 VPC >「Actions」>「Delete VPC」
- Part3 - 2017/02/23-24
- LAB Part2 - EC2 and VPC (Private/Public Network)
- 建一次 #LAB Part1 - EC2 and VPC
- VPC CIDRs = 10.128.0.0/16
- Create Subnet
- Public Subnet
- IPv4 CIDR block = 10.128.1.0/24
- Private Subnet
- IPv4 CIDR block = 10.128.2.0/24
- Create Internet Gateway (IGW) - 讓 VPC 具有連網的能力
- 選定建好的 VPC
- 一個 IGW 只能選定一個 VPC
- Create NAT Gateway
- 選定 Public Subnet,並且產生 EIP
- 建立後必須 refresh 後才會出現,否則不會出現 NAT Gateway
- NAT Instance 與 NAT GateWay 差異
- NAT Instance 會啟一台 EC2,裡面所有的功能要使用者自行管理設定
- NAT GateWay 屬於一個 SaaS 服務,由 AWS 協助管理,費用較 NAT Instance 高
- 如果使用量較高,用 NAT GateWay 長期來說會比較便宜
- Create Route Tables
- Public Route table 指定建好的 VPC
- Edit Routes
- Add another route
- 0.0.0.0/0
- Private Route table 指定建好的 VPC
- Edit Routes
- Add another route
- 0.0.0.0/0
- 到 Subnet,修改 Public/Private 的 Subnet Route table
- Public subnet Change to Public Route table
- Private subnet Change to Private Route table
- 建立第一台 EC2 (Public)
- VPC 選擇上述已建立的 VPC
- Subnet 選擇 Public
- 給他一個 tags (i.e. user-test-bastion)
- Securty Group
- 開啟 ssh port 22
- Launch
- 用 EIP SSH 到 EC2
- 點選 Security Groups,複製 Public ssh 的 ID
- 複製用來建新的 Private Security Group
- Security Groups Role 的來源是可以另一張 Security Groups,用 ID 為的是保留彈性不鎖死 IP
- 建立第二台 (Private)
- 同第一台 EC2
- 因為是 Private 所以不需要 assign public ip
- 勾選 Protect against accidental termination,和 第一台 EC2 比較差異
- 選擇 Private security groups
- Launch
- 在自己的 PC 上用 scp 將 Private key 丟上第一台 (Public) EC2 ( 要測試用 Public ec2 連上 Private ec2 )
- 從 Public ec2 ssh 到 Private ec2
- 測試 sudo apt-get update,可以通代表網路已通。
- 移除資源
- 一定是從運算資源開始移除
- Terminate EC2 > Delete NAT Gateway > Delete VPC
- 在移除 EC2 時有勾選 Protect against accidental termination 的時候會有保護機制,所以必須解除 Protect 後才能移除,避免誤刪。
- 必須先刪除 NAT Gateway 才能在刪除 VPC
- 刪除 NAT Gateway 必須在手動刪除 EIP,否則會收費。
- 如果 EIP 中的 Instance 和 Network Interface ID 都是空的,代表沒有在使用,可以刪除。
- Part4 - 2017/03/02-03
Security (Key & Role)- IAM
- 控管 AWS Resource 的服務
- 透過 Policy來限制 Entity 存取 AWS 的 Resource
- Entity 可以是 User、Group、Role
- IAM Policy
- Json 格式,可以被套用到 IAM Entity
- IAM Entity 最多只可以 Attach 10 個 Policy
- 只要其中包含某個 resource 的 Deny,就會 Deny (預設 Deny Policy 優先)
- Deny 的優先順序 ( IAM Policy order)
- Explicit Deny
- Explicit Allow
- Default Deny
Create Policy Policy Actions- IAM > Policies > AdministratorAccess
Filter: Policy Type- Showing 252 results
Policy Name Attached Entities Creation Time Edited Time AdministratorAccess 1 2015-02-07 02:39 UTC+0800 2015-02-07 02:39 UTC+0800 AmazonAPIGatewayAdministrator 0 2015-07-10 01:34 UTC+0800 2015-07-10 01:34 UTC+0800 AmazonAPIGatewayInvokeFullAccess 0 2015-07-10 01:36 UTC+0800 2015-07-10 01:36 UTC+0800 AmazonAPIGatewayPushToCloudWatchLogs 0 2015-11-12 07:41 UTC+0800 2015-11-12 07:41 UTC+0800 AmazonAppStreamFullAccess 0 2015-02-07 02:40 UTC+0800 2015-02-07 02:40 UTC+0800 AmazonAppStreamReadOnlyAccess 0 2015-02-07 02:40 UTC+0800 2016-12-08 05:00 UTC+0800 AmazonAppStreamServiceAccess 0 2016-11-19 12:17 UTC+0800 2016-11-19 12:17 UTC+0800 AmazonAthenaFullAccess 0 2016-12-01 00:46 UTC+0800 2016-12-01 00:46 UTC+0800 AmazonCloudDirectoryFullAccess 0 2017-02-25 08:41 UTC+0800 2017-02-25 08:41 UTC+0800 AmazonCloudDirectoryReadOnlyAccess 0 2017-03-01 07:42 UTC+0800 2017-03-01 07:42 UTC+0800 AmazonCognitoDeveloperAuthenticatedIdentities 0 2015-03-25 01:22 UTC+0800 2015-03-25 01:22 UTC+0800 AmazonCognitoPowerUser 0 2015-03-25 01:14 UTC+0800 2016-06-03 00:57 UTC+0800 AmazonCognitoReadOnly 0 2015-03-25 01:06 UTC+0800 2016-06-03 01:30 UTC+0800 AmazonDMSCloudWatchLogsRole 0 2016-01-08 07:44 UTC+0800 2016-01-08 07:44 UTC+0800 AmazonDMSRedshiftS3Role 0 2016-04-21 01:05 UTC+0800 2016-04-21 01:05 UTC+0800 AmazonDMSVPCManagementRole 0 2015-11-19 00:33 UTC+0800 2016-05-24 00:29 UTC+0800 AmazonDRSVPCManagement 0 2015-09-02 08:09 UTC+0800 2015-09-02 08:09 UTC+0800 AmazonDynamoDBFullAccess 0 2015-02-07 02:40 UTC+0800 2015-11-12 10:17 UTC+0800 AmazonDynamoDBFullAccesswithDataPipeline 0 2015-02-07 02:40 UTC+0800 2015-11-12 10:17 UTC+0800 AmazonDynamoDBReadOnlyAccess 0 2015-02-07 02:40 UTC+0800 2017-02-28 01:59 UTC+0800 AmazonEC2ContainerRegistryFullAccess 0 2015-12-22 01:06 UTC+0800 2015-12-22 01:06 UTC+0800 AmazonEC2ContainerRegistryPowerUser 0 2015-12-22 01:05 UTC+0800 2016-10-12 06:28 UTC+0800 AmazonEC2ContainerRegistryReadOnly 0 2015-12-22 01:04 UTC+0800 2016-10-12 06:08 UTC+0800 AmazonEC2ContainerServiceAutoscaleRole 0 2016-05-13 07:25 UTC+0800 2016-05-13 07:25 UTC+0800 AmazonEC2ContainerServiceforEC2Role 0 2015-03-20 02:45 UTC+0800 2016-05-05 02:56 UTC+0800 IAM User and Group- 新建的 AWS User 不具有任何權限
- 使用群組的方式來 Attach Policy
- User 預設可以加入 10 個 Group
- ex:User同時在2個Group 則可被20個policy管理 (2 * 10)
Account Settings- 設定密碼原則 (IAM > console > Account setting)
- 長度,組成,期限,及重複使用限制
Lab 練習- 讓本機可以存取 S3 資源,需設定 IAM Role
- 建一個帳號,給予 IAM Role,讓其可以存取資源,使用 AWS CLI 操作時需要使用 Access key 及Secret Key (Static credential)
- service -> IAM Users -> Add user -> 給予role(選S3FullAccess)->需把access key跟secret記錄下來要給aws cli 存取時使用
將key填入搜尋aws region table找出region name,因為S3 bucket建立在Oregon,所以查表找到us-west-2- region name 查詢
- 建立aws configure之後,會在使用者根目錄產生一個.aws目錄(~/.aws),裡面會有aws設定與static credentials(security key)
- 就可列出S3 bucket
- 把key inactive後
- 賦予S3完全存取權限之後(AmazonS3FullAccess),可以將本地端檔案上傳到S3
IAM Role- 用來讓某個AWS Resource可以存取其他的AWS Resource而不需要建立帳號或是Credential
- 一般是套用給EC2,使其中的Application不需要存放Credential檔案,即可獲得存取AWS Resource的權限
- Role是給EC2用的,Key是給非EC2用的
EC2 vs Other- EC2透過Attach IAM Role來取得AWS Resource的權限
- 非EC2透過IAM User Access Key來取得AWS Resource的權限
Create Role: (用role也可以做到存取資源的做法,就不需要使用key)建立EC2時需選取Role,接到EC2後就可直接看到資源- 本機只能用key,EC2才能用Role
IAM Best Practices- 移除root account的key,只透過console做billing的作業
- 建立帳號要能mapping到特定的人,遵循最小權限原則
- 要求複雜的密碼格式並啟用MFA
- Staitc Creadentail應該要定期更換
- 使用cloudTrail來稽核AWS account的活動紀錄 (記錄所有API的活動紀錄,for Audit使用)
Security Group- Host Layer Firewall (只能設allow,不能設deny,真的要阻擋只能用iptables或Network ACL)
- Stateful的防火牆,只需設定inbound或是outbound的其中一個方向
- 只能設定allow的Rule,不能設定Deny且無優先順序
- 一筆Security group可以attach給無限多的EC2
- 一張ENI(網卡)只能套5個security groups
Introduction ACL- Subnet Layer Firewall
- Stateless Firewall,inbound和outbound需要個別設定
- 規則是透過編號順序來決定優先權,編號越低越優先
- 碰到符合的規則就會停止
- subnet只能也一定會associate一個ACL
清場順序EC2 > S3 > Role > User- Part4 - 2017/03/09-10
- Note
- 這個 LAB 會花到費用 (NAT Gateway)
- VPC 是邏輯隔離,彼此獨立的實體機房
- 會用到 4 個 Subnets。
- Subnets 不能跨 AZ(機房)。
- 實作
- 建立 VPC
- CIDR:10.128.0.0/16
- 建立四個 Subnet
- Public-2a
- SELECT VPC
- AZ:us-west-2a
- CIDR:10.128.11.0/24
- Public-2b
- SELECT VPC
- AZ:us-west-2b
- CIDR:10.128.21.0/24
- Private-2a
- SELECT VPC
- us-west-2a
- CIDR:10.128.12.0/24
- Private-2b
- SELECT VPC
- us-west-2b
- CIDR:10.128.22.0/24
- 建立三個 Gateway
- Internet Gateway (igw)
- Attach VPC
- 每個 Internet Gateway 只能 attach 一個 VPC
- NAT Gateway
- 選擇 subnets:Public-2a
- 產生 EIP
- 選擇 subnets:Public-2b
- 產生 EIP
- 寫三張 Route Tabls
- Public
- Routes edit
- Add 0.0.0.0/0 , Target:igw
- Private-2a
- Routes edit
- Add Target:0.0.0.0/0, Target:subnet Public-2a
- Private-2b
- Routes edit
- Add Target:0.0.0.0/0, Target:subnet Public-2b
- 通常不會改 Main Routing table,僅有 Local route 就好,這是為了安全機制。
- Associations Subnet
- Route tables Public 選擇 Subnet Associations
- 把 Public Subnet 2個都勾選 Save
- Route tables Private-2a 選擇 Subnet Associations
- 勾選 Private-2a,Save
- Route tables Private-2b 選擇 Subnet Associations
- 勾選 Private-2b,Save
- 網路環境建立完成。
- EC2
- 建立四張 Security Groups
- ssh
- 22 port
- Public
- Private ( source 用 Public ID 建立)
- web-lb
- 80 , 443 port
- source 0.0.0.0/0
- web-wb
- 80 , 443 port
- sources 用 web-lb 的 security groups id 建立
- 建立 EC2 Instance
- bastion
- Type = Amazon Linux
- Subnet 選擇 Public , 2a or 2b
- 開啟 Public IP
- Security Groups 選擇 Public security groups, 22 port
- $ ssh -i key ec2-user@PublicIP
- $ sudo yum update
- 若是無法登入
- 先確認 Subnet ID,查看是否對應到的是 Public subnet
- 確認 Route tables 是否有走 igw
- Security Groups 是否開啟 22 port 及 client source IP 是否正確。
- 把 key 丟上 bastion ~
- $ scp -i key key ec2-user@PublicIP:~
- web
- Type = Amazon Linux
- Subnet 選擇 Private-2a
- Disable Public IP
- Advanced Details 內 User data,可以跑 script
- 選擇 As text
- #!/bin/sh
- yum -y update
- yum -y install httpd php
- service httpd start
- chkconfig httpd on
- Security Groups
- 選擇 "ssh-private" and "web-lb"
- 從 bastion 用 key 登入 web
- ssh -i key ec2-user@PrivateIP
- ELB or ALB(CBR) 都是跑 EC2
- LB 必須將腳插進 Public subnet
- 如果你再 Public subnet 的網段切的太少,當 LB 流量過大,LB 會起動很多 EC2 來撐起流量,若 IP 不足,將會無法再增加流量。
- 建立 LB
- Class LB
- 選擇 VPC
- Create an internal load balancer 用於不讓外部連上使用,僅能做 internal 使用,只有 Private IP
- 把 Public subnet 都加入,會在你的 Public subnet 都起一台 EC2。
- Security Groups 選擇 web-lb。
- Health Check
- Ping Protocal = HTTP
- Ping Port = 80
- Ping Path 選擇 /
- 只要不是 200 都視為錯誤
- Advanced Details
- Response Timeout = 5
- Interval = 10
- Unhealthy threshold = 3
- Healthy threshold = 3
- 選擇要 LB 的 EC2 (web)
- Tags
- Key = Name
- Value = user-test
- 在 web 內加入 info.php 用來給 LB Health check
- $ cd /var/www/html
- $ sudo vi info.php
- <?php
- phpinfo()
- ?>
- 在 LB Health check
- Ping Path 改為 /info.php
- 在 Instances 的 status 會是 InService。
- 在 web 建立 stress.php 來測試 LB
- $ cd /var/www/html
- $ sudo vi stress.php
- <?php
- for($i = 0; $i < 1000000000; $i++) {
- $a += $i;
- }
- 建立 ami image
- 選擇 EC2 > Actions > image > Create image
- 建立 ami image 原有的 ec2 會重新開機。
- AMI 有分 Region,若要提供給其他 Region 使用,可以用 Copy to Region
- 建立 Instance
- 選擇 My AMIs 建立好的 ami
- Subnet 選擇 Private-2b
- Disable Public IP
- Security Groups 選擇 ssh , web-wb
- 到 LB 的 Instance 加入新的 Private-2b,並且確認 status 為 InService
- 連上 LB 的 DNS name 重新整理,System IP 應該會在兩台 web 輪流更換
- Launch Configurations 負責設定
- Create Launch Configurations
- 選擇已打好的 My AMIs
- 不需要對外 IP,選擇 Do not assign a public IP address to any instances.
- Security Groups 選擇 ssh , web-wb
- Launch Configurations 不能更改,但 Auto Scaling Groups 可以更換 Launch Configuration
- Auto Scaling Groups 負責控制增減的條件
- Start 1 instances
- 選擇 VPC
- 選擇兩個 Private 2a and 2b
- 要自動加入 LB,選擇 Load Balancing
- Classic Load Balancers 選擇你的 LB
- Health Check Type
- EC2 僅檢查虛擬機是否正常、實體機是否正常
- ELB 依照 ELB Health Check 去檢查
- 除非非常有把握,否則先選擇 EC2,不然 ELB 確認失敗會一直 loop 砍掉重建 EC2,不滿 1 hour 以 1 hour 收費。
- 先不設定 Keep this group at its initial size
- 可以加入 notification email。
- 加入 Tags: Key=Name, Value=user-web
- 確認 Instance 會自動建立 EC2
- 確認 LB Instance 會新增 EC2 並且 Status 為 InService
- 從 LB Domain 確認 info.php 顯示正常。
- 設定 Auto Scaling Groups
- Desired = 2,平均值為 2 台
- Min = 1,請勿設定為 0,若出現問題將會把所有 EC2 都砍掉。
- Max =5,最大 5 台
- 因為 Desired 設定 2 台,故 Instance EC2 會在增加為 2 台
- 清場
- Auto Scaling Groups
- Desired = 0
- Min = 0
- EC2
- bastion stop
- release EIP
- VPC
- Delete two NAT Gateway
- Part5 - 2017/03/16-17
- 還原 Part4 現場
- 重建 NAT Gateway
- 到 Route Table 把兩個 Private subnet 分別 mapping 到兩個 Public NAT Gateway
- 2a 對 2a
- 2b 對 2b
- 改 Route 的設定,把原來的 black hole mapping 到剛剛重建好的 NAT Gateway
- 重新 reload Security Groups 自己的 IP (如果 IP 有更換)
- 將 Auto Scaling Group 的 Desired 和 Min 設定成 1 (自動啟動 1 台 WEB by ami)
- 如果你的 ami 已經不存在,會無法 Auto Scaling
- 點選 Launch Configuration,點選 copy Launch Configuration,選擇老師提供的 "shared with me " ami 建立。
- 如果遇到 Security Groups 是空的,請重新選擇 "Private ssh" and "Web"。
- 在 Auto Scaling 把重建的 Launch Configuration 指回來,正常應該是 ${name}-copy
- 從 Load Balancer 的 Instances 查看狀態應該是 InService,並且從 ELB 的 Domain 查看 http://${domain}/info.php
- Auto Scaling (asg)
- Scheduled Actions:主動 Scaling,指定時段啟動機器
- Sacling Policies:定義條件做事
- Scale-out
- Add policy
- Name = scale-out
- Execute policy when
- Create new alert
- Whenever Maximum of CPU
- Is >= 70 %
- Take the action
- Add 67% when 70%
- Add least 1 instance
- Instances need 60 sec to warm
- Scale-in
- Add policy
- Name = scale-in
- Execute policy when
- Create new alert
- Whenever Maximum of CPU
- Is <= 30%
- Take the action
- remove 1 when 30%
- 準備攻擊 ELB
- 啟動 Bastion and Login
- 複製 ELB Domain A record
- 使用迴圈 stress ELB
- $ while ture; do curl http://scott-test-lb-466854070.us-west-2.elb.amazonaws.com/stress.php ; done
- 在 CloudWatch 查看出現 ALARM
- Metrics
- 每一個 Manager 都可以設定 alert
- 所有的服務都會在這
- 符合條件後 EC2 Instance 就會增長
- 確認增長成功後,可以取消攻擊指令,確認 EC2 會減少至 1 台。
- 使用 Packer 打包 AMI
- ssh 登入 bastion
- 用 wget 下載 packer (可先從 https://www.packer.io/downloads.html 複製下載連結)
- 解壓縮
- $ unzip packer_0.12.3_linux_amd64.zip
- 可先用 ./packer 看 help 說明
- $ ./packer
- 參考 https://www.packer.io/docs/builders/amazon.html 找到Using An IAM Instance Profile,複製
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Action": [
- "ec2:AttachVolume",
- "ec2:AuthorizeSecurityGroupIngress",
- "ec2:CopyImage",
- "ec2:CreateImage",
- "ec2:CreateKeypair",
- "ec2:CreateSecurityGroup",
- "ec2:CreateSnapshot",
- "ec2:CreateTags",
- "ec2:CreateVolume",
- "ec2:DeleteKeypair",
- "ec2:DeleteSecurityGroup",
- "ec2:DeleteSnapshot",
- "ec2:DeleteVolume",
- "ec2:DeregisterImage",
- "ec2:DescribeImageAttribute",
- "ec2:DescribeImages",
- "ec2:DescribeInstances",
- "ec2:DescribeRegions",
- "ec2:DescribeSecurityGroups",
- "ec2:DescribeSnapshots",
- "ec2:DescribeSubnets",
- "ec2:DescribeTags",
- "ec2:DescribeVolumes",
- "ec2:DetachVolume",
- "ec2:GetPasswordData",
- "ec2:ModifyImageAttribute",
- "ec2:ModifyInstanceAttribute",
- "ec2:ModifySnapshotAttribute",
- "ec2:RegisterImage",
- "ec2:RunInstances",
- "ec2:StopInstances",
- "ec2:TerminateInstances"
- ],
- "Resource": "*"
- }
- ]
- }
- 在AWS IAM console,建立policy,將剛剛的json貼上存檔
- 在AWS IAM console,建立user,並套用剛剛建立的policy (記得要先保留最後有access key和secret_key的畫面,或先copy下來)
- 參考http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-run-agent-install.html , 在Bastion編輯一支packer_ami.sh,用來測試打包
- #!/bin/sh
- sudo yum -y update
- sudo yum -y install php httpd
- sudo service httpd start
- sudo chkconfig httpd on
- # auto install codedepoly agent,be careful to setting aws region
- chmod +x ./install
- sudo ./install auto
- {
- "builders": [
- {
- "type": "amazon-ebs",
- "access_key": "請用自己的",
- "secret_key": "請用自己的",
- "region": "us-west-2",
- "source_ami": "ami-f173cc91",
- "instance_type": "t2.micro",
- "ssh_username": "ec2-user",
- "ami_name": "packer {{timestamp}}"
- }
- ],
- "provisioners": [
- {
- "type": "shell",
- "script": "packer_ami.sh"
- }
- ]
- }
如果要餵參數進 sh ,可把 provisioners 改成如下 example:- "provisioners" : [
- {
- "type": "file",
- "source": "setup-packer-java.sh",
- "destination": "/tmp/setup-packer-java.sh"
- },{
- "type": "shell",
- "execute_command": "sh '{{ .Path }}'",
- "inline": [
- "bash /tmp/setup-packer-java.sh {{user `aws_s3_access_key`}} {{user `aws_s3_secret_key`}} {{user `aws_region`}}"
- ]
- }
- ]
6.存檔離開- 執行 packer build
- $ packer build packer.json
- 開始 build AMI,可以在 instance 看到會起一個新的 EC2 Instance,做完之後可以在 EC2 console 的選單列,images 看到已經打包好的AMI。
Part6 - 2017/03/23-24- Topic
- Packer
- CodeDepoly
- Github
- Codeship
- Codedeploy
上圖橘色的部分可以插Hook還原現場- VPC console確認 Internet Gateway,並建回 NAT Gateway (分別指定兩個 Public subnet )
- 還原 Route table,確認 Route 有指向 igw,修改兩個 Private subnet,分別指向兩個 NAT Gateway
- EC2 security group,確認 ssh-public 的來源 IP ,確認 ssh-private的source來源要是ssh-public。
- 建回 ELB,在Health Check確認Ping target是TCP:80,要指定兩個 Public subnet,port 先開 http,security policy 指定給之前訂好 LB 的 security policy,health check 要指定 info.php
- edit Auto Scaling Group,將剛剛設定好的 elb hostname 指定給 Auto Scaling Group,health check 要先改回 EC2,Desired 和 Min 維持 0。
- 啟動Bastion,ssh 登入,確認 shell script 和 json 存在,執行./packer build packer.json 重新打包 images
- 到EC2 console > IMAGES > AMIs確認image已經包好IP Address Type
- 複製Launch Config,確認IMAGE ID,IP設定選擇Do not assign a public IP address to any instances.
- Auto Security Group,在Detail頁籤編輯Desired和Min instance,存檔後若設定正確,會自動啟動一個Instance,當Instance狀態改變成InService後,連接ELB的Domain測試,正常啟動的話會看到Apache的首頁
CodeDeploy 參考資料CodeDeploy follow:AppSpec File Example:在Bastion建立tutorial資料夾 > cd tutorial ; mkdir -p htdoc scripts > 編輯 vi appspec.yml (檔名是固定的,一定要是appspec.yml )- version: 0.0
- os: linux
- files:
- - source: htdoc
- destination: /var/www/html
- hooks:
- ApplicationStop:
- - location: Scripts/ServiceStop.sh
- timeout: 180
- BeforeInstall:
- - location: Scripts/EraseApp.sh
- timeout: 180
- ApplicationStart:
- - location: Scripts/RunFunctionalTests.sh
- timeout: 180
請至下列網址驗證YAML格式是否正確編輯三支script和info.php[ec2-user@ip-10-128-11-59 tutorial]$ cat htdoc/info.php<?phpphpinfo();?>[ec2-user@ip-10-128-11-59 tutorial]$ cat Scripts/EraseApp.sh#!/bin/shrf -rf /var/www/html/*[ec2-user@ip-10-128-11-59 tutorial]$ cat Scripts/ServiceStop.sh#!/bin/shservice httpd stop[ec2-user@ip-10-128-11-59 tutorial]$ cat Scripts/ServiceStart.sh#!/bin/shservice httpd start檢查編寫後的檔案目錄結構是否正確:[ec2-user@ip-10-128-11-59 tutorial]$ find../htdoc./htdoc/info.php./Scripts./Scripts/EraseApp.sh./Scripts/ServiceStart.sh./Scripts/ServiceStop.sh./appspec.yml將編輯好的檔案壓縮成zip file,- cd tutorial;
- zip -r filename.zip *
- 掛載s3
到s3開bucket > 賦予packer user寫入s3的權限 (AmazonS3FullAccess) > 回到Bastion,先cat packer.json的內容 > 在Bastion執行aws configure,輸入自己的- AWS Access Key ID [None]:輸入自己的
- AWS Secret Access Key [None]:輸入自己的
- Default region name [None]:輸入自己的
- Default output format [None]:空白即可
輸入結束後,可用aws s3 mb s3://[bucket name],回到tutorial, 執行aws s3 cp filename.zip s3://[bucket name],上傳剛剛的壓縮檔到s3,上傳結束後回到頁面重整 s3 bucket, 確認檔案有沒有上傳成功- EC2需要去S3抓檔案的權限
http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-create-iam-instance-profile.html 第二個是沒限制resource的範例- AWS可以 Attach policy 的可以用 role/user/group
- EC2可以選擇用user/role,用role較簡單
- 離開AWS的環境只能用User (給key)
- Group通常都是拿來管理management console用的
建立policy,內容請參考上面的連結- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Action": [
- "s3:Get*",
- "s3:List*"
- ],
- "Effect": "Allow",
- "Resource": "arn:aws:s3:::[自己的bucket name]/*"
- }
- ]
- }
- 建立role,將role mapping到剛剛建立的policy
- 到Auto Scaling Group,修改Desired和Min的值都為0,確認已經起的Instance有被Terminate
- 到EC2 console,複製一個新的Launch Config,把IAM Instance Profile改成剛剛建好的role
- 再到Auto Scaling Group,修改Launch Configuration指定到剛剛的Launch Config
- 到IAM console,Create Role,建立一個CodeDeploy的Role,權限要AWSCodeDeployRole
- 到CodeDeploy console,點Create Application,自訂Application name和Deployment group name,Deployment type選In-place deployment,
- Add instances > Search by tags 選 Auto Scaling Group,
- Deployment configuration 選CodeDeployDefault.OneAtATime
- Service role ARN選剛建好的CodeDeploy Role
- 在Bastion裝 git,並且將 source code 丟上 github
- sudo yum -y install git
- cd tutorial
- git init
- git add .
- git commit -am "Init commit"
- git push
- 新建 git branch "next"
- git branch next
- git checkout next
- git push origin next
- 到 Codeship 將 next branch 加入 deployment 的監控,並且指定 CodeDeploy 作為 CD 佈署的方式。
- 到 AWS 建立 IAM User
- 使用 Codeship 給的 Policy 權限,必須修改 Resuorce、S3 bucketname、CodeDeploy application/deployment。
- 建立 IAM User,並且勾選 Policy 權限。
- 把 Access Key 和 Secret access Key 拿到 Codeship 的 AWS CodeDeploy deployment 填入資訊。
- 串好 Codeship 之後就到 git push 一個版本測試 CI / CD 是否正常。
Part7 - 2017/03/30-31[ EC2 Options ]On-Demand Instance- 每小時計價,用多少算多少,依照定價計費
- 不滿一小時以一小時計
Reserved Instance- 簽約(一或三年)30~70 % 折扣
- 不能跨 Region 及無法中途終止
Spot Instance- 競標(取得閒置的ec2)
- Bid Price 來設定可以接受的最高每小時價格
- 一般可省50~90 %
使用場景的優先順序:Reserved Instance (一定要存在的服務) > On-Demand Instance (可以透過auto scaling動態增減的) > Spot Instance (可有可無,不影響服務的)ap類型適用spot優先,web類型適用On-Demand優先# =====Spot Instance > 已價格高來計價 (會有危險)設定的最高價格若超過則直接回收(AWS 直接Terminate)# =====[ Storage Options ]Simple Storage Service(S3)- 無空間上限, 空間用多少算多少錢
- 每個 Object 最大5TB
- REST 及 SOAP
Elastic Block Storage (EBS)- 提供1G~16T的block level storage,依provision計價
- 同時只能被一個EC2掛載,但一個EC2可以掛好幾個EBS
Glacier (其實是用磁帶保存,適用備份)- 提供極低成本的資料存檔(Acrhive)或備份(Backup)
- 每個Archive最大40TB,計價用多少算多少
- 取檔案需等3~5個小時
# =====[ S3 Tiers / Classes ]- Standard(99.99%)(durability 99.999999999%)
- Reduced Redundancy Storage(RRS)(99.99%)(durability 99.99%)
_ 適合可以被重新產生檔案的- Infrequently Access(IA)(99.99%)(durability 99.999999999%)
_ 適合給較少存取頻率,但需要時可以快速存取RRS和IA價格會差50%,RRS較低# =====[ S3 Feature ]- Event (可設定什麼樣的事件觸發什麼樣的行為)
- Cross-Origin Resurce Sharing (允許哪些網址來reference resource)
- Versioning
- Cross-Region Replication (只能單向,自動replication到其他region的bucket)
- Lifecycle (可以設定固定幾天後搬到其他的載體保存)
- Website Hosting (可做靜態頁的網站)
- Transfer Acceleration (可作轉址的公告頁)
# =====[ Database Option ]- Relational Database Service (RDS)
- 提供Managed SQL Database Service
- 支援MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Aurora
- Write寫Master,Slave備援Master
- Read replica最多可有五份,Aurora可以到15份
- DynamoDB
- 提供Managed noSQL Database Service
- 使用SSD的儲存裝置
- ElastiCache
- 支援Memcached(支援auto discovery)及Redis兩種實作
- Redshift
- 提供Managed Petabyte-Scale Data Warehouse Server
- 採用Columner Data Storage,適合OLAP (適合BI使用)
- OLTP : 很明確的知道要哪一筆資料
- OLAP : 運算也放在Query裏,有結果再回傳
# =====- RDS Detail
- 透過套用Parameter Groups給DB instance來調整DB設定
- Multi-AZ RDS是以Active-Standby的模式運作
- Failover需要大約三分鐘來完成切換,可以手動強制執行切換
- 可避免進行snapshot或backup時,I/O進入suspend
- 每個Primary RDS支援最多5個read Replica
- 透過Async的方式,由Primary Instance產生read only的instance
- 可轉換成獨立可讀寫的RDS,但會停止原本的Replication
- Aurora支援最多15個read replica
- 可以選擇是否在特定時間做自動的Patch或Backup
- Automated Backups : 支援回復35天內,任何一秒的資料庫狀態
- Database Snapshots:手動的備份,不隨刪除instance而消失
- Encryption at rest
- dd
- CloudFront
- ss
- Simple Queue Service(SQS)
- 提供Managed message queuing service
- 主要用來將service components做decouple的實作
- Message的Order是隨機的,並不保證FIFO
- Simple Notification Service (SNS)
- 提供Managed訊息推送服務
- 沒有pull功能,susbscriber需等候publish端
# =====# =====# =====- Supplement
訂閱:
文章 (Atom)