Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] Amazon KMS 入門 (4) カスタマーマスターキーのローテーション

More than 3 years have passed since last update.

このハンズオンについて

この手順は、JAWS-UG CLI専門支部 #58 KMS入門で実施したものです。

前提条件

必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

  • KMSに対するフルコントロール権限
  • S3に関するフルコントロール権限
  • STSに関するフルコントロール権限
  • IAMに関するフルコントロール権限

0. 準備

0.1. リージョンを指定

コマンド
export AWS_DEFAULT_REGION='ap-northeast-1'

0.2. 資格情報を確認

コマンド
aws configure list

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

結果
Name                    Value             Type    Location
----                    -----             ----    --------
profile                <not set>             None    None
access_key     ****************RDPA         iam-role
secret_key     ****************9GA8         iam-role
region           ap-northeast-1              env    AWS_DEFAULT_REGION

0.3. バージョン確認

コマンド
aws --version
結果
aws-cli/1.10.56 Python/2.7.10 Linux/4.4.15-25.57.amzn1.x86_64 botocore/1.4.46

0.4. バージョンアップ(必要に応じて)

コマンド
sudo pip install -U awscli

0.5. 変数の設定

コマンド
ADMIN_NAME='jawsug-cli-admin'

ALIAS="alias/cli-handson0815"

KEY_ID=$(aws kms list-aliases \
    --query "Aliases[?AliasName == \`${ALIAS}\`].TargetKeyId" \
    --output text) \
    && echo ${KEY_ID}

1. 管理者情報の認証情報取得

管理者ユーザの認証情報を生成し、プロファイルとして設定します。

1.0 ユーザの切り替え

ここで、最初に利用していた認証情報に切り替えます。

インスタンスプロファイルを利用していた場合は、環境変数をリセットしてください。

コマンド
unset AWS_DEFAULT_PROFILE
コマンド
aws configure list
結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************EPRQ         iam-role
secret_key     ****************RQyb         iam-role
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

別のプロファイルを利用していた場合には、プロファイルを切り替えてください。

コマンド
export AWS_DEFAULT_PROFILE='(切り替え前のプロファイル名)'
コマンド
aws configure list

1.1. access keyの作成と取得

変数の確認

コマンド
cat << ETX

    ADMIN_NAME: ${ADMIN_NAME}

ETX
結果
    ADMIN_NAME: jawsug-cli-admin

access keyの作成と取得

コマンド
aws iam create-access-key \
    --user-name ${ADMIN_NAME} \
    > ${ADMIN_NAME}.json \
    && cat ${ADMIN_NAME}.json
結果
{
    "AccessKey": {
        "UserName": "jawsug-cli-admin",
        "Status": "Active",
        "CreateDate": "2016-08-06T05:55:49.222Z",
        "SecretAccessKey": "****************************************",
        "AccessKeyId": "********************"
    }
}

アクセスキーの抽出

コマンド
ADMIN_ACCESS_KEY=$( \
    cat ${ADMIN_NAME}.json \
    | jp.py 'AccessKey.AccessKeyId' \
    | sed 's/"//g') \
    && echo ${ADMIN_ACCESS_KEY}

ADMIN_SECRET_ACCESS_KEY=$( \
    cat ${ADMIN_NAME}.json \
    | jp.py 'AccessKey.SecretAccessKey' \
    | sed 's/"//g') \
    && echo ${ADMIN_SECRET_ACCESS_KEY}

1.2. プロファイル名の指定

同じ名前のプロファイルを使用していないことを確認してください。

コマンド
ADMINS_PROFILE_NAME=${ADMIN_NAME}

1.3. プロファイルの確認

プロファイル名が未使用であることを確認します。

コマンド
aws configure get aws_access_key_id \
    --profile ${ADMINS_PROFILE_NAME}
結果
The config profile (jawsug-cli-admin) could not be found
コマンド
aws configure get aws_secret_access_key \
    --profile ${ADMINS_PROFILE_NAME}
結果
The config profile (jawsug-cli-admin) could not be found
コマンド
aws configure get region \
    --profile ${ADMINS_PROFILE_NAME}
結果
The config profile (jawsug-cli-admin) could not be found

1.4. プロファイルの作成

変数の確認

コマンド
cat << ETX

    ADMIN_NAME: ${ADMIN_NAME}
    ACCESS_KEY: ${ADMIN_ACCESS_KEY}
    SECRET_ACCESS_KEY: ${ADMIN_SECRET_ACCESS_KEY}
    REGION: ${AWS_DEFAULT_REGION}

ETX
結果
    ADMIN_NAME: jawsug-cli-admin
    ACCESS_KEY: ********************
    SECRET_ACCESS_KEY: ***********************************
    REGION: ap-northeast-1

プロファイルの作成

コマンド
aws configure set aws_access_key_id ${ADMIN_ACCESS_KEY} \
    --profile ${ADMINS_PROFILE_NAME}
結果
(戻り値無し)
コマンド
aws configure set aws_secret_access_key ${ADMIN_SECRET_ACCESS_KEY} \
    --profile ${ADMINS_PROFILE_NAME}
結果
(戻り値無し)
コマンド
aws configure set region ${AWS_DEFAULT_REGION} \
    --profile ${ADMINS_PROFILE_NAME}
結果
(戻り値無し)

1.5. 認証情報の確認(.aws/credentials)

コマンド
cat ~/.aws/credentials
結果(例)
[jawsug-cli-user]
aws_access_key_id = ********************
aws_secret_access_key = ***********************************
[jawsug-cli-admin]
aws_access_key_id = ********************
aws_secret_access_key = ***********************************

1.6. 認証情報の確認(.aws/config)

コマンド
cat ~/.aws/config
結果(例)
[profile jawsug-cli-user]
region = ap-northeast-1
s3 =
    signature_version = s3v4
[profile jawsug-cli-admin]
region = ap-northeast-1

2. ユーザの切り替え

2.1. 現在のユーザの確認

あとで現在の状態に戻るため、結果を控えておいてください。(以下の結果は、インスタンスプロファイルを利用している場合)

コマンド
aws configure list
結果(例)
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************CIIA         iam-role
secret_key     ****************wGIk         iam-role
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

2.2. 切替後ユーザの確認

コマンド
cat << ETX

    ADMINS_PROFILE_NAME: ${ADMINS_PROFILE_NAME}

ETX
結果
    ADMINS_PROFILE_NAME: jawsug-cli-admin

2.3. ユーザの切り替え

コマンド
export AWS_DEFAULT_PROFILE=${ADMINS_PROFILE_NAME}

2.4. 認証情報の確認

コマンド
aws configure list
結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile          jawsug-cli-user           manual    --profile
access_key     ****************QNVA shared-credentials-file
secret_key     ****************fTJ+ shared-credentials-file
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

3. キーのローテーション

任意の周期でローテーションさせることはできないようです。

3.1. 設定の確認

コマンド
aws kms get-key-rotation-status \
    --key-id ${KEY_ID}
結果
{
    "KeyRotationEnabled": false
}

3.2. ローテーションの有効化

コマンド
aws kms enable-key-rotation \
    --key-id  ${KEY_ID}
結果
(戻り値無し)

3.3. 設定の確認

コマンド
aws kms get-key-rotation-status \
    --key-id ${KEY_ID}
結果
{
    "KeyRotationEnabled": true
}

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away