标签: aws-secrets-manager

AWS Secrets Manager 出现 GetSecretValue 操作未授权错误

我希望使用 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)

我试图了解这里出了什么问题。感谢任何帮助。

amazon-web-services aws-secrets-manager

33
推荐指数
2
解决办法
7万
查看次数

我如何将 aws 秘密管理器与 nodejs lambda 一起使用

我试图包装示例代码片段以获取函数中的秘密,然后调用它,但它似乎不起作用。我怀疑我是异步调用它,我需要同步调用它?我只想要一个可以调用的函数来获取一个秘密值并将其放入一个 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)

javascript node.js aws-lambda aws-secrets-manager

23
推荐指数
4
解决办法
2万
查看次数

将 AWS Secrets Manager 与 Python 结合使用(Lambda 控制台)

我正在尝试在 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)

python amazon-web-services aws-lambda aws-secrets-manager

16
推荐指数
2
解决办法
3万
查看次数

如何规范存储在 AWS Secrets Manager 上的私有密钥

编辑:截至 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)

所以我需要:

  • 剥离从 json 中获取值
  • 重新格式化字符串以使其更像
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cli aws-secrets-manager

16
推荐指数
2
解决办法
1万
查看次数

AWS Secrets Manager 找不到指定的密钥

我正在使用 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

13
推荐指数
3
解决办法
2万
查看次数

AWS秘密管理器访问拒绝问题

我有一个密钥 (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)

amazon-web-services aws-secrets-manager

13
推荐指数
1
解决办法
4万
查看次数

如何在 serverless.yml 中引用秘密管理器中的对象值?

我正在通过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

12
推荐指数
1
解决办法
1万
查看次数

如何告诉 Terraform 跳过秘密管理器资源(如果存在)?

我的想法是,我想使用 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

12
推荐指数
2
解决办法
1万
查看次数

在 AWS Cloudformation 中指定 Secret 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 用户数据?

amazon-web-services aws-cloudformation aws-secrets-manager

11
推荐指数
2
解决办法
1万
查看次数

在 Java Play 框架中实施 AWS Secret Manager

我正在尝试在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

11
推荐指数
0
解决办法
729
查看次数