AWS Secrets Managerシークレットを即時削除できるようになりました | Developers.IO

AWS Secrets Managerシークレットを即時削除できるようになりました

3行まとめ

  • AWS Secrets Managerのシークレットが即座削除に対応
  • AWS SDK/CLI は対応。管理コンソールは未対応
  • 即時削除されたシークレットは復旧できない

これまで

本アップデート前までは、シークレットの重要性から、シークレットを即時に削除することはできず、削除までに一定の保留期間が必ず存在しました。

シークレットの持つ重要性から、AWS Secrets Manager ではシークレットの削除を意図的に困難なものにしています。シークレットはすぐに削除することはできません。代わりにすぐにアクセスできなくなり、最短で 7 日間の復旧期間が経過した後に削除スケジュールが設定されます。復旧期間が終了するまで、以前に削除したシークレットを復旧することができます。

https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_delete-restore-secret.html

これから

2018/08/09 のアップデートにより、保留期間を経ずにシークレットを即座に削除できるようになりました。

即時削除されたシークレットは復旧できなくなるため、十分に確認の上、この操作を行ってください。

Secrets Manager シークレットの状態遷移

今回追加されたのは、赤の遷移です。

やってみた

実際にシークレットを作成し

  • 通常削除
  • リストア
  • 即時削除

を実行してみます。

シークレットの作成

まずは key という SecretId のシークレットを作成します。

$ aws secretsmanager create-secret \
  --name key \
  --secret-string value
{
    "VersionId": "ab8671b0-9761-49eb-b580-f84a66121f25",
    "Name": "key",
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef"
}
$ aws secretsmanager describe-secret --secret-id key
{
    "VersionIdsToStages": {
        "ab8671b0-9761-49eb-b580-f84a66121f25": [
            "AWSCURRENT"
        ]
    },
    "Name": "key",
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef",
    "LastChangedDate": 1533976551.112
}

シークレットの通常の削除

7 日の保留期間(--recovery-window-in-days)を経てシークレットを削除します。

$ aws secretsmanager delete-secret \
  --secret-id key \
  --recovery-window-in-days 7
{
    "DeletionDate": 1534584175.599,
    "Name": "key",
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef"
}
$ aws secretsmanager describe-secret --secret-id key
{
    "DeletedDate": 1533979375.609,
    "Name": "key",
    "VersionIdsToStages": {
        "ab8671b0-9761-49eb-b580-f84a66121f25": [
            "AWSCURRENT"
        ]
    },
    "LastChangedDate": 1533979375.618,
    "LastAccessedDate": 1533945600.0,
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef"
}

レスポンスに2種類の削除系日時が存在します。

  • DeletionDate : recovery window 後のシークレットが実際に削除される UNIX TIME
  • DeletedDate : 削除操作を行った UNIX TIME

を表しています。

実際に削除までの日数を確認すると、--recovery-window-in-days 7 と一致しています。

$ python -c 'print((1534584175.599-1533979375.609)/60/60/24)'
6.99999988426

シークレットのリストア

即時削除ではないため、recovery window が経過するまではリストア可能です。

$ aws secretsmanager restore-secret --secret-id key
{
    "Name": "key",
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef"
}
$ aws secretsmanager describe-secret --secret-id key
{
    "VersionIdsToStages": {
        "ab8671b0-9761-49eb-b580-f84a66121f25": [
            "AWSCURRENT"
        ]
    },
    "LastChangedDate": 1533979452.253,
    "LastAccessedDate": 1533945600.0,
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef",
    "Name": "key"
}

リストア後は describe-secret のレスポンスから DeletedDate が消えました。

即時削除

次に、新機能である即時削除を試してみます。

DeleteSecret API に ForceDeleteWithoutRecovery フラグを渡すだけです。

$ aws secretsmanager delete-secret \
  --secret-id key \
  --force-delete-without-recovery
{
    "DeletionDate": 1533979518.8,
    "Name": "key",
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef"
}
$ aws secretsmanager describe-secret --secret-id key
{
    "DeletedDate": 1533979518.816,
    "Name": "key",
    "VersionIdsToStages": {
        "ab8671b0-9761-49eb-b580-f84a66121f25": [
            "AWSCURRENT"
        ]
    },
    "LastChangedDate": 1533979518.832,
    "LastAccessedDate": 1533945600.0,
    "ARN": "arn:aws:secretsmanager:eu-central-1:123456789012:secret:key-abcdef"
}

レスポンスに2種類の削除系日時が存在します。

削除の保留期間が存在しないため

  • DeletionDate : recovery window 後のシークレットが実際に削除される UNIX TIME
  • DeletedDate : 削除操作を行った UNIX TIME

がほぼ同じです。

即時削除直後は 削除されたシークレットに対して、DescribeSecret 可能でしたが、ほどなく、ResourceNotFoundException エラーが発生しました。

$ aws secretsmanager describe-secret --secret-id key

An error occurred (ResourceNotFoundException) when calling the DescribeSecret operation: Secrets Manager can’t find the specified secret.
$ aws secretsmanager list-secrets
{
    "SecretList": []
}

即時削除されたシークレットはリストアできないことも、確認します。

$ aws secretsmanager restore-secret --secret-id key

An error occurred (ResourceNotFoundException) when calling the RestoreSecret operation: Secrets Manager can’t find the specified secret.

まとめ

Amazon Secrets Managerのシークレットは、すくなくとも7日を経なければ削除できませんでしたが、即座に削除できるようになりました。

検証のために作成したシークレットをすぐに消したい場合には便利です。 ただし、管理コンソールではこの操作に対応しておらず、SDK/CLI を使う必要があります。

即時削除したシークレットは復旧できないため、プロダクションサービスのシークレットに対しては、従来どおり保留期間を設定し、削除予定のシークレットが使われていないことを十分に確認した上で削除してください。

シークレットの利用状況を監視するには、次のようなソリューションを検討ください。

AWS Secrets Manager シークレットの使用を監視する

参考