haven-secrets-core
Version:
Core for Haven, the easy to use centralized secrets manager.
198 lines (194 loc) • 7.23 kB
JavaScript
import fs from "fs";
import fetchHavenAccountInfo from "./fetchHavenAccountInfo.js";
import getKeyId from "./getKeyIdFromAlias.js";
const createProjectTemplate = async (projectName) => {
const keyId = await getKeyId();
const { region, accountNumber } = fetchHavenAccountInfo();
const template = `---
Resources:
HavenSecrets${projectName}DevReadGroup:
Type: AWS::IAM::Group
Properties:
GroupName: HavenSecrets${projectName}DevReadGroup
Path: /HavenSecrets/
Policies:
- PolicyName: HavenSecrets${projectName}DevReadPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- dynamodb:Scan
- dynamodb:GetItem
Resource: arn:aws:dynamodb:${region}:${accountNumber}:table/HavenSecrets${projectName}Dev
- Effect: Allow
Action: kms:Decrypt
Resource: arn:aws:kms:${region}:${accountNumber}:key/${keyId}
- Effect: Allow
Action: kms:ListAliases
Resource: "*"
HavenSecrets${projectName}DevWriteGroup:
Type: AWS::IAM::Group
Properties:
GroupName: HavenSecrets${projectName}DevWriteGroup
Path: /HavenSecrets/
Policies:
- PolicyName: HavenSecrets${projectName}DevWritePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- dynamodb:PutItem
- dynamodb:UpdateItem
Resource: arn:aws:dynamodb:${region}:${accountNumber}:table/HavenSecrets${projectName}Dev
- Effect: Allow
Action:
- kms:Encrypt
- kms:GenerateDataKey
Resource: arn:aws:kms:${region}:${accountNumber}:key/${keyId}
- Effect: Allow
Action: kms:ListAliases
Resource: "*"
HavenSecrets${projectName}StgReadGroup:
Type: AWS::IAM::Group
Properties:
GroupName: HavenSecrets${projectName}StgReadGroup
Path: /HavenSecrets/
Policies:
- PolicyName: HavenSecrets${projectName}StgReadPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- dynamodb:Scan
- dynamodb:GetItem
Resource: arn:aws:dynamodb:${region}:${accountNumber}:table/HavenSecrets${projectName}Stg
- Effect: Allow
Action: kms:Decrypt
Resource: arn:aws:kms:${region}:${accountNumber}:key/${keyId}
- Effect: Allow
Action: kms:ListAliases
Resource: "*"
HavenSecrets${projectName}StgWriteGroup:
Type: AWS::IAM::Group
Properties:
GroupName: HavenSecrets${projectName}StgWriteGroup
Path: /HavenSecrets/
Policies:
- PolicyName: HavenSecrets${projectName}StgWritePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- dynamodb:PutItem
- dynamodb:UpdateItem
Resource: arn:aws:dynamodb:${region}:${accountNumber}:table/HavenSecrets${projectName}Stg
- Effect: Allow
Action:
- kms:Encrypt
- kms:GenerateDataKey
Resource: arn:aws:kms:${region}:${accountNumber}:key/${keyId}
- Effect: Allow
Action: kms:ListAliases
Resource: "*"
HavenSecrets${projectName}ProdReadGroup:
Type: AWS::IAM::Group
Properties:
GroupName: HavenSecrets${projectName}ProdReadGroup
Path: /HavenSecrets/
Policies:
- PolicyName: HavenSecrets${projectName}ProdReadPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- dynamodb:Scan
- dynamodb:GetItem
Resource: arn:aws:dynamodb:${region}:${accountNumber}:table/HavenSecrets${projectName}Prod
- Effect: Allow
Action: kms:Decrypt
Resource: arn:aws:kms:${region}:${accountNumber}:key/${keyId}
- Effect: Allow
Action: kms:ListAliases
Resource: "*"
HavenSecrets${projectName}ProdWriteGroup:
Type: AWS::IAM::Group
Properties:
GroupName: HavenSecrets${projectName}ProdWriteGroup
Path: /HavenSecrets/
Policies:
- PolicyName: HavenSecrets${projectName}ProdWritePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- dynamodb:PutItem
- dynamodb:UpdateItem
Resource: arn:aws:dynamodb:${region}:${accountNumber}:table/HavenSecrets${projectName}Prod
- Effect: Allow
Action:
- kms:Encrypt
- kms:GenerateDataKey
Resource: arn:aws:kms:${region}:${accountNumber}:key/${keyId}
- Effect: Allow
Action: kms:ListAliases
Resource: "*"
HavenSecrets${projectName}Dev:
Type: AWS::DynamoDB::Table
Properties:
TableName: HavenSecrets${projectName}Dev
AttributeDefinitions:
- AttributeName: SecretName
AttributeType: S
- AttributeName: Version
AttributeType: S
KeySchema:
- AttributeName: SecretName
KeyType: HASH
- AttributeName: Version
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
HavenSecrets${projectName}Stg:
Type: AWS::DynamoDB::Table
Properties:
TableName: HavenSecrets${projectName}Stg
AttributeDefinitions:
- AttributeName: SecretName
AttributeType: S
- AttributeName: Version
AttributeType: S
KeySchema:
- AttributeName: SecretName
KeyType: HASH
- AttributeName: Version
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
HavenSecrets${projectName}Prod:
Type: AWS::DynamoDB::Table
Properties:
TableName: HavenSecrets${projectName}Prod
AttributeDefinitions:
- AttributeName: SecretName
AttributeType: S
- AttributeName: Version
AttributeType: S
KeySchema:
- AttributeName: SecretName
KeyType: HASH
- AttributeName: Version
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5`;
return template;
};
export default createProjectTemplate;