[JAWS-UG CLI] Amazon KMS 入門 (6) カスタマーマスターキー（＋他）の削除

# このハンズオンについて

この手順は、[JAWS-UG CLI専門支部 #58 KMS入門](https://manage.doorkeeper.jp/groups/jawsug-cli/events/41911)で実施したものです。


# 前提条件

## 必要な権限

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

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


# 0. 準備

## 0.1. リージョンを指定

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

## 0.2. 資格情報を確認


```bash:コマンド
aws configure list
```

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

```text:結果
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. バージョン確認

```bash:コマンド
aws --version
```

```text:結果
aws-cli/1.10.56 Python/2.7.10 Linux/4.4.15-25.57.amzn1.x86_64 botocore/1.4.46
```

## 0.4. バージョンアップ（必要に応じて）

```bash:コマンド
sudo pip install -U awscli
```

## 0.5. 変数の設定

```bash:コマンド
ADMIN_NAME='jawsug-cli-admin'

USER_NAME='jawsug-cli-user'

ARN_S3='arn:aws:iam::aws:policy/AmazonS3FullAccess'

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. S3バケットの削除

## 1.0 ユーザの切り替え

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

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

```bash:コマンド
unset AWS_DEFAULT_PROFILE
```

```bash:コマンド
aws configure list
```

```text:結果
      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
```

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

```bash:コマンド
export AWS_DEFAULT_PROFILE='（切り替え前のプロファイル名）'
```

```bash:コマンド
aws configure list
```


## 1.1. S3バケットの削除（パラメータの確認）

```bash:コマンド
cat << ETX

    BUCKET_NAME: ${BUCKET_NAME}

ETX
```

```text:結果

    BUCKET_NAME: kms-test-************

```

## 1.2. S3バケットの削除

```bash:コマンド
aws s3 rb s3://${BUCKET_NAME} \
    --force
```

```text:結果
delete: s3://kms-test-************/test.txt
remove_bucket: s3://kms-test-************/
```


# 2. カスタマーマスターキーの削除

## 2.1. カスタマーマスターキーの削除（パラメータの確認）

```bash:コマンド
cat << ETX

    KEY_ID: ${KEY_ID}

ETX
```

```text:結果

    KEY_ID: ********-****-****-****-************

```


## 2.2. カスタマーマスターキーの削除

削除保留期間は7日が最小値です。

http://docs.aws.amazon.com/cli/latest/reference/kms/schedule-key-deletion.html

```bash:コマンド
aws kms schedule-key-deletion \
    --key-id ${KEY_ID} \
    --pending-window-in-days 7
```

```json:結果
{
    "KeyId": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
    "DeletionDate": 1471219200.0
}
```

## 2.3. カスタマーマスターキーの削除（確認）

KeyStateが変わるまでに少々時間がかかるようです。

PendingDeletionになっていれば成功です。

```bash:コマンド
aws kms describe-key \
    --key-id ${KEY_ID}
```

```json:結果
{
    "KeyMetadata": {
        "KeyId": "********-****-****-****-************",
        "Description": "JAWS-UG CLI 58 KMS at Co-Edo",
        "DeletionDate": 1471219200.0,
        "Enabled": false,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "PendingDeletion",
        "CreationDate": 1470540911.677,
        "Arn": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
        "AWSAccountId": "************"
    }
}
```

# 3. IAMユーザの削除

## 3.1. 変数の確認

```bash:コマンド
cat << ETX

    ADMIN_NAME: ${ADMIN_NAME}
    USER_NAME: ${USER_NAME}

ETX
```


```text:結果

    ADMIN_NAME: jawsug-cli-admin
    USER_NAME: jawsug-cli-user

```

## 3.2. アクセスキーの削除

```bash:コマンド
aws iam delete-access-key \
    --user-name ${ADMIN_NAME} \
    --access-key-id "$(cat ${ADMIN_NAME}.json | jq -r .AccessKey.AccessKeyId)"
```

```text:結果
（戻り値無し）
```

```bash:コマンド
aws iam delete-access-key \
    --user-name ${USER_NAME} \
    --access-key-id "$(cat ${USER_NAME}.json | jq -r .AccessKey.AccessKeyId)"
```

```text:結果
（戻り値無し）
```

## 3.3. Managed Policyのデタッチ

```bash:コマンド
aws iam detach-user-policy \
    --user-name ${USER_NAME} \
    --policy-arn ${ARN_S3}
```

```text:結果
（戻り値無し）
```

## 3.4. IAMユーザの削除

```bash:コマンド
aws iam delete-user \
    --user-name ${ADMIN_NAME}
```

```text:結果
（戻り値無し）
```

```bash:コマンド
aws iam delete-user \
    --user-name ${USER_NAME}
```

```text:結果
（戻り値無し）
```

## 3.5. 確認


```bash:コマンド
aws iam get-user \
    --user-name ${ADMIN_NAME}
```

```text:結果
An error occurred (NoSuchEntity) when calling the GetUser operation: The user with name jawsug-cli-admin cannot be found.
```


```bash:コマンド
aws iam get-user \
    --user-name ${USER_NAME}
```

```text:結果
An error occurred (NoSuchEntity) when calling the GetUser operation: The user with name jawsug-cli-user cannot be found.
```

以上

お疲れ様でした。