rds-iam-auth 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/bin/rds-iam-auth.js +88 -0
- package/index.js +3 -0
- package/lib/get-rds-auth-token.js +28 -0
- package/package.json +20 -0
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# rds-iam-auth
|
|
2
|
+
|
|
3
|
+
Generate AWS RDS IAM authentication tokens, usable both as a CLI and as a library. Wraps [`@aws-sdk/rds-signer`](https://www.npmjs.com/package/@aws-sdk/rds-signer).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
To use it as a global CLI command:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm i -g .
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Rerun `npm i -g .` after any code change to pick it up in the globally installed command.
|
|
18
|
+
|
|
19
|
+
## CLI usage
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
rds-iam-auth --host <endpoint> --user <username> [--region <region>] [--port <port>]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
| Flag | Alias | Required | Description |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| `--host` | `-h` | yes | RDS instance endpoint |
|
|
28
|
+
| `--user` | `-u` | yes | Database username |
|
|
29
|
+
| `--region` | `-r` | no | AWS region. Falls back to `AWS_REGION` / `AWS_DEFAULT_REGION` env vars |
|
|
30
|
+
| `--port` | `-p` | no | Database port. Defaults to `5432` (Postgres) |
|
|
31
|
+
| `--help` | | | Show usage |
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
rds-iam-auth --host mydb.abc123.us-east-1.rds.amazonaws.com --user myuser --region us-east-1
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The generated token is printed to stdout. Errors and usage text go to stderr, with a non-zero exit code on failure.
|
|
40
|
+
|
|
41
|
+
AWS credentials are resolved via the default AWS SDK v3 credential chain (environment variables, shared config/credentials file, EC2/ECS/Lambda role, etc.) — this package only generates the IAM auth token, it does not configure AWS credentials itself.
|
|
42
|
+
|
|
43
|
+
## Programmatic usage
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
const { getRdsAuthToken } = require('rds-iam-auth');
|
|
47
|
+
|
|
48
|
+
const token = await getRdsAuthToken({
|
|
49
|
+
host: 'mydb.abc123.us-east-1.rds.amazonaws.com',
|
|
50
|
+
user: 'myuser',
|
|
51
|
+
region: 'us-east-1', // optional, falls back to AWS_REGION / AWS_DEFAULT_REGION
|
|
52
|
+
port: 5432, // optional, defaults to 5432
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Project structure
|
|
57
|
+
|
|
58
|
+
- `lib/get-rds-auth-token.js` — core logic (`getRdsAuthToken`, `DEFAULT_PORT`)
|
|
59
|
+
- `bin/rds-iam-auth.js` — CLI entry point
|
|
60
|
+
- `index.js` — programmatic entry point, re-exports from `lib/`
|
|
61
|
+
|
|
62
|
+
## Notes
|
|
63
|
+
|
|
64
|
+
- This package is marked `"private": true` and is not set up for publishing to any registry.
|
|
65
|
+
- On Windows, if the globally installed CLI fails under Git Bash with a confusing error, try PowerShell or cmd.exe instead — this is an environment quirk unrelated to this package.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { getRdsAuthToken, DEFAULT_PORT } = require('../lib/get-rds-auth-token');
|
|
4
|
+
|
|
5
|
+
const USAGE = `Usage: rds-iam-auth --host <endpoint> --user <username> [--region <region>] [--port <port>]
|
|
6
|
+
|
|
7
|
+
Options:
|
|
8
|
+
--host, -h <endpoint> RDS instance endpoint (required)
|
|
9
|
+
--user, -u <username> Database username (required)
|
|
10
|
+
--region, -r <region> AWS region (optional, defaults to AWS_REGION/AWS_DEFAULT_REGION env var)
|
|
11
|
+
--port, -p <port> Database port (optional, defaults to ${DEFAULT_PORT})
|
|
12
|
+
--help Show this help message
|
|
13
|
+
|
|
14
|
+
AWS credentials are resolved via the default AWS SDK credential chain
|
|
15
|
+
(environment variables, shared config/credentials file, EC2/ECS/Lambda role, etc).
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
function parseArgs(argv) {
|
|
19
|
+
const args = { port: DEFAULT_PORT };
|
|
20
|
+
|
|
21
|
+
for (let i = 0; i < argv.length; i++) {
|
|
22
|
+
const arg = argv[i];
|
|
23
|
+
switch (arg) {
|
|
24
|
+
case '--host':
|
|
25
|
+
case '-h':
|
|
26
|
+
args.host = argv[++i];
|
|
27
|
+
break;
|
|
28
|
+
case '--user':
|
|
29
|
+
case '-u':
|
|
30
|
+
args.user = argv[++i];
|
|
31
|
+
break;
|
|
32
|
+
case '--region':
|
|
33
|
+
case '-r':
|
|
34
|
+
args.region = argv[++i];
|
|
35
|
+
break;
|
|
36
|
+
case '--port':
|
|
37
|
+
case '-p': {
|
|
38
|
+
const value = argv[++i];
|
|
39
|
+
const port = Number(value);
|
|
40
|
+
if (!Number.isInteger(port) || port <= 0) {
|
|
41
|
+
throw new Error(`Invalid port: ${value}`);
|
|
42
|
+
}
|
|
43
|
+
args.port = port;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case '--help':
|
|
47
|
+
args.help = true;
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return args;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function main() {
|
|
58
|
+
let args;
|
|
59
|
+
try {
|
|
60
|
+
args = parseArgs(process.argv.slice(2));
|
|
61
|
+
} catch (err) {
|
|
62
|
+
console.error(`Error: ${err.message}\n`);
|
|
63
|
+
console.error(USAGE);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (args.help) {
|
|
68
|
+
console.log(USAGE);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const missing = ['host', 'user'].filter((key) => !args[key]);
|
|
73
|
+
if (missing.length > 0) {
|
|
74
|
+
console.error(`Error: missing required argument(s): ${missing.join(', ')}\n`);
|
|
75
|
+
console.error(USAGE);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const token = await getRdsAuthToken(args);
|
|
81
|
+
console.log(token);
|
|
82
|
+
} catch (err) {
|
|
83
|
+
console.error(`Error generating RDS auth token: ${err.message}`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
main();
|
package/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const { Signer } = require('@aws-sdk/rds-signer');
|
|
2
|
+
|
|
3
|
+
const DEFAULT_PORT = 5432;
|
|
4
|
+
|
|
5
|
+
async function getRdsAuthToken({ host, user, region, port = DEFAULT_PORT }) {
|
|
6
|
+
if (!host) {
|
|
7
|
+
throw new Error('"host" is required');
|
|
8
|
+
}
|
|
9
|
+
if (!user) {
|
|
10
|
+
throw new Error('"user" is required');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const resolvedRegion = region || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION;
|
|
14
|
+
if (!resolvedRegion) {
|
|
15
|
+
throw new Error('No region provided. Pass "region" or set AWS_REGION/AWS_DEFAULT_REGION.');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const signer = new Signer({
|
|
19
|
+
hostname: host,
|
|
20
|
+
port,
|
|
21
|
+
username: user,
|
|
22
|
+
region: resolvedRegion,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return signer.getAuthToken();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = { getRdsAuthToken, DEFAULT_PORT };
|
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "rds-iam-auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI to generate an IAM authentication token for AWS RDS",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"rds-iam-auth": "./bin/rds-iam-auth.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"lib",
|
|
12
|
+
"index.js"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"start": "node bin/rds-iam-auth.js"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@aws-sdk/rds-signer": "^3.1071.0"
|
|
19
|
+
}
|
|
20
|
+
}
|