使用AWS KMS加密本地數據


AWS KMS 簡介及入門

快速入門

我們的目的是什么?

我們的目的是,把本地的數據,經過加密進行傳輸和存儲;加密數據需要的資源有:加密算法、密鑰、需要加密的數據;工作方式是需要加密的數據(被稱作明文)經過某種算法后,生成新的代碼串(被稱作密文),這個算法運行的過程需要密鑰。加密每一條數據都需要一把鎖和對應的鑰匙,這里的“鎖”可以理解為加密算法,“鑰匙”即為加密算法所需的密鑰。
因為我們需要加密的數據有很多條,所以就需要很多套鎖和鑰匙,在這里我們不妨假設“買鑰匙送鎖”,不去過多關注鎖(即加密算法)的原理,而把注意力放在如何保存茫茫多的鑰匙,以及需要解鎖數據文件的時候,如何找到對應的鑰匙。
KMS(Key Management Service)的功能就是,管理這些密鑰,在需要加密和解密的時候可以找到密鑰,對數據進行加鎖和解鎖。

AWS KMS介紹

AWS是指亞馬遜的雲服務,具體服務項包括雲數據庫、雲計算、雲存儲等;現在有很多雲服務提供商,國內比如騰訊阿里都有自己的雲服務。
KMS是指的Key Management Service,是一個密鑰管理服務,用於創建並管理密鑰,可以直接在AWS的官方賬戶管理控制台中用可視化界面操作,也提供官方Api(CLI)通過代碼的形式進行管理,還提供支持第三方語言(比如Java)的Api。
KMS提供的Api僅僅是用來管理密鑰的,比如生成、查看、編輯、標記密鑰,並不能實現使用密鑰加密數據這個步驟,要想實現此步驟,還需要借助AWS官方提供的SDK,該SDK是面向整個AWS服務的,這里只介紹和KMS相關的內容和接口。

重要概念介紹

客戶主密鑰(CMK)

前面提到了,我們需要加密很多數據,所以有很多鑰匙,可以把用於加密業務數據的鑰匙叫做“數據密鑰”,但是鑰匙直接放在表面上總歸是不安全的,因為鑰匙本身也是一段數據,所以我們可以對鑰匙也進行加密,加密“數據密鑰”同樣需要加密算法和它對應的密鑰,這個密鑰就是“客戶主密鑰(CMK)”,CMK並不參與業務數據的加密,它知識管理“數據密鑰”的鑰匙。
CMK分類為“客戶托管CMK”、“AWS托管CMK”和“AWS擁有的CMK”,后兩類通常用於加密AWS賬戶內相關的信息,並且用戶對它們只有部分權限。我們使用KMS的主要目的並不是管理AWS賬戶,而是借助它的管理功能管理自己的“數據密鑰”,所以后文討論的CMK默認指“客戶托管CMK”。
CMK的功能有:

  • 創建數據密鑰(對稱加密算法需要的密鑰)
  • 創建數據密鑰對(非對稱加密算法需要的密鑰)
  • 加密數據密匙
  • 查看密鑰標識符(KeyId,ARN等)
  • 設置密匙源材料
  • 加密上下文(加密的時候順帶存儲一些明文信息Context)

信封加密

加密的數據的安全性部分取決於如何保護可解密該數據的數據密鑰。保護數據密鑰的一種公認的最佳實踐是對其進行加密。為此,您需要使用另一個加密密鑰(稱為主密鑰 )。這種使用對數據密鑰進行加密的做法稱為信封加密。
“AWS加密SDK”使用信封加密。它使用數據密鑰加密您的數據。然后,它使用對數據密鑰進行加密。AWS 加密 SDK在單個加密的消息中返回加密的數據和加密的數據密鑰,如下圖所示。
信封加密

數據密鑰對

根據加密算法不同,密鑰有兩種,一種是加密和解密使用相同的密鑰,此類算法被稱作“對稱加密”,密鑰也就只有一個;
另外一種加密算法“非對稱加密”,通常有兩個密鑰,稱為“公鑰”和“私鑰”,它們兩個必需配對使用,否則不能打開加密文件,這兩個鑰匙就被成為“數據密鑰對”。
業務中使用的數據加密算法均為對稱加密,故對數據密匙對的屬性以及設置方法不再詳細說明。

密鑰標識符

使用KMS服務是需要具有賬戶憑證的,不可以離線使用,密匙標識符可以簡單的理解為AWS用於識別使用者身份信息的代碼串,被稱作Keyid。
同樣的,也有一串編碼,記錄了不僅用戶信息,還包括地區等信息,叫做ARN。
這些標識身份的代碼串可以通過AWS管理平台或者程序Api獲取和管理。

密鑰源材料

類似於生成隨機數的Random方法需要一個種子,生成密鑰也需要一個種子,被叫做材料源。AWS賬戶會默認生成,用戶也可以自行設置。
公司業務中使用默認材料源即可。

開始使用

操作可以分為兩類,分別是操作主密鑰和操作數據密鑰,兩類操作涉及到的接口是不同的。
操作主密鑰需要用AWS官方的接口,導入的Maven依賴為aws-java-sdk,可以進行的操作為上文中提到的CMK操作。
操作數據密鑰可以使用OpenSSL或者AWS官方提供的aws-encryption-sdk-java這個工具包,可以進行的操作是加密和解密數據。

環境配置

  1. 配置賬戶信息

注冊 AWS 並創建 IAM 用戶
設置用於開發的 AWS 憑證和區域

  1. 導入依賴
 <dependency>
		<groupId>com.amazonaws</groupId>
		<artifactId>aws-java-sdk</artifactId>
		<version>1.11.821</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
	<dependency>
		<groupId>org.bouncycastle</groupId>
		<artifactId>bcprov-jdk15on</artifactId>
		<version>1.60</version>
	</dependency>
	<dependency>
		<groupId>com.amazonaws</groupId>
		<artifactId>aws-encryption-sdk-java</artifactId>
		<version>1.6.1</version>
	</dependency>

常用功能及對應api

主密鑰管理
數據加密


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM