UNPKG

haven-secrets-core

Version:

Core for Haven, the easy to use centralized secrets manager.

64 lines (56 loc) 1.96 kB
import createUser from "../aws/iam/users/createUser.js"; import createAccessKey from "../aws/iam/users/createAccessKey.js"; import addUserToGroups from "./addUserToGroups.js"; import addInlinePolicyToUser from "../aws/iam/policies/addInlinePolicyToUser.js"; import fetchHavenAccountInfo from "../utils/fetchHavenAccountInfo.js"; import { v4 as uuidv4 } from "uuid"; import { temporaryGroupName, loggingGroupName, temporaryUsername, path, listGroupsForUserPolicyName, } from "../utils/config.js"; const createTemporaryUser = async (permanentUsername) => { const { region, accountNumber } = fetchHavenAccountInfo(); const temporaryUniqueUsername = temporaryUsername + uuidv4(); const temporaryUserData = await createUser(temporaryUniqueUsername, path, [ { Key: "permanentUsername", Value: permanentUsername }, ]); const temporaryAccessKeyData = await createAccessKey( temporaryUserData.User.UserName ); const { AccessKeyId: temporaryAccessKeyId, SecretAccessKey: temporarySecretAccessKey, } = temporaryAccessKeyData.AccessKey; addUserToGroups(temporaryUniqueUsername, temporaryGroupName); return { accountNumber, region, username: temporaryUniqueUsername, accessKeyId: temporaryAccessKeyId, secretAccessKey: temporarySecretAccessKey, role: "TemporaryUser", }; }; const createPermanentUser = async (permanentUsername, groupNames) => { await createUser(permanentUsername, path); await addInlinePolicyToUser( listGroupsForUserPolicyName, permanentUsername, path ); addUserToGroups(permanentUsername, ...groupNames, loggingGroupName); }; const addUser = async (permanentUsername, ...groupNames) => { try { const fileInfo = createTemporaryUser(permanentUsername); createPermanentUser(permanentUsername, groupNames); return fileInfo; } catch (error) { console.log(`${error.code}: ${error.message}`); return error; } }; export default addUser;