Ansible2.6でAWS KMSを使うときにハマったこと

Ansible2.6でAWS KMSを使うときにハマったこと:


はじめに

AnsibleでAWS KMS(以下KMS)を構築&利用しようとして、Ansibleの使用言語であるPythonにハマった話です。

インフラ自動構築ツールとしてのAnsibleの立ち位置や、使い方などは省略させてもらいます。

(Ansible歴が15営業日程度なので、アレレな使い方をしている可能性があります。)


前提条件


Ansibleでしたかったこと


  1. KMSカスタマーマスターキーの構築(以下CMK)
  2. CMKにエイリアスを付与する
  3. CMKをエイリアスから取得する
  4. CMKでEBSを暗号化


ハマった経緯

AnsibleのAWSモジュール一覧を見たところ、KMS構築モジュールがないやんけ!

(え、あるよと思った方、実はこのaws_kmsモジュールはKMSを利用するIAMロール・ユーザーを定める代物です。)

となり、AnsibleからAWS CloudFormation(以下CloudFormation)を呼び(使用モジュール)、Ansibleでしたかったこと1 & 2を実施するという荒技をしました。
aws_kms_factsモジュール(以下aws_kms_facts)で暗号化に使いたいCMKをエイリアスのフィルターで取得し、ec2_volモジュールで暗号化しようとしたときに、ことは起こりました。


実行Ansibleソース

(12/25に書きます)


CMKを構築するCloudFormation


CMKを構築した結果の標準出力


CMKにエイリアスを付与するCloudFormation


CMKにエイリアスを付与した結果の標準出力


エイリアスからEBS暗号化に使用するCMKを取得する


エイリアスからEBS暗号化に使用するCMKを取得した結果の標準出力


EBS暗号化⇨エラー発生


出現したエラー

(12/25に書きます)

え、aws_kms_facts実行結果で取得できるdictオブジェクトに確かに「keys」というキーはあるよ!

どこ見てるの、もしかしてバグ?と思いました。キー名を「key」にしたり「result」にしたり。。


解決策

EBS暗号化を、aws_kms_facts実行結果で取得できるdictオブジェクトのキーをひとつひとつ舐め、「keys」というキーがあれば、そのバリューを取得する処理に変更しました。

EBS暗号化ソースは以下です。(12/25に書きます)


まとめ

Pythonのkeysは特別な意味を持つので、keys()と間違われないようにしましょう

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)