简体   繁体   English

通过 aws-sdk 从 NodeJS 连接到 RDS SQL Server

[英]Connect to RDS SQL Server From NodeJS via aws-sdk

有没有人有使用 aws-sdk 连接到 RDS SQL Server 实例的示例 NodeJS 代码。

A working OIDC-token based sample:一个基于 OIDC 令牌的工作示例:

database.ts
import { fromWebToken } from "@aws-sdk/credential-providers";
import { Signer } from "@aws-sdk/rds-signer";
import { createPool } from "mariadb";
import { serviceConfig } from "./config";
import { logger } from "./logger";
import { getSpiffeJWT } from "./spire";

const getSignToken = async (
  spireToken: string,
  hostname: string,
  username: string,
  port: number,
  awsRegion: string
): Promise<string> => {
  const sig = new Signer({
    hostname,
    port,
    username,
    credentials: fromWebToken({
      roleArn: serviceConfig.roleArn,
      webIdentityToken: spireToken,
    }),
    region: awsRegion,
  });
  return await sig.getAuthToken();
};

const createDbPool = async () => {
  const spireToken = await getSpiffeJWT();
  if (spireToken.length < 0) {
    logger.error("spire token error: invalid length");
  }
  const dbHostname = `${serviceConfig.auroraHostname}`;
  const dbUser = `${serviceConfig.auroraUser}`;
  const dbPort = Number(`${serviceConfig.auroraPort}`);
  const awsRegion = `${serviceConfig.clusterRegion}`;

  const awsToken = await getSignToken(
    spireToken,
    dbHostname,
    dbUser,
    dbPort,
    awsRegion
  );

  return createPool({
    host: dbHostname,
    user: dbUser,
    port: dbPort,
    ssl: { rejectUnauthorized: false },
    password: awsToken,
    database: `${serviceConfig.auroraDatabase}`,
    connectionLimit: 10,
  });
};

export const dbConnectionPool = createDbPool();

Note:笔记:

  1. Don't use ssl: { rejectUnauthorized: false } in Production.不要在生产中使用ssl: { rejectUnauthorized: false } Download the AWS RDS ca-cert and add it as ca to the ssl block... wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem下载 AWS RDS ca-cert 并将其作为 ca 添加到 ssl 块... wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
  2. You can use any kind aws credentials in the Signer...您可以在签名者中使用任何类型的 aws 凭证...
  3. Add your roles and policies according to the aws documentation根据aws 文档添加您的角色和策略

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM