Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CLIでCMKを沢山作ってみたら 困ったこと

AWS CLIでCMKを沢山作ってみたら 困ったこと

Yuki_Kurono

July 25, 2022
Tweet

More Decks by Yuki_Kurono

Other Decks in Programming

Transcript

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

    View Slide

  2. 自己紹介
    名前 黒野 雄稀
    AWS歴 

    ・約3年

    ・2022 APN ALL AWS Certifications Engineer

    所属 アイレット株式会社
    普段の業務

    ・基幹系インフラ構築

    ・システム運用構築


    View Slide

  3. 背景
    CloudTrail皆さん使っていますか?



    今回は複数のAWSアカウント(約16アカウント)でCloudTrailの有効化に伴い、

    CMKの作成が必要となりました。


    コンソールで作るのは流石に大変。。ということでAWS CLIを使ってCMKを作成

    してみました。


    View Slide

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

    View Slide

  5. スクリプト概要

    View Slide

  6. 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)
    コマンド


    View Slide

  7. キーポリシー
    ファイル作成
    ベースとなるポリシーファイルを
    用意して、固有情報(アカウント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
    コマンド


    View Slide

  8. 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
    コマンド


    View Slide

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


    実行結果

    View Slide

  10. しかしここで失敗する。。
    ・フランクフルトリージョンまで上手くいっていたが、中国で何故かスクリプトが失 敗する。。


    ・調べてみるとキーポリシーの作成で以下の様な記述がありました。

    {
    "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": "*"
    },

    View Slide

  11. 馴染のある方、勘のいい方はお気づきかもしれません。
    そう、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

    View Slide

  12. まとめ
    ● TerraformやCFnでも同じような、落とし穴があると思いますので注意が必要だったなと
    思いました。

    ○ 中国など慣れない環境は事前調査大事


    ● シェルスクリプト自体の知識が浅く、エラーハンドリングが甘いので深堀し ていきた
    い。



    View Slide

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

    View Slide

  14. おまけ
    以下の様なコマンドを使用するとbashでユニコードを扱うことができます。

    作業してるとテンションが上がります。


    echo -e "\U2705KMSキー確認"
    コマンド


    実行結果

    View Slide

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

    View Slide