如何 rename/update 在 AWS 秘密管理器中暂存秘密标签 - java

How to rename/update stage label of secret in AWS secret manager - java

我将我的密钥存储在 aws 密钥管理器中。 旋转后它有 2 个阶段标签 AWSCURRENT 和 AWSPREVIOUS

我们可以 update/rename AWSPREVIOUS 到 TESTJK 我试过下面的代码,我没有抛出任何错误,但它没有按照我的预期进行

我期待什么

将 AWSPREVIOUS 重命名为 TESTJK 并保持秘密值不变

        GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest().withSecretId(secretKey)
            .withVersionStage("AWSPREVIOUS");
        GetSecretValueResult getSecretValueResult = client.getSecretValue(getSecretValueRequest);

        log.info("jkdata ww {}", getSecretValueResult.getSecretString());
        log.info("verison id{}", getSecretValueResult.getVersionId());

        UpdateSecretVersionStageRequest updateSecretVersionStageRequest = new UpdateSecretVersionStageRequest()
            .withSecretId(secretKey)
            .withMoveToVersionId(getSecretValueResult.getVersionId())
            .withRemoveFromVersionId(getSecretValueResult.getVersionId());
        client.updateSecretVersionStage(updateSecretVersionStageRequest).setName("TESTJK");

预期结果:

它会将 AWSPREVIOUS 重命名为 TESTJK,所以下次如果我使用 AWSPREVIOUS 进行查询,我会得到错误,如果我使用 TESTJK 进行查询,我应该会得到秘密值。

当前:我正在获取 AWSPREVIOUS 的值,但获取 TESTJK 的错误

com.amazonaws.services.secretsmanager.model.ResourceNotFoundException: Secrets Manager can’t find the specified secret value for staging label: TESTJK (Service: AWSSecretsManager; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: 4c15706e-e1bd-424a-ba03-4914e6523a34)

这需要两次 api 请求。第一个获取 AWSPREVIOUS 的版本 ID 并将其分配给 'TESTJK':

GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest()
.withSecretId(secretKey)
.withVersionStage("AWSPREVIOUS");

GetSecretValueResult getSecretValueResult = client.getSecretValue(getSecretValueRequest);

UpdateSecretVersionStageRequest updateSecretVersionStageRequest = new UpdateSecretVersionStageRequest()
            .withSecretId(secretKey)
            .withVersionStage("TESTJK")
            .withMoveToVersionId(getSecretValueResult.getVersionId())
        client.updateSecretVersionStage(updateSecretVersionStageRequest);

此时,您可以让两个阶段与同一个 versionId 关联,或者您可以删除 AWSPREVIOUS 版本阶段:

UpdateSecretVersionStageRequest updateSecretVersionStageRequest = new UpdateSecretVersionStageRequest()
            .withSecretId(secretKey)
            .withVersionStage("AWSPREVIOUS")
            .withRemoveFromVersionId(getSecretValueResult.getVersionId())
        client.updateSecretVersionStage(updateSecretVersionStageRequest);