阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管

阿里云RDS数据库账户密码依托阿里云KMS凭据实现托管

从安全层面来讲,进行这项服务时,最为合适的做法是创建一个RAM用户来开展操作。

接下来会从三个部分进行操作说明。

一、RDS实例

  1. 进入阿里云控制台创建RDS实例,选好需要的配置,记住所选择的VPC、交换机以及创建的地域。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  2. 在RDS实例列表界面点击实例的管理操作。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  3. 在账户管理界面选择创建账户,自行设定账户名称和密码。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  4. 完成RDS账户的创建。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管

二、KMS

  1. 在与RDS相同的地域里,创建KMS实例。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  2. 点击密钥管理,创建密钥,选择刚刚创建的KMS实例,自定义密钥名称,选择密钥规格,可以选择是否自动轮转以及轮转周期。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  3. 在资源下的凭据管理界面选择创建数据库凭据。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  4. 点击凭据管理,点击数据库凭据,创建凭据,选择KMS实例,数据库类型选择RDS,自定义凭据名称,再选择需要的RDS实例,可以选择双账户托管或者单账户托管,可以新建账户,也可以选择已有账户直接导入。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  5. 完成凭据的创建。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管

三、程序验证

  1. 在验证之前需点击账户的权限与安全下的AccessKey来创建AccessKey。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  2. 创建Accesskey,记录AccessKey ID和Accesskey Secret,并确认Accesskey可以正常使用。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  3. 在刚刚创建AccessKey的界面下点击RAM访问控制,点击用户,找到创建AccessKey所在的RAM账户,点击权限管理,给RAM用户添加AliyunKMSFullAccess(或最小化AliyunKMSSecretUserAccess)权限。
    阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
  4. 程序验证是否可以通过KMS获取RDS账户和密码。首先要确定环境下是否装好阿里云Python SDK,如果已装过,会提示Requirement already satisfied,无需重复安装。
pip install alibabacloud_kms20160120 pymysql

在输入过程中,把脚本里【需要填写】的地方改成纯字符串,不要带尖括号或其他转义字符。验证程序需要的数据有AccessKey ID、AccessKey Secret、Region(如cn-hangzhou)、KMS创建的RDS凭据名称,从而进行下一步操作程序验证。

#!/usr/bin/env python3
import os, json
from alibabacloud_tea_openapi.models import Config
from alibabacloud_kms20160120.client import Client as KmsClient
from alibabacloud_kms20160120.models import GetSecretValueRequest

# 需要手工填写的只有下面 4 行
ACCESS_KEY_ID     = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")     or "<你的AccessKeyId>"
ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") or "<你的AccessKeySecret>"
REGION_ID         = "<你的Region,如 cn-hangzhou>"
SECRET_NAME       = "<你在KMS中创建的RDS凭据名称>"

cfg = Config(
    access_key_id=ACCESS_KEY_ID,
    access_key_secret=ACCESS_KEY_SECRET,
    region_id=REGION,
    endpoint=f'kms.{REGION}.aliyuncs.com'
)
client = KmsClient(cfg)

req = GetSecretValueRequest(secret_name=SECRET_NAME)
resp = client.get_secret_value(req)

secret_data = json.loads(resp.body.secret_data)
print('RDS 账号:', secret_data['AccountName'])
print('RDS 密码:', secret_data['AccountPassword'])

如果验证成功,会显示RDS账户和密码。
5. 验证获取的RDS账户和密码是否可以连接上数据库。测试前需要确认:RDS申请外网地址(控制台→实例→数据库连接→申请);RDS白名单加IP:把你的公网IP加入RDS白名单(或临时0.0.0.0/0)。
阿里云RDS数据库账户密码借助阿里云KMS凭据达成托管
环境是否安装依赖

pip install pymysql

该程序需要的数据有RDS外网地址和从上一个程序获取的RDS账户和密码。

#!/usr/bin/env python3
# test_rds_connect.py
import pymysql

# ======【需要填写】======
RDS_HOST     = "rm-xxxxxxxx.mysql.rds.aliyuncs.com(需求填写)"
RDS_PORT     = 3306(默认3306)
RDS_USER     = "刚才KMS里打印的AccountName(需要填写)"
RDS_PASSWORD = "刚才KMS里打印的密码(需要填写)"
RDS_DATABASE = "mysql"

try:
    conn = pymysql.connect(
        host     = RDS_HOST,
        port     = RDS_PORT,
        user     = RDS_USER,
        password = RDS_PASSWORD,
        database = RDS_DATABASE,
        charset  = "utf8mb4",
        connect_timeout = 5
    )
    with conn.cursor() as cur:
        cur.execute("SELECT 1")
        result = cur.fetchone()
    print("连接成功,SELECT 1 结果:", result)
except Exception as e:
    print("连接失败:", e)
finally:
    try: 
        conn.close()
    except:
        pass

显示连接成功则测试成功,上一步通过KMS获取的RDS账户密码正确。

相关文章

暂无评论

暂无评论...