このハンズオンについて
この手順は、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
以上