Slide 1

Slide 1 text

AWS CLIでCMKを沢山作ってみたら 困ったこと 黒野 雄稀 JAWS-UG CLI専門支部 #270R 2022/07/24

Slide 2

Slide 2 text

自己紹介 名前 黒野 雄稀 AWS歴 
 ・約3年
 ・2022 APN ALL AWS Certifications Engineer
 所属 アイレット株式会社 普段の業務
 ・基幹系インフラ構築
 ・システム運用構築


Slide 3

Slide 3 text

背景 CloudTrail皆さん使っていますか?
 
 
 今回は複数のAWSアカウント(約16アカウント)でCloudTrailの有効化に伴い、
 CMKの作成が必要となりました。
 
 コンソールで作るのは流石に大変。。ということでAWS CLIを使ってCMKを作成
 してみました。
 


Slide 4

Slide 4 text

対象となるリージョン ● 東京 ● バージニア北部 ● シンガポール ● フランクフルト ● 北京

Slide 5

Slide 5 text

スクリプト概要

Slide 6

Slide 6 text

aws-vault設定 ここからスクリプトの中からポイントの部 分に解説を入れていきます。 ※スクリプト全体はQiitaに記載しておき ます。 #スイッチロールの設定を行う。 export SWICHROLE=$ROLE echo $SWICHROLE shopt -s expand_aliases alias av='aws-vault exec $SWICHROLE --no-session --' #結果出力先ファイルの設定を行う。 export OUTPUT=./result-kms/create/${SWICHROLE}-kms-result-${NOW}.txt #アカウントIDの取得を行う。 ACCOUNT=$(av aws sts get-caller-identity | jq -r .Account) コマンド
 


Slide 7

Slide 7 text

キーポリシー ファイル作成 ベースとなるポリシーファイルを 用意して、固有情報(アカウントID、リー ジョン)だけ書き換えを行っています。 echo -e "\U2705KMSキーポリシー作成 " cp ./base-key-policy.json ./key-policy-${SWICHROLE}.json sudo sed -i -e "s/ap-northeast-1/${REGION}/" ./key-policy-${SWICHROLE}.json sudo sed -i -e "s/12345678910/${ACCOUNT}/" ./key-policy-${SWICHROLE}.json コマンド
 


Slide 8

Slide 8 text

CMK、エイリアスの 作成 上記で作成した、キーポリシーを元に CMKの作成とエイリアスの作成を行う。 #上記で作成したキーポリシーを使用して、 CKMの作成を行う。 echo -e "\U2705KMSキー作成" KEYID=$(av aws kms create-key --key-usag ENCRYPT_DECRYPT \ --origin AWS_KMS --policy file://key-policy-${SWICHROLE}.json \ --region $REGION | jq -r .KeyMetadata.KeyId) echo -e "\U2705 KEYID:${KEYID}" #作成したCKMに対して、エイリアスの作成を行う。 echo -e "\U2705エイリアス作成" av aws kms create-alias --alias-name alias/$KEYNAME \ --target-key-id $KEYID --region $REGION コマンド
 


Slide 9

Slide 9 text

作成したCMK、 エイリアスの確認 最後に作成したCMKのエイリアスと設定 内容を確認する。 #作成したCKMにエイリアスが作成されて、適切な設定が行われているか確認する。 echo -e "\U2705KMSキー確認" av aws kms list-aliases --key-id ${KEYID} > $OUTPUT コマンド
 
 実行結果

Slide 10

Slide 10 text

しかしここで失敗する。。 ・フランクフルトリージョンまで上手くいっていたが、中国で何故かスクリプトが失 敗する。。
 
 ・調べてみるとキーポリシーの作成で以下の様な記述がありました。
 { "Version": "2012-10-17", "Id": "Key policy created by CloudTrail", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456578910:root" }, "Action": "kms:*", "Resource": "*" },

Slide 11

Slide 11 text

馴染のある方、勘のいい方はお気づきかもしれません。 そう、AWS中国のARNはarn:awsではなくarn:aws-cnでした。 なので、以下の様な処理を追加する必要がありました。 if [ $REGION = "cn-north-1" ]; then sudo sed -i -e "s/arn:aws/arn:aws-cn/" ./key-policy-${SWICHROLE}.json fi

Slide 12

Slide 12 text

まとめ ● TerraformやCFnでも同じような、落とし穴があると思いますので注意が必要だったなと 思いました。
 ○ 中国など慣れない環境は事前調査大事 
 
 ● シェルスクリプト自体の知識が浅く、エラーハンドリングが甘いので深堀し ていきた い。
 
 


Slide 13

Slide 13 text

参考 Qiita: https://qiita.com/kurono/items/b 3362e16a3a396b9b2a7

Slide 14

Slide 14 text

おまけ 以下の様なコマンドを使用するとbashでユニコードを扱うことができます。
 作業してるとテンションが上がります。
 
 echo -e "\U2705KMSキー確認" コマンド
 
 実行結果

Slide 15

Slide 15 text

ご清聴ありがとうございま した