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

[JAWS-UG CLI] Amazon KMS 入門 (5) カスタマーマスターキーの無効化と有効化

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'
ADMINS_PROFILE_NAME=${ADMIN_NAME}

USER_NAME='jawsug-cli-user'
USERS_PROFILE_NAME=${USER_NAME}

DATA_FILE='test.txt'
DOWNLOADED_DATA_FILE='test_downloaded.txt'
CIPHER_DATA_KEY_FILE_NAME='ciphertext_blob.txt'

AWS_ID=$(aws sts get-caller-identity \
    --query Account \
    --output text) \
    && echo ${AWS_ID}

BUCKET_NAME="kms-test-${AWS_ID}" \
    && echo ${BUCKET_NAME}

ALIAS="alias/cli-handson0815"

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

1. カスタマーマスターキーの無効化

1.1. ステータスの確認

コマンド
aws kms describe-key \
    --key-id ${KEY_ID}
結果
{
    "KeyMetadata": {
        "KeyId": "********-****-****-****-************",
        "Description": "JAWS-UG CLI 58 KMS at Co-Edo",
        "Enabled": true,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1470043623.442,
        "Arn": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
        "AWSAccountId": "************"
    }
}

1.2. 変数の確認

コマンド
cat << ETX

    KEY_ID: ${KEY_ID}

ETX
結果
    KEY_ID: ********-****-****-****-************

1.3. カスタマーマスターキーの無効化

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

1.4. ステータスの確認

コマンド
aws kms describe-key \
    --key-id ${KEY_ID}
結果
{
    "KeyMetadata": {
        "KeyId": "********-****-****-****-************",
        "Description": "JAWS-UG CLI 58 KMS at Co-Edo",
        "Enabled": false,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Disabled",
        "CreationDate": 1470043623.442,
        "Arn": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
        "AWSAccountId": "************"
    }
}

2. データの復号化の試行

2.1. プロファイルの切り替え

CMKを無効化したことを確認するため、一般ユーザにプロファイルに切り替えます。

コマンド
export AWS_DEFAULT_PROFILE=${USERS_PROFILE_NAME}

2.2. プロファイルの確認

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

2.3. データキーの復号化

カスタマーマスターキーが無効なため、復号化できません。

コマンド
aws kms decrypt \
    --ciphertext-blob fileb://${CIPHER_DATA_KEY_FILE_NAME} \
    --query Plaintext \
    --output text
結果
An error occurred (DisabledException) when calling the Decrypt operation: arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************ is disabled.

3. S3からファイルのダウンロードを試行

カスタマーマスターキーが無効なため、ダウンロードできません。

3.1. S3からファイルのダウンロード

コマンド
aws s3 cp s3://${BUCKET_NAME}/${DATA_FILE} ${DOWNLOADED_DATA_FILE}
結果
download failed: s3://kms-test-************/test.txt to ./test_downloaded.txt An error occurred (KMS.DisabledException) when calling the GetObject operation: arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************ is disabled.

4. カスタマーマスターキーの有効化

CMKを再度有効化し、データキーの復号化やS3からのダウンロードができるようになることを確認します。

4.1. プロファイルの切り替え

コマンド
export AWS_DEFAULT_PROFILE=${ADMINS_PROFILE_NAME}

4.2. プロファイルの確認

コマンド
aws configure list
結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile         jawsug-cli-admin           manual    --profile
access_key     ****************2RPA shared-credentials-file
secret_key     ****************cbKk shared-credentials-file
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

4.3. ステータスの確認

コマンド
aws kms describe-key \
    --key-id ${KEY_ID}
結果
{
    "KeyMetadata": {
        "KeyId": "********-****-****-****-************",
        "Description": "JAWS-UG CLI 58 KMS at Co-Edo",
        "Enabled": false,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Disabled",
        "CreationDate": 1470540911.677,
        "Arn": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
        "AWSAccountId": "************"
    }
}

4.4. 変数の確認

コマンド
cat << ETX

    KEY_ID: ${KEY_ID}

ETX
結果
    KEY_ID: ********-****-****-****-************

4.5. カスタマーマスターキーの有効化

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

4.6. ステータスの確認

反映に少し時間がかかるようです。

コマンド
aws kms describe-key \
    --key-id ${KEY_ID}
結果
{
    "KeyMetadata": {
        "KeyId": "********-****-****-****-************",
        "Description": "JAWS-UG CLI 58 KMS at Co-Edo",
        "Enabled": true,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1470540911.677,
        "Arn": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
        "AWSAccountId": "************"
    }
}

5. データの復号化の試行

5.1. プロファイルの切り替え

コマンド
export AWS_DEFAULT_PROFILE=${USERS_PROFILE_NAME}

5.2. プロファイルの確認

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

5.3. データキーの復号化

コマンド
aws kms decrypt \
    --ciphertext-blob fileb://${CIPHER_DATA_KEY_FILE_NAME}
結果
{
    "Plaintext": "********************************************",
    "KeyId": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************"
}

6. S3からファイルのダウンロードを試行

6.1. S3からファイルのダウンロード

コマンド
aws s3 cp s3://${BUCKET_NAME}/${DATA_FILE} ${DOWNLOADED_DATA_FILE}
結果
download: s3://kms-test-************/test.txt to ./test_downloaded.txt

以上

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