マルチリージョンキーをサポートしたKMSを試してみた

KMSのマルチリージョンキーを作成、異なるリージョンで暗号化、復号化が可能な事を試してみました。
2021.06.17

AWSチームのすずきです。

AWS Key Management Service (KMS) がマルチリージョンキーをサポート、 カスタムキーを異なるリージョンに複製した利用が可能になりました。

KMSのマルチリージョンキーを作成して、AWSCLIを利用したクライアントサイド暗号化(CSE)を実施、 異なるリージョンで復号可能なことを試す機会がありましたので、紹介させていただきます。

Encrypt global data client-side with AWS KMS multi-Region keys

マルチリージョンキーの作製

KMSのカスタムキーの作成時、詳細オプションで「マルチリージョンキー」の指定が可能になりました。

マルチリージョンキー、リージョンごとのレプリカキーの設定が可能です。

東京リージョンで作成したマルチリージョンキーを異なるリージョン(オレゴン、大阪)に複製しました。

マルチリージョンキーは新規作成時のみ設定可能。 KeyId、KeyArnのプリフィックスとして「mrk」が付与されたものが「マルチリージョンキー」と判別できる模様です。

CLI確認

作成したマルチリージョンキーの確認を試みました。

異なるリージョンに、同一のKeyIDの鍵が展開されている事が確認できました。

$ aws --region ap-northeast-1 kms list-keys | jq '.Keys[] | select(.KeyId=="mrk-00000000000000000000000000000000")| .'
{
  "KeyId": "mrk-00000000000000000000000000000000",
  "KeyArn": "arn:aws:kms:ap-northeast-1:000000000000:key/mrk-00000000000000000000000000000000"
}

$ aws --region us-west-2 kms list-keys | jq '.Keys[] | select(.KeyId=="mrk-00000000000000000000000000000000")| .'
{
  "KeyId": "mrk-00000000000000000000000000000000",
  "KeyArn": "arn:aws:kms:us-west-2:000000000000:key/mrk-00000000000000000000000000000000"
}

CSE確認

AWS CLIの kms encrypt を利用して、クライアントサイド暗号化(CSE)の動作確認を試みました。

暗号化

東京、オレゴンのそれぞれのリージョンの鍵を利用して、暗号化を行いました。

echo 'hello ap-northeast-1' > /tmp/hello-ap-northeast-1.txt
echo 'hello us-west-2' > /tmp/hello-us-west-2.txt
aws --region ap-northeast-1 kms encrypt \
    --key-id mrk-00000000000000000000000000000000 \
    --plaintext fileb:///tmp/hello-ap-northeast-1.txt \
    --output text \
    --query CiphertextBlob | base64 --decode > /tmp/encrypted-ap-northeast-1.txt

aws --region us-west-2 kms encrypt \
    --key-id mrk-00000000000000000000000000000000 \
    --plaintext fileb:///tmp/hello-us-west-2.txt \
    --output text \
    --query CiphertextBlob | base64 --decode > /tmp/encrypted-us-west-2.txt
$ ls -la /tmp/encrypted-*
-rw-rw-r-- 1 cloudshell-user cloudshell-user 173 Jun 17 12:13 /tmp/encrypted-ap-northeast-1.txt
-rw-rw-r-- 1 cloudshell-user cloudshell-user 168 Jun 17 12:13 /tmp/encrypted-us-west-2.txt

復号化

東京、オレゴンのどちらのリージョンでも、復号可能な事を確認できました。

$ aws --region ap-northeast-1 kms decrypt \
>     --ciphertext-blob fileb:///tmp/encrypted-ap-northeast-1.txt \
>     --output text \
>     --query Plaintext | base64 --decode
hello ap-northeast-1

$ aws --region us-west-2 kms decrypt \
>     --ciphertext-blob fileb:///tmp/encrypted-us-west-2.txt \
>     --output text \
>     --query Plaintext | base64 --decode
hello us-west-2

$ aws --region ap-northeast-1 kms decrypt \
>     --ciphertext-blob fileb:///tmp/encrypted-us-west-2.txt \
>     --output text \
>     --query Plaintext | base64 --decode
hello us-west-2

$ aws --region us-west-2 kms decrypt \
>     --ciphertext-blob fileb:///tmp/encrypted-ap-northeast-1.txt \
>     --output text \
>     --query Plaintext | base64 --decode
hello ap-northeast-1

まとめ

従来、KMSのカスタムキーを利用してCSEで暗号化すると、 KMSキーを登録したリージョン障害の影響を回避出来ないリスクがありましたが、 マルチリージョンキーを利用する事で、リージョン障害に備えたDRが実現しやすくなりました。

また、S3、DynamoDBなどのサーバサイドの暗号化(SSE)で複数リージョンを利用する場合にも、 マルチリージョンキーを採用する事で、管理性などが向上する事が期待できます。

従来の単一リージョンキーからマルチリージョンキーへの変換はサポートされていないため、 KMSのカスタムキーを新規に作成する際、将来的にDRなどでマルチリージョン利用の可能性がある場合は、 マルチリージョンキーをお試しください。