gpt4 book ai didi

amazon-web-services - 来自 Lambda 的 AWS Secrets Manager 调用返回 null/none

转载 作者:行者123 更新时间:2023-12-04 00:24:00 25 4
gpt4 key购买 nike

我正在使用 AWS Lambda 函数调用 AWS Secrets Manager 来检索 key 值,但它只返回值 None/Null。

这是我的代码:

# Secrets Manager
import boto3
import base64
from botocore.exceptions import ClientError


def lambda_handler(event, context):
# Secrets Manager
def get_secret():

secret_name = "arn:aws:secretsmanager:region:accountid:secret:full-secret-name"
region_name = "region"

# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)

# 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 as e:
if e.response['Error']['Code'] == 'DecryptionFailureException':
# Secrets Manager can't decrypt the protected secret text using the provided KMS key.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'InternalServiceErrorException':
# An error occurred on the server side.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'InvalidParameterException':
# You provided an invalid value for a parameter.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'InvalidRequestException':
# You provided a parameter value that is not valid for the current state of the resource.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'ResourceNotFoundException':
# We can't find the resource that you asked for.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
else:
# Decrypts secret using the associated KMS CMK.
# Depending on whether the secret is a string or binary, one of these fields will be populated.
if 'SecretString' in get_secret_value_response:
secret = get_secret_value_response['SecretString']
else:
decoded_binary_secret = base64.b64decode(get_secret_value_response['SecretBinary'])

secretValue = get_secret()
print(secretValue)
return secretValue

在返回中,我得到 null ,在打印中我得到 None 。不太确定我在这里做错了什么,但它没有出错也没有得到我的值(value)。

Secret 已加密,但 Lambda IAM 角色拥有 KMS key 的使用权限,并且 KMS key 也授予了 IAM 角色的使用权限。

我还尝试将 secret_name 设置为 Secrets Name,如下所示:
secret_name = "full-secret-name-no-arn"

问候

最佳答案

解析度:

# Secrets Manager
import json
import boto3
import base64
import logging
from botocore.exceptions import ClientError

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
logger.info("Inside lambda_handler...")

# SecretsManager
secretValues = json.loads(get_secret())

def get_secret():
logger.info("Inside get_secret...")
secret_name = "full-arn-goes-here"
region_name = "region-goes-here"

# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name

)

try:
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
logger.info("Received Response")
except ClientError as e:
if e.response['Error']['Code'] == 'DecryptionFailureException':
# Secrets Manager can't decrypt the protected secret text using the provided KMS key.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'InternalServiceErrorException':
# An error occurred on the server side.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'InvalidParameterException':
# You provided an invalid value for a parameter.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'InvalidRequestException':
# You provided a parameter value that is not valid for the current state of the resource.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
elif e.response['Error']['Code'] == 'ResourceNotFoundException':
# We can't find the resource that you asked for.
# Deal with the exception here, and/or rethrow at your discretion.
raise e
else:
# Please see https://docs.aws.amazon.com/secretsmanager/latest/apireference/CommonErrors.html for all the other types of errors not handled above
raise e
else:
# Decrypts secret using the associated KMS CMK.
# Depending on whether the secret is a string or binary, one of these fields will be populated.
if 'SecretString' in get_secret_value_response:
logger.info("Inside string response...")
return get_secret_value_response['SecretString']
else:
logger.info("Inside binary response...")
return base64.b64decode(get_secret_value_response['SecretBinary'])

只需将 secretValues = json.loads(get_secret()) 放在您的处理程序中。

关于amazon-web-services - 来自 Lambda 的 AWS Secrets Manager 调用返回 null/none,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com