问题描述:使用AWS CloudFormation时,通过Secret Manager动态引用一个密钥时,无法获得正确的返回值。
解决方法:
Resources:
MySecretValue:
Type: AWS::SecretsManager::Secret
Properties:
Name: MySecret
GenerateSecretString:
SecretStringTemplate: '{"username":"admin"}'
GenerateStringKey: "password"
PasswordLength: 16
ExcludePunctuation: true
Outputs:
MySecretOutput:
Value: !Ref MySecretValue
!GetAtt
函数获取密钥的特定属性。例如:Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket
AccessControl: Private
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
KMSMasterKeyID: !GetAtt MySecretValue.Arn
在上面的示例中,!GetAtt MySecretValue.Arn
表示获取密钥的ARN属性,并将其用作S3存储桶的KMS主密钥ID。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret*"
]
}
]
}
请将上面的ARN替换为你的密钥的ARN。
通过以上步骤,你应该能够成功引用和使用Secret Manager中的密钥。