0.はじめに
この記事はAWS SAA試験勉強のための、AWS KMSに関する知識のまとめです。
1.AWS KMS(Key Management Service)とは
AWS KMSとは、データの暗号化に使用される暗号化キーの作成と管理を容易にするとともに、証跡を残して可視化するマネージド型サービス。監査対応が可能。
AWS KMSにおいて、KMSキーには「AWSマネージド型」「カスタマーマネージド型」があります。
通常、AWSによって作成・管理されるものは「AWSマネージド型」であり、ユーザーは削除できません。AWSマネージド型の鍵は、連携したAmazon EBSやAmazon Redshiftなどのサービスで暗号化を利用したタイミングでAWSが作成します。
一方、カスタマーマネージド型のKMSキーはユーザーが作成・削除、および管理を行います。ただし作成した鍵を長期間利用するのはセキュリティ上危険なため、KMSでは鍵の自動キーローテーションをサポートしています。
2.共有の方法
KMSキーを共有する際は、キーのポリシーを編集し、特定のユーザやIAMグループに対して必要なアクセス権限(例えば、kms:Encrypt, kms:Decrypt, kms:GenerateDataKeyなど)を付与します。
2.1.IAMポリシーの作成または更新
新しいユーザが属するIAMグループに対して、KMSキーへのアクセス権限を含むIAMポリシーをアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "arn:aws:kms:region:account-id:key/key-id"
}
]
}
2.2.KMSキーのポリシー更新
対象となるKMSキーのポリシーを編集し、新しいユーザやそのIAMグループを追加します。
{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-id:user/user-name"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
3.AWS KMSの復号
具体的な復号の操作方法は、使用するプログラミング言語やAWS SDKによって異なりますが、基本的にはKMSのAPIを呼び出して復号を行います。
3.1.データの暗号化と復号
KMSを使用してデータを暗号化する場合、そのデータを利用する際には復号が必要です。KMSは暗号化キーを管理し、指定されたキーでデータを暗号化・復号します。
3.2.サーバーサイド暗号化
S3バケットやRDSインスタンスなどでサーバーサイド暗号化を使用する場合、AWSサービスが自動的にデータの暗号化と復号を行います。この場合、ユーザーは復号の操作を意識する必要はありませんが、内部的にはKMSが復号を行っています。
3.3.クライアントサイド暗号化
アプリケーションがクライアントサイドでデータを暗号化してS3などに保存する場合、そのデータを利用する際には復号が必要です。この場合、アプリケーションがKMSを使用して暗号化キーを取得し、データを復号します。
4.クロスアカウント
あるAWSアカウントで暗号化されたリソースを別のAWSアカウントで復号したい場合、KMSの暗号化鍵を複数のAWSアカウントで使用できます。暗号化されたAMIやデータベースのスナップショットなどを他のAWSアカウントと共有する際に利用します。