亞馬遜EC2
提供Web服務方式的系統
亞馬遜彈性計算雲(EC2,Elastic Compute Cloud)是一個讓使用者可以租用雲端電腦運行所需應用的系統。EC2藉由提供Web服務的方式讓使用者可以彈性地運行自己的Amazon機器映像檔,使用者將可以在這個虛擬機器上運行任何自己想要的軟體或應用程式。提供可調整的雲計算能力。它旨在使開發者的網路規模計算變得更為容易。
亞馬遜EC2
Amazon在2006年8月25日發布EC2受限公眾Beta版本。
亞馬遜EC2
微型實例
默認配置了613MB的存儲器,一個虛擬核心上運行兩個ECU單位,免費試用一年(需信用卡收取一美金)。
小型實例
默認配置了1.7 GB的存儲器,一個虛擬核心上運行一個ECU單位。
大型實例
默認配置了7.5GB的存儲器,兩個虛擬核心上各運行兩個ECU單位。
極大實例
默認配置了15GB的存儲器,四個虛擬核心上各運行兩個ECU單位。
支持Windows以及Linux,所有平台使用微型(免費)實例可免費使用。
Amazon EC2自動配置容量的功能允許用戶自動調整Amazon EC2的容量。假如用戶的流量達到尖峰,自動配置功能可以自動增加更多的容量至虛擬主機上以維持性能。
如果大家已經準備好使用Amazon Web服務(AWS),那麼,至少有兩種做法可以用來創建以及使用AWS。一種做法是使用AWS API(應用程序編程介面)調用。建議大家在大多數情況下使用第二種做法,即AWS管理控制台,亞馬遜的基於web的界面。
AWS管理控制台的簡化流程:
1)AWS註冊
2)創建實例的安全組
3)啟動Amazon EC2實例
4)連接Amazon EC2實例
5)添加Amazon EC2實例存儲
AWS註冊
進行AWS註冊,單擊“註冊”,然後按照後續屏幕上的說明。註冊時,大家會收到大家的AWS帳號,之後會用到。
第一次註冊AWS,大家會收到一個賬戶,所有的AWS服務都會自動生成一個帳戶。包括Amazon EC2服務,S3和EBS存儲服務等。雖然AWS能夠免費註冊,可以使用750個小時,但是,必須提供一個信用卡號,當大家使用“收費”服務時,可以用來繳費。
亞馬遜使用大家提供的電話號碼確認大家的身份。大家會很快收到自動電話系統的來電,系統將提示大家輸入收到的驗證碼。一旦驗證碼經過驗證,大家的帳戶將被激活。
創建IAM用戶
當訪問AWS服務時,該服務決定了大家是否有許可權訪問該服務資源。創建IAM用戶,然後根據不同許可權將用戶添加到IAM組。接下來,使用一個特殊的URL訪問AWS。“賬戶id”就是大家的AWS帳戶ID,沒有連字元,是大家註冊AWS時獲得的AWS帳戶。
創建IAM用戶,開啟IAM控制台,輸入註冊AWS時設置的電子郵箱和密碼,並按照提供的說明操作。創建IAM用戶后,大家就能獲得憑證,使用上述特殊的URL,登錄並且使用Amazon EC2。
創建安全組
安全組作為虛擬防火牆,控制著訪問相關實例的允許流量。將入站和出站的規則添加到安全組中來控制流量。入站規則能夠控制訪問與安全組相關實例的流量,如HTTP。
出站規則控制著到達與安全組相關實例的目的地,可以發送的流量。然而,返迴流量,如從主機接收到的響應,收到的流量是自動允許的。如果計劃在多個區域啟動實例,將需要在每區域區分別創建安全組。
創建安全組,開啟Amazon EC2控制台:
為安全組選擇區域
點擊“創建安全組”,輸入一個新安全組的名稱和描述
在入站選項卡上,創建規則,比如:
允許進入實例的HTTP流量
允許進入實例的SSH流量
兩個AWS內部通信的實例,必須屬於同一安全組,或者一個實例的安全組必須配置為接收同一AWS帳戶的另一個安全組的流量。安全組被限定區域,因此,在每個區域需要配備適當的安全組,有計劃地來運行應用程序。
啟動Amazon EC2實例
可以使用AWS管理控制台啟動實例。啟動實例之前,大家必須完成第一個步驟是“註冊。”
通過訪問Amazon EC2控制台,開始啟動程序,選擇“啟動實例”。選擇Amazon Machine Image(AMI)創建啟動實例的模板。接下來,通過選擇實例類型,為實例選擇硬體配置。選擇之前為實例創建的安全組,並使用之前創建的憑證,最後啟動實例。
為Amazon EC2實例添加EBS卷
啟動並且連接一個實例后,可以為實例添加一個EBS卷,或者添加其他存儲服務的存儲單元。打開Amazon EC2控制台,選擇創建實例(EBS卷是敏感區域)的區域,選擇實例。大家可以選擇卷的類型:標準的或者供應的IOPS。最後,附加卷。如果創建了一個空的卷,大家需要將卷格式化才可以安裝。
EC2安全組在AWS中為虛擬機網路安全策略基線提供了一個結構,它應當被視為第一道防線——一個必要但不充分的安全組件。
企業AWS部署也應包括一個或多個VPC以便為網路安全策略增加一個層。
確保AWS部署:
為每一個應用、應用層和管理用戶組創建一個獨立的安全組,並使用專為特定工作負載或服務層需求而調整的策略:不要為每一個實例創建一個獨立的安全組;不要把所有的實例都放在同一個安全組。這種舊式的“護城河和城堡”式的防火牆策略明顯外強中乾,面對如今使用多重攻擊和內部試探在先針對性攻擊在後的攻擊方式已無法發揮防火牆作用;不要依靠VPC的默認AWS安全組。
仔細規劃網路路由和子網設計(VPC),並使用網路之間的嚴格ACL。網路ACL為網際網路和應用程序協議提供了精細化控制,例如GRE、IPSec、ICMP、HTTP、SSL、DNS以及源/目的IP地址範圍之間的流量限制。一方面VPC ACL獨立於安全組,另一方面兩者又相互協作。在不必要的流量和潛在有害的流量到達EC2實例和安全組策略之前,VPC ACL和安全組就就把它們剔除了。
當為網路和實例進行ACL規則定義時,使用最低許可權標準。只允許絕對需要的連接、埠和用戶。特別關注出站安全組策略。出站規則限制對特定地址的連接,例如Dropbox或中國黑客,以及可用於未授權數據泄露的埠(FTP)。
支持無所不在的日誌記錄:VPC流量日誌、CloudTrail、亞馬遜身份與訪問管理等等。事件日誌可提供故障問題排除、現場安全漏洞和隨時間推移安全策略完善所必須的詳細信息。
亞馬遜Web服務讓企業相信他們擁有了自己的私有資源,但是有時候共享雲系統反咬一口虔誠的企業。在亞馬遜Web服務EC2實例中會看到一個錯誤RequestLimitExceeded,這也是反咬企業的錯誤之一。
如果大家進行了過多的AWS調用,大家的調用就會出現RequestLimitExceeded錯誤。然而,AWS並沒有明確多少調用算“過多”,很可能是因為這是一個複雜的且未公開的演演算法,AWS也有待進一步開發。但是這意味著沒辦法預測什麼時候這個錯誤會發生。
解決方法
首先將AWS作為有約束的資源考慮,而且往返周期昂貴。正如大家無法一次按位元組閱讀一個文件,不要在一個小的組塊中詢問AWS。
如果大家希望了解正在運行的每一個實例,可以對每一個實例運行一個單獨的AWS調用,或者使用靈活的API來針對AWS EC2實例列表的信息進行單獨請求。第一種方法更有可能導致問題。
第二種選擇是考慮大家多久需要更新一下請求的AWS數據。假定大家正在收集實例數據來進行手動擴展決定。頻繁更新數據增加了精準度,知道大家收到了請求拒絕提示,而且不得不以指數方式退下。要平衡大家所請求的數據頻率。
然而,在做了這些時候,所有的AWS調用需要防止請求限制異常,大家必須決定如何處理。一些調用可以失敗,而且大家可以基於邏輯嘗試一次;其他的調用需要局部再次嘗試直到成功為止。
對於第二種情況,很多管理員會編寫類似的代碼:
int backOffFactor = 0;
while(true) {
try {
amazonClient.someCall();
break;
} catch(AmazonServiceException e) {
if(e.getErrorCode().equalsIgnoreCase("RequestLimitExceeded")) {
quietSleepSeconds(++backOffFactor);
}
}
這個代碼是一種改進的強制性重傳延遲,通過使用重試之間的更長周期的休眠實現,使用一個實用功能來完成,即所有的管理員編寫休眠和捕捉/忽略“InterruptedException”,直到“過多”情況消失。大家可以調整多快增加休眠時間,而且也可以創建最高上限限制休眠時間。
這並不是完美的代碼,而且可以作為一個lambda表達式在這些語言支持閉包中處理,但是表達了基本的意圖:假設失敗的可能,並且放慢失敗直到系統停止抱怨。