如何使用Boto3从AWS Secret Manager中的特定位置恢复所有密钥
云计算时代,安全意识已经被业界所认可,为了保障所有应用程序的敏感数据,AWS推出了Secret Manager来帮助我们管理所有的秘密变量。Secret Manager可以让您以加密和安全的方式存储和管理应用程序和服务的秘密数据,例如 API 密钥、密码和证书。Secret Manager 自动的加密、解密和管理访问这些秘密,以确保数据安全。
本文通过Boto3提供的API介绍如何从AWS Secret Manager中的特定位置恢复所有密钥。
阅读更多:Python 教程
步骤一:Boto3环境搭建
在开始使用Boto3之前,我们需要先安装和配置AWS CLI和Boto3。Boto3是用于与Amazon Web Services (AWS)通信的Python SDK。安装方式如下:
pip install boto3
接着,我们需要把AWS账号配置好,通过以下命令:
aws configure
在执行该命令之后,会提示您输入AWS账户的Access Key、Secret Key以及默认的区域等信息。
步骤二:在AWS Secret Manager中创建密钥
在实际项目中,需要从AWS Secret Manager中恢复特定位置的密钥前,我们需要先在AWS Secret Manager中创建一个密钥。
首先,我们需要登录AWS Management Console,选择Secret Manager服务,然后单击“Store a new secret”按钮。
在弹出的“Select secret type”中,我们可以选择“Other types of secrets”以满足我们的需求。
如果您想让代码使用密钥,请在“Select a secret for”中选择“Your AWS Account ID and chosen region”。接下来,提供您的密钥值,单击“Next”按钮并为您的密钥设置名称和描述。
单击“Store”即可将密钥存储到AWS Secret Manager的特定位置。
步骤三:使用Boto3恢复密钥
在成功完成了环境搭建和密钥创建之后,接下来我们就可以用Boto3从AWS Secret Manager中恢复密钥了。下面是示例代码:
import boto3
from botocore.exceptions import ClientError
def get_secret(secret_name, region_name):
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
)
except ClientError as e:
if e.response['Error']['Code'] == 'ResourceNotFoundException':
print("The requested secret " + secret_name + " was not found")
elif e.response['Error']['Code'] == 'InvalidRequestException':
print("The request was invalid due to:", e)
elif e.response['Error']['Code'] == 'InvalidParameterException':
print("The request had invalid params:", 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:
secret = base64.b64decode(get_secret_value_response['SecretBinary'])
return secret
get_secret
函数接受两个参数:secret_name
(您要检索的与您的Secret Manager保存在一个特定位置的Secrets Manager secret 名称)和 region_name
(Secret Manager服务所在的AWS区域)。
如果您需要以编程方式使用Secrets Manager URL 和 ARN,则可以通过以下操作来检索密钥:
import boto3
import os
from botocore.exceptions import ClientError
def get_secret():
secret_name = os.environ['SECRET_NAME']
region_name = os.environ['SECRET_REGION']
# 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
)
except ClientError as e:
if e.response['Error']['Code'] == 'ResourceNotFoundException':
print("The requested secret " + secret_name + " was not found")
elif e.response['Error']['Code'] == 'InvalidRequestException':
print("The request was invalid due to:", e)
elif e.response['Error']['Code'] == 'InvalidParameterException':
print("The request had invalid params:", e)
else:
if 'SecretString' in get_secret_value_response:
secret = get_secret_value_response['SecretString']
else:
secret = base64.b64decode(get_secret_value_response['SecretBinary'])
return secret
这里我们使用os.environ
来从环境变量获取SECRET_NAME
和SECRET_REGION
。
总结
本文介绍了如何使用Boto3从AWS Secret Manager中的特定位置恢复所有密钥。
其中,我们需要先搭建好Boto3环境,并在AWS Secret Manager中创建密钥,然后在代码中使用get_secret
函数恢复密钥。
通过这篇文章的介绍,您应该能够轻松地恢复您在AWS Secret Manager中存储的密钥。