UpdateSecret
Modifies the details of a secret, including metadata and the secret value. To change the secret value, you can also use PutSecretValue.
To change the rotation configuration of a secret, use RotateSecret instead.
To change a secret so that it is managed by another service, you need to recreate the secret in that service. See Secrets Manager secrets managed by other AWS services.
We recommend you avoid calling UpdateSecret
at a sustained rate of more than
once every 10 minutes. When you call UpdateSecret
to update the secret value, Secrets Manager creates a new version
of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not
remove versions created less than 24 hours ago. If you update the secret value more
than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach
the quota for secret versions.
If you include SecretString
or SecretBinary
to create a new
secret version, Secrets Manager automatically moves the staging label AWSCURRENT
to the new
version. Then it attaches the label AWSPREVIOUS
to the version that AWSCURRENT
was removed from.
If you call this operation with a ClientRequestToken
that matches an existing version's
VersionId
, the operation results in an error. You can't modify an existing
version, you can only create a new version. To remove a version, remove all staging labels from it. See
UpdateSecretVersionStage.
Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary
or SecretString
because it might be logged. For more information, see Logging Secrets Manager events with AWS CloudTrail.
Required permissions:
secretsmanager:UpdateSecret
.
For more information, see
IAM policy actions for Secrets Manager and Authentication
and access control in Secrets Manager.
If you use a customer managed key, you must also have kms:GenerateDataKey
, kms:Encrypt
, and
kms:Decrypt
permissions on the key. If you change the KMS key and you don't have kms:Encrypt
permission to the new key, Secrets Manager does not re-encrypt existing secret versions with the new key. For more information, see
Secret encryption and decryption.
Important
When you enter commands in a command shell, there is a risk of the command history being accessed or utilities having access to your command parameters. This is a concern if the command includes the value of a secret. Learn how to Mitigate the risks of using command-line tools to store AWS Secrets Manager secrets.
Request Syntax
{
"ClientRequestToken": "string
",
"Description": "string
",
"KmsKeyId": "string
",
"SecretBinary": blob
,
"SecretId": "string
",
"SecretString": "string
"
}
Request Parameters
For information about the parameters that are common to all actions, see Common Parameters.
The request accepts the following data in JSON format.
- ClientRequestToken
-
If you include
SecretString
orSecretBinary
, then Secrets Manager creates a new version for the secret, and this parameter specifies the unique identifier for the new version.Note
If you use the AWS CLI or one of the AWS SDKs to call this operation, then you can leave this parameter empty. The CLI or SDK generates a random UUID for you and includes it as the value for this parameter in the request.
If you generate a raw HTTP request to the Secrets Manager service endpoint, then you must generate a
ClientRequestToken
and include it in the request.This value helps ensure idempotency. Secrets Manager uses this value to prevent the accidental creation of duplicate versions if there are failures and retries during a rotation. We recommend that you generate a UUID-type
value to ensure uniqueness of your versions within the specified secret. Type: String
Length Constraints: Minimum length of 32. Maximum length of 64.
Required: No
- Description
-
The description of the secret.
Type: String
Length Constraints: Maximum length of 2048.
Required: No
- KmsKeyId
-
The ARN, key ID, or alias of the KMS key that Secrets Manager uses to encrypt new secret versions as well as any existing versions with the staging labels
AWSCURRENT
,AWSPENDING
, orAWSPREVIOUS
. If you don't havekms:Encrypt
permission to the new key, Secrets Manager does not re-encrypt existing secret versions with the new key. For more information about versions and staging labels, see Concepts: Version.A key alias is always prefixed by
alias/
, for examplealias/aws/secretsmanager
. For more information, see About aliases.If you set this to an empty string, Secrets Manager uses the AWS managed key
aws/secretsmanager
. If this key doesn't already exist in your account, then Secrets Manager creates it for you automatically. All users and roles in the AWS account automatically have access to useaws/secretsmanager
. Creatingaws/secretsmanager
can result in a one-time significant delay in returning the result.Important
You can only use the AWS managed key
aws/secretsmanager
if you call this operation using credentials from the same AWS account that owns the secret. If the secret is in a different account, then you must use a customer managed key and provide the ARN of that KMS key in this field. The user making the call must have permissions to both the secret and the KMS key in their respective accounts.Type: String
Length Constraints: Minimum length of 0. Maximum length of 2048.
Required: No
- SecretBinary
-
The binary data to encrypt and store in the new version of the secret. We recommend that you store your binary data in a file and then pass the contents of the file as a parameter.
Either
SecretBinary
orSecretString
must have a value, but not both.You can't access this parameter in the Secrets Manager console.
Sensitive: This field contains sensitive information, so the service does not include it in AWS CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field.
Type: Base64-encoded binary data object
Length Constraints: Minimum length of 1. Maximum length of 65536.
Required: No
- SecretId
-
The ARN or name of the secret.
For an ARN, we recommend that you specify a complete ARN rather than a partial ARN. See Finding a secret from a partial ARN.
Type: String
Length Constraints: Minimum length of 1. Maximum length of 2048.
Required: Yes
- SecretString
-
The text data to encrypt and store in the new version of the secret. We recommend you use a JSON structure of key/value pairs for your secret value.
Either
SecretBinary
orSecretString
must have a value, but not both.Sensitive: This field contains sensitive information, so the service does not include it in AWS CloudTrail log entries. If you create your own log entries, you must also avoid logging the information in this field.
Type: String
Length Constraints: Minimum length of 1. Maximum length of 65536.
Required: No
Response Syntax
{
"ARN": "string",
"Name": "string",
"VersionId": "string"
}
Response Elements
If the action is successful, the service sends back an HTTP 200 response.
The following data is returned in JSON format by the service.
- ARN
-
The ARN of the secret that was updated.
Type: String
Length Constraints: Minimum length of 20. Maximum length of 2048.
- Name
-
The name of the secret that was updated.
Type: String
Length Constraints: Minimum length of 1. Maximum length of 256.
- VersionId
-
If Secrets Manager created a new version of the secret during this operation, then
VersionId
contains the unique identifier of the new version.Type: String
Length Constraints: Minimum length of 32. Maximum length of 64.
Errors
For information about the errors that are common to all actions, see Common Errors.
- DecryptionFailure
-
Secrets Manager can't decrypt the protected secret text using the provided KMS key.
HTTP Status Code: 400
- EncryptionFailure
-
Secrets Manager can't encrypt the protected secret text using the provided KMS key. Check that the KMS key is available, enabled, and not in an invalid state. For more information, see Key state: Effect on your KMS key.
HTTP Status Code: 400
- InternalServiceError
-
An error occurred on the server side.
HTTP Status Code: 500
- InvalidParameterException
-
The parameter name or value is invalid.
HTTP Status Code: 400
- InvalidRequestException
-
A parameter value is not valid for the current state of the resource.
Possible causes:
-
The secret is scheduled for deletion.
-
You tried to enable rotation on a secret that doesn't already have a Lambda function ARN configured and you didn't include such an ARN as a parameter in this call.
-
The secret is managed by another service, and you must use that service to update it. For more information, see Secrets managed by other AWS services.
HTTP Status Code: 400
-
- LimitExceededException
-
The request failed because it would exceed one of the Secrets Manager quotas.
HTTP Status Code: 400
- MalformedPolicyDocumentException
-
The resource policy has syntax errors.
HTTP Status Code: 400
- PreconditionNotMetException
-
The request failed because you did not complete all the prerequisite steps.
HTTP Status Code: 400
- ResourceExistsException
-
A resource with the ID you requested already exists.
HTTP Status Code: 400
- ResourceNotFoundException
-
Secrets Manager can't find the resource that you asked for.
HTTP Status Code: 400
Examples
Example
The following example shows how to change the description of a secret. The JSON request string input and response output displays formatted code with white space and line breaks for better readability. Submit your input as a single line JSON string.
Sample Request
POST / HTTP/1.1
Host: secretsmanager.region.domain
Accept-Encoding: identity
X-Amz-Target: secretsmanager.UpdateSecret
Content-Type: application/x-amz-json-1.1
User-Agent: <user-agent-string>
X-Amz-Date: <date>
Authorization: AWS4-HMAC-SHA256 Credential=<credentials>,SignedHeaders=<headers>, Signature=<signature>
Content-Length: <payload-size-bytes>
{
"SecretId": "MyTestDatabaseSecret",
"Description": "This is a new description for the secret.",
"ClientRequestToken": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE"
}
Sample Response
HTTP/1.1 200 OK
Date: <date>
Content-Type: application/x-amz-json-1.1
Content-Length: <response-size-bytes>
Connection: keep-alive
x-amzn-RequestId: <request-id-guid>
{
"ARN":"arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3",
"Name":"MyTestDatabaseSecret"
}
Example
This example shows how to update the KMS key that Secrets Manager uses to encrypt the secret value. The KMS key must be in the same Region as the secret. The JSON request string input and response output displays formatted code with white space and line breaks for better readability. Submit your input as a single line JSON string.
Sample Request
POST / HTTP/1.1
Host: secretsmanager.region.domain
Accept-Encoding: identity
X-Amz-Target: secretsmanager.UpdateSecret
Content-Type: application/x-amz-json-1.1
User-Agent: <user-agent-string>
X-Amz-Date: <date>
Authorization: AWS4-HMAC-SHA256 Credential=<credentials>,SignedHeaders=<headers>, Signature=<signature>
Content-Length: <payload-size-bytes>
{
"SecretId": "MyTestDatabaseSecret",
"KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE"
}
Sample Response
HTTP/1.1 200 OK
Date: <date>
Content-Type: application/x-amz-json-1.1
Content-Length: <response-size-bytes>
Connection: keep-alive
x-amzn-RequestId: <request-id-guid>
{
"ARN":"arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3",
"Name":"MyTestDatabaseSecret"
}
Example
The following example shows how to create a new version of the secret by updating the
SecretString
field. The ClientRequestToken
parameter becomes
the VersionId
of the new version. Alternatively, you can use the PutSecretValue operation. The JSON request string input and response output displays formatted code
with white space and line breaks for better readability. Submit your input as a single line
JSON string.
Sample Request
POST / HTTP/1.1
Host: secretsmanager.region.domain
Accept-Encoding: identity
X-Amz-Target: secretsmanager.UpdateSecret
Content-Type: application/x-amz-json-1.1
User-Agent: <user-agent-string>
X-Amz-Date: <date>
Authorization: AWS4-HMAC-SHA256 Credential=<credentials>,SignedHeaders=<headers>, Signature=<signature>
Content-Length: <payload-size-bytes>
{
"SecretId": "MyTestDatabaseSecret",
"SecretString": "{<JSON STRING WITH CREDENTIALS>}",
"ClientRequestToken": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"
}
Sample Response
HTTP/1.1 200 OK
Date: <date>
Content-Type: application/x-amz-json-1.1
Content-Length: <response-size-bytes>
Connection: keep-alive
x-amzn-RequestId: <request-id-guid>
{
"ARN":"arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3",
"Name":"MyTestDatabaseSecret",
"VersionId":"EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"
}
See Also
For more information about using this API in one of the language-specific AWS SDKs, see the following: