我希望使用 AWS 秘密管理器来存储我的 RDS 密码。我已经在秘密管理器中创建了数据库条目,没有任何旋转选项,现在我只想保存密码并从本地检索它,以便我可以用它来测试应用程序。我正在尝试使用以下代码检索密码
import boto3
import base64
from botocore.exceptions import ClientError
session = boto3.session.Session(aws_access_key_id,aws_secret_access_key)
client = session.client('secretsmanager', region_name='Region')
get_secret_value_response = client.get_secret_value(SecretId='DBName')
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误
An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:iam::12345678910:user/user is not authorized to perform: secretsmanager:GetSecretValue on resource: DBName
Run Code Online (Sandbox Code Playgroud)
我还尝试添加 IAM 策略,认为可能会修复该问题,但无法这样做,我不断收到“此策略包含语法错误”消息
{
"Version":"2012-10-17",
"Statement": [
{
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:region:12345678910:secret:DatabaseSecret",
"Effect": "Allow"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我试图了解这里出了什么问题。感谢任何帮助。
我试图包装示例代码片段以获取函数中的秘密,然后调用它,但它似乎不起作用。我怀疑我是异步调用它,我需要同步调用它?我只想要一个可以调用的函数来获取一个秘密值并将其放入一个 var 中。
这是功能:
//outside exports.handler = (event, context, callback) => {
function getSecret(secretName) {
// Load the AWS SDK
var AWS = require('aws-sdk'),
region = process.env.AWS_REGION,
secretName = secretName,
secret,
decodedBinarySecret;
// Create a Secrets Manager client
var client = new AWS.SecretsManager({
region: region
});
// In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
// See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
// We rethrow the exception by default.
client.getSecretValue({SecretId: secretName}, function(err, data) {
if (err) {
if (err.code …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 AWS 中使用 Secrets Manager 一个 Lambda 函数。管理器用于将数据库凭据存储到 Snowflake(用户名、密码)的机密。
我设法在 Secrets Manager 中设置了一个秘密,其中包含几个键/值对(例如一个用于用户名,另一个用于密码)。
现在我试图在我的 Python 函数代码中引用这些值。AWS 文档友好地提供了以下代码段:
import boto3
import base64
from botocore.exceptions import ClientError
def get_secret():
secret_name = "MY/SECRET/NAME"
region_name = "us-west-2"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
# In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
# See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
# We rethrow the exception by default.
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError …
Run Code Online (Sandbox Code Playgroud) 编辑:截至 2020 年 2 月,AWS 似乎已修复此错误。不再需要 BASE64ing 和其他明智的选择。
我将我的秘密存储为字符串,但当然,当 aws 存储秘密时,它会删除空格和换行符。最重要的是,它将值包装在 json 中。
当我运行aws secretsmanager get-secret-value --secret-id my-private-key > private.pem
它返回类似的东西。
{
"Name": "ai-data-devops-ansible-deploy-key",
"VersionId": "fedafe24-d3eb-4964-9a8f-7f4ecb375a35",
"SecretString": "-----BEGIN RSA PRIVATE KEY-----\nasdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=\n-----END RSA PRIVATE KEY-----\n",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": 1568147513.11,
"ARN": "arn:aws:secretsmanager:us-east-1:13726472r4:secret:my-private-key-XQuwafs"
}
Run Code Online (Sandbox Code Playgroud)
所以我需要:
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud) 我正在使用 AWS Fargate 并使用 Secrets Manager 存储敏感数据。任务定义应该从秘密存储中获取环境变量
- name: "app"
image: "ecr-image:tag"
essential: true
secrets:
- name: "VAR1"
valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-one-secret"
- name: "VAR2"
valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-secret"
- name: "VAR3"
valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-private"
Run Code Online (Sandbox Code Playgroud)
但由于某种原因它失败并出现以下错误
ResourceNotFoundException: Secrets Manager can’t find the specified secret. status code: 400, request id
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点奇怪,因为
此外,IAM 具有获取秘密值的权限
当只留下VAR1
变量时,一切都按预期工作
AWS CLI 能够毫无问题地检索每个密钥
例如
aws secretsmanager get-secret-value --secret-id var-two-secret
Run Code Online (Sandbox Code Playgroud)
我的配置可能有什么问题?任何提示表示赞赏
amazon-web-services amazon-ecs aws-fargate aws-secrets-manager
我有一个密钥 (USRFTP) 存储在帐户 A 中,我想从帐户 B 中具有 ASHISHROLE 角色的 EC2 盒子访问此密钥。我正在运行 python 代码来获取密钥,如下所示,在给定的密钥中使用资源策略下面,KMS策略如下,但仍然遇到这个问题
botocore.exceptions.ClientError:调用 GetSecretValue 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::ACCOUNTB:assumed-role/ASHISHROLE /i-************ 无权对资源执行:secretsmanager:GetSecretValue: arn:aws:secretsmanager:us-east-2:ACCOUNTA:secret:USRFTP-KJHJH
import boto3
import base64
from botocore.exceptions import ClientError
def get_secret():
secret_name = "arn:aws:secretsmanager:us-east-2:ACCOUNTA:secret:USRFTP"
region_name = "us-east-2"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
print("here")
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
if 'SecretString' in get_secret_value_response:
return get_secret_value_response['SecretString']
else:
return base64.b64decode(get_secret_value_response['SecretBinary'])
print(get_secret())
SECRET KEY RESOURCE POLICY
{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" …
Run Code Online (Sandbox Code Playgroud) 我正在通过serverless
. 并且需要在部署期间从secretmanager读取值。我已阅读此文档:https://www.serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-using-the-ssm-parameter-store
它显示了如何阅读它:
custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager~true}
但是,它可用于从秘密管理器读取字符串值。我的秘密是一个包含key/value
成对的对象。我怎样才能读懂key
里面的秘密?
我尝试过这样的事情:
custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager:MY_KEY~true}
custom: supersecret: ${ssm:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager/MY_KEY~true}
但他们都没有工作。
amazon-web-services serverless-framework aws-secrets-manager
我的想法是,我想使用 Terraform 资源aws_secretsmanager_secret
仅创建三个秘密(不是工作区指定的秘密),一个用于开发环境,一个用于 preprod,第三个用于生产环境。
就像是:
resource "aws_secretsmanager_secret" "dev_secret" {
name = "example-secret-dev"
}
resource "aws_secretsmanager_secret" "preprod_secret" {
name = "example-secret-preprod"
}
resource "aws_secretsmanager_secret" "prod_secret" {
name = "example-secret-prod"
}
Run Code Online (Sandbox Code Playgroud)
但是创建它们之后,我不想每次运行“Terraform apply”时都覆盖它们,有没有办法告诉 Terraform 是否存在任何秘密,跳过秘密的创建并且不覆盖?
我查看了此页面,但仍然没有明确的解决方案,任何建议将不胜感激。
amazon-web-services terraform terraform-provider-aws aws-secrets-manager
反正我们可以通过动态引用来揭秘经理到AWS启动配置用户数据?
这是我尝试过的代码片段:
"SampleLaunchConfig": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"AWSRegionArch2AMI",
{
"Ref": "AWS::Region"
},
"AMI"
]
},
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash -xe\n",
"yum update -y\n",
"useradd -p <<pwd>>{{resolve:secretsmanager:Credentials:SecretString:userName}}\n",
"\n"
]
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
获取 useradd 时出现错误:无效的用户名 '{{resolve:secretsmanager:Credentials:SecretString:userName}}'
如何将 Secret Manager 秘密值传递给 cloudformation 用户数据?
我正在尝试在java play框架中实现aws秘密管理器。我按照本文https://www.geekyhacker.com/2020/05/09/getting-database-credentials-from-aws-secrets-manager-in-spring-boot/中的步骤首先在springboot中实现它工作完美。
现在,我在 play 框架中遵循相同的步骤。
第1步:我在build.sbt中添加了以下依赖项
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-java-sdk" % "1.12.122",
"com.amazonaws.secretsmanager" % "aws-secretsmanager-jdbc" % "1.0.6",
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.2"
)
Run Code Online (Sandbox Code Playgroud)
其他相关依赖项包括:
libraryDependencies ++= Seq(
"mysql" % "mysql-connector-java" % "8.0.21"
)
libraryDependencies ++= Seq(
javaJpa,
"org.hibernate" % "hibernate-core" % "5.4.21.Final", // it is JPA implementation
"javax.validation" % "validation-api" % "2.0.1.Final" // added this because an issue was coming while running
)
Run Code Online (Sandbox Code Playgroud)
步骤2:更新conf文件
旧配置(运行良好)
play.db {
default = unclassified
}
base_db_url = "jdbc:mysql://{my_rds_endpoint}/"
db_annotations= "?createDatabaseIfNotExist=true" …
Run Code Online (Sandbox Code Playgroud) java jdbc amazon-web-services playframework aws-secrets-manager
aws-lambda ×2
amazon-ecs ×1
aws-cli ×1
aws-fargate ×1
java ×1
javascript ×1
jdbc ×1
node.js ×1
python ×1
terraform ×1