AWS の暗号化サービス

#1.AWS KMS#

##概要##
データの暗号化に使用される暗号化キーの"作成"と"管理"を容易にするマネージド型サービスです。


##CMK##

||AWSマネージド型|カスタマーマネージド型|
|---|---|---|
|作成|AWS|ユーザー|
|ローテーション|3年に1回|1年に1回、又はオンデマンド|
|削除|削除できない|削除可能|
|使用範囲|特定のAWSサービス|KMS/IAMポリシーで管理|
|キーアクセスポリシー|AWSマネジード|カスタマーマネージド|
|ユーザアクセス管理|IAMポリシー|IAMポリシー|


##注意##

- 対象鍵暗号（共通鍵暗号）にのみ対応しており、非対称鍵暗号（公開鍵暗号）には対応していません。
- ４KBを超えるデータは直接暗号化することができず、鍵をエクスポートすることもできません。
- 利用者が独自に設定した外部の鍵をKMSへインポートすることは可能ですが、一度インポートした鍵をエクスポートすることはできません。
- APIリクエストのスロットリングに注意[制限](https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/limits.html)
- リージョン間の鍵の共有はできない。
- 不要にになった鍵は削除することはできますが、削除した鍵で暗号化したデータが残っていた場合、そのデータは復号化で気なくなるため、事故に備えて、鍵の削除に猶予期間を設定する必要があります↓↓↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/2772b41f-ed58-2594-af6a-0d4a0435fc58.png)


##キー管理者とキーユーザー##

|[キー管理者](https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/key-policies.html#key-policy-default-allow-administrators)|[キーユーザー](https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)|
|---|---|
|CMK を管理するためのアクセス権限はありますが、データの暗号化と復号化に CMK を使用するためのアクセス権限はありません。| 暗号化と復号化のために CMK を直接使用するアクセス権限があります。|


##カスタマーキーとカスタマーデーターキー##

![スクリーンショット 2019-11-03 19.59.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/860da216-2f0b-1347-1415-839aea7cb1ab.png)

##BYOK利用時の考慮点##

![スクリーンショット 2019-11-03 20.16.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/0f21c467-8f6e-480e-5cec-d7a13d59528f.png)

- 鍵のエクスポートは不可。
- インポートする鍵は256ビットの対称鍵のみ。
- 鍵のインポートは2つのRSA PKCS#1スキームのいずれかを使用して保護される。
- インポートした鍵の自動ローテーションは不可。随時手動でローテーションする。
- インポート後はAWS KMS生成のCMKと同等の可用性であるが、耐久性は異なり、リージョン障害などの場合に自動復旧されない。
- 有効期限が過ぎた鍵はKMSによって削除される。AWS KMS生成のCMKは7日〜30日の待機時間があるのに対して、即時に削除。インポートの再実施で復旧可能。
- 上記の耐久性と削除（特にオペレーションミスによる削除）の対応として、鍵を必ず保管しておくことが運用の前提。
- 同じ鍵を複数リージョンにインポートすることは可能。但し、あるリージョンのKMSで暗号化したデータ(データキー)を別リージョンのKMSで復号することはキーIDが違うため出来ない。

##API##
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ebb39eb6-5a02-7567-0124-ac49398afe0f.png)

**GenerateDataKey と GenerateDataKeyWithoutPlaintext**
GenerateDataKeyWithoutPlaintextは、データキーの暗号化されたコピーのみを返すことを除いて、GenerateDataKeyと同じです。
GenerateDataKeyと同様に、GenerateDataKeyWithoutPlaintextは、リクエストごとに一意のデータキーを返します。
データを暗号化する必要がある場合は、暗号化されたキーのコピーに対して復号化操作を呼び出します。 


##料金##

- 1USD / key version / 月
- 0.03USD per 10,000 APIリクエスト 

##リンク##
[AWS S3デフォルト暗号化をやってみた](https://qiita.com/leomaro7/items/ac2263f07a3635bd6359)


#2.CloudHSM#

##概要##
暗号化のための鍵を管理する専用サーバーを、指定したVPC上にAWS側で用意してくれるサービスです。

##注意##

- 対象鍵暗号、非対称鍵暗号に対応している。
- 暗号鍵のインポート、エクスポートが可能です。
- 規制や法令のために認定を受けた鍵管理モジュールを専用環境で利用する必要がある場合や、公開鍵暗号化方式を利用したい場合に利用します。

##料金##
東京リージョンで、1.81USDなので、今のところ検証はまだしていない。。。。

[AWS CloudHSM の料金](https://aws.amazon.com/jp/cloudhsm/pricing/)


#3.AWS Certificate MAnager#

##概要##
AWS上でお手軽にSSL/TLSを利用することのできるサービスです。
SSL/TLS証明書はインターネット越しのネットワーク通信を安全にし、Web サイトの身元を確認するのに使われています。

##DNS認証とEメールドメイン認証##
アマゾンは証明書を発行する前に、そのドメイン名をあなたが管理している事を検証しなければなりません。

DNS認証とEメールドメイン認証の方法があり、DNS認証が推奨されています。
[DNS を使って AWS Certificate Manager の検証を簡単に](https://aws.amazon.com/jp/blogs/news/easier-certificate-validation-using-dns-with-aws-certificate-manager/)


##パブリック証明書とプライベート証明書##

|[パブリック証明書](https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/gs-acm-request-public.html)　|[プライベート証明書](https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/gs-acm-request-private.html)|
|---|---|
|サーバやクライアントとは関係ない民間機関などがが発行し、第三者的な立場でサーバやクライアントの真正性を証明します。また、パブリックな証明書自体が本物であるか否かはインターネットに接続された環境であれば、どこにいても確認できます。|特定の組織やグループ内だけで有効な証明書です。たとえば、大学内に認証局を設置し、その認証局で発行された証明書は大学内でのみ、サーバやクライアントの真正性を確認できます。|

##リンク##
[AWS Certificate Manager - ELB(+ACM発行証明書)→EC2](https://qiita.com/leomaro7/items/bdfbfd163b31df872252)
[Amazon CloudFront の代替ドメイン名(CNAMEs)のセキュリティ強化 SSLが必須になった](https://qiita.com/leomaro7/items/50837077953eefc61e27)