##はじめに
こんにちは!本日はKMSについての記事(その1)の続きになります。
よろしくお願いします(。・ω・)ノ゙
##許可(Grant)
KMSではキーポリシーのほかに許可という設定機能があります。
◆許可の作成
許可を作成する場合は以下のようなCreateGrantを実行して設定します。
$aws kms create-grant\
--key-id ~~~~~
--grante-principal arn:aws:iam::~~~~
--operations Decrypt
--retiring-principal arn:aws:iam::~~~
key-idで対称のCMK、grantee-principalで利用を許可するIAMユーザー、operationsで許可するAPIを指定する。retiring-principalを指定することで設定した許可を無効にできるIAMロールを設定しています。
##クライアントサイド暗号化(Client-Side Encryption:CSE)
ユーザーがアプリケーションで暗号化を行いたいときに使用する。SDKでKMSのAPIを取りだし、取り出したキーを使用してデータを暗号化する。カスタマー管理CMKを使用し暗号化した後、そのデータは通信経路上も暗号化された状態となるためセキュアにデータを扱うことができる。エンベロープ暗号化の暗号化の流れはこちらになる。
クライアント側の暗号化では、Amazon S3に送信する前にデータを暗号化する。クライアントサイド暗号化を有効にするには以下のオプションがある。
・KMSに保存されているCMKの使用
・アプリケーションに保存したマスターキーの使用
##サーバーサイド暗号化(Server-Side Encryption)
AWSの各サービスが提供する暗号化を使用する機能。AWSサービスがデータを受信した後に自動的に暗号化を行い途中の通信経路上のデータは暗号化されないためセキュリティ的には強度は落ちるが簡単に実装することができる。
Amazon S3はデータセンターのディスクに書き込まれるときにデータをオブジェクトレベルで暗号化し、お客様がデータにアクセスするときに複合する。
##KMSでの制限
◆CMKで直接暗号・複合できるデータは4KBまで
CMKを直接暗号や複合に使用する場合は、4KBまでのデータしか処理できない。
◆APIリクエストのレート制限がある
暗号化処理に使用するAPIは同時実行できる1秒当たりのリクエスト最大数が決まっている。このレートを超えてKMSのAPIをリクエストした場合にThrottingExceptionというエラーが返される。
◆リージョン間でのキーの共有はできない
CMKは生成したリージョン内でのみ使用可能。ほかのリージョンで使用する場合は新しく生成する必要がある。
◆CMKを削除したらデータ複合できない
CMKを削除した場合はそのCMKを使用して暗号化しているデータの復旧はできなくなる。AWS側に問い合わせしても復旧自体できないため削除は慎重に行う必要がある。
ただ、データを破棄する際は暗号化に使用しているCMKを削除することで復旧をできなくさせるため安全にデータを破棄することができる。
リソースの制限
KMSで作成するリソースについて上限があり、超える場合は制限の引き上げリクエストが必要
リソース | 上限値 |
---|---|
CMKあたりの許可数 | 10,000 |
エイリアス数 | 10,000 |
カスタマー管理のポリシー | 10,000 |
CMKあたりの特定のプリンシパル数 | 500 |
キーポリシーのサイズ | 32KB |
対称キー(共通鍵暗号方式)
暗号化のアルゴリズムの一つで、暗号化と複合に同じ暗号鍵を使うアルゴリズムのこと。
対称鍵暗号方式では暗号化に使用される暗号化のかぎと複合に使用される複合鍵が同一で、対象鍵の暗号方式で暗号化した情報を誰かに送るとき暗号鍵も一緒に送らなければならない。
##非対称キー(公開鍵暗号方式)
2つの対となる鍵を用いてデータの暗号化や復号化を行う暗号方式。
公開鍵暗号のうち一方は広く他人に公開するため公開鍵と呼ばれもう一方は本人だけに分かるよう厳重に管理されるので秘密鍵と呼ばれる。秘密鍵で暗号化したデータは対応する公開鍵でしか復号できない。
AWS KMSではRSA CMKとECC CMKがサポートされている。
**◆RSA CMK:**暗号と復号または署名と検証に使用
**◆楕円曲線(ECC) CMK:**署名と検証に使用
## おわりに
SCSの学習でKMSについてまとめました。仕事でも使うことがありとても勉強になりました。
(。・ω・)ノ゙バイバイ