mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 22:27:48 +00:00
Merge pull request #3072 from Infisical/secret-metadata-audit-log
Improvement: Include Secret Metadata in Audit Logs
This commit is contained in:
@@ -317,6 +317,8 @@ interface GetSecretsEvent {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TSecretMetadata = { key: string; value: string }[];
|
||||||
|
|
||||||
interface GetSecretEvent {
|
interface GetSecretEvent {
|
||||||
type: EventType.GET_SECRET;
|
type: EventType.GET_SECRET;
|
||||||
metadata: {
|
metadata: {
|
||||||
@@ -325,6 +327,7 @@ interface GetSecretEvent {
|
|||||||
secretId: string;
|
secretId: string;
|
||||||
secretKey: string;
|
secretKey: string;
|
||||||
secretVersion: number;
|
secretVersion: number;
|
||||||
|
secretMetadata?: TSecretMetadata;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,6 +339,7 @@ interface CreateSecretEvent {
|
|||||||
secretId: string;
|
secretId: string;
|
||||||
secretKey: string;
|
secretKey: string;
|
||||||
secretVersion: number;
|
secretVersion: number;
|
||||||
|
secretMetadata?: TSecretMetadata;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,7 +348,12 @@ interface CreateSecretBatchEvent {
|
|||||||
metadata: {
|
metadata: {
|
||||||
environment: string;
|
environment: string;
|
||||||
secretPath: string;
|
secretPath: string;
|
||||||
secrets: Array<{ secretId: string; secretKey: string; secretVersion: number }>;
|
secrets: Array<{
|
||||||
|
secretId: string;
|
||||||
|
secretKey: string;
|
||||||
|
secretVersion: number;
|
||||||
|
secretMetadata?: TSecretMetadata;
|
||||||
|
}>;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,6 +365,7 @@ interface UpdateSecretEvent {
|
|||||||
secretId: string;
|
secretId: string;
|
||||||
secretKey: string;
|
secretKey: string;
|
||||||
secretVersion: number;
|
secretVersion: number;
|
||||||
|
secretMetadata?: TSecretMetadata;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,7 +374,7 @@ interface UpdateSecretBatchEvent {
|
|||||||
metadata: {
|
metadata: {
|
||||||
environment: string;
|
environment: string;
|
||||||
secretPath: string;
|
secretPath: string;
|
||||||
secrets: Array<{ secretId: string; secretKey: string; secretVersion: number }>;
|
secrets: Array<{ secretId: string; secretKey: string; secretVersion: number; secretMetadata?: TSecretMetadata }>;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -411,7 +411,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
secretPath: req.query.secretPath,
|
secretPath: req.query.secretPath,
|
||||||
secretId: secret.id,
|
secretId: secret.id,
|
||||||
secretKey: req.params.secretName,
|
secretKey: req.params.secretName,
|
||||||
secretVersion: secret.version
|
secretVersion: secret.version,
|
||||||
|
secretMetadata: secret.secretMetadata
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -519,7 +520,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
secretPath: req.body.secretPath,
|
secretPath: req.body.secretPath,
|
||||||
secretId: secret.id,
|
secretId: secret.id,
|
||||||
secretKey: req.params.secretName,
|
secretKey: req.params.secretName,
|
||||||
secretVersion: secret.version
|
secretVersion: secret.version,
|
||||||
|
secretMetadata: req.body.secretMetadata
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -631,7 +633,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
secretPath: req.body.secretPath,
|
secretPath: req.body.secretPath,
|
||||||
secretId: secret.id,
|
secretId: secret.id,
|
||||||
secretKey: req.params.secretName,
|
secretKey: req.params.secretName,
|
||||||
secretVersion: secret.version
|
secretVersion: secret.version,
|
||||||
|
secretMetadata: req.body.secretMetadata
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1904,6 +1907,10 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
}
|
}
|
||||||
const { secrets } = secretOperation;
|
const { secrets } = secretOperation;
|
||||||
|
|
||||||
|
const secretMetadataMap = new Map(
|
||||||
|
inputSecrets.map(({ secretKey, secretMetadata }) => [secretKey, secretMetadata])
|
||||||
|
);
|
||||||
|
|
||||||
await server.services.auditLog.createAuditLog({
|
await server.services.auditLog.createAuditLog({
|
||||||
projectId: secrets[0].workspace,
|
projectId: secrets[0].workspace,
|
||||||
...req.auditLogInfo,
|
...req.auditLogInfo,
|
||||||
@@ -1915,7 +1922,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
secrets: secrets.map((secret) => ({
|
secrets: secrets.map((secret) => ({
|
||||||
secretId: secret.id,
|
secretId: secret.id,
|
||||||
secretKey: secret.secretKey,
|
secretKey: secret.secretKey,
|
||||||
secretVersion: secret.version
|
secretVersion: secret.version,
|
||||||
|
secretMetadata: secretMetadataMap.get(secret.secretKey)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2010,6 +2018,10 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
}
|
}
|
||||||
const { secrets } = secretOperation;
|
const { secrets } = secretOperation;
|
||||||
|
|
||||||
|
const secretMetadataMap = new Map(
|
||||||
|
inputSecrets.map(({ secretKey, secretMetadata }) => [secretKey, secretMetadata])
|
||||||
|
);
|
||||||
|
|
||||||
await server.services.auditLog.createAuditLog({
|
await server.services.auditLog.createAuditLog({
|
||||||
projectId: secrets[0].workspace,
|
projectId: secrets[0].workspace,
|
||||||
...req.auditLogInfo,
|
...req.auditLogInfo,
|
||||||
@@ -2021,7 +2033,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => {
|
|||||||
secrets: secrets.map((secret) => ({
|
secrets: secrets.map((secret) => ({
|
||||||
secretId: secret.id,
|
secretId: secret.id,
|
||||||
secretKey: secret.secretKey,
|
secretKey: secret.secretKey,
|
||||||
secretVersion: secret.version
|
secretVersion: secret.version,
|
||||||
|
secretMetadata: secretMetadataMap.get(secret.secretKey)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1291,8 +1291,13 @@ export const secretV2BridgeServiceFactory = ({
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (secretsToUpdate.length !== inputSecrets.length)
|
if (secretsToUpdate.length !== inputSecrets.length) {
|
||||||
throw new NotFoundError({ message: `Secret does not exist: ${secretsToUpdate.map((el) => el.key).join(",")}` });
|
const secretsToUpdateNames = secretsToUpdate.map((secret) => secret.key);
|
||||||
|
const invalidSecrets = inputSecrets.filter((secret) => !secretsToUpdateNames.includes(secret.secretKey));
|
||||||
|
throw new NotFoundError({
|
||||||
|
message: `Secret does not exist: ${invalidSecrets.map((el) => el.secretKey).join(",")}`
|
||||||
|
});
|
||||||
|
}
|
||||||
const secretsToUpdateInDBGroupedByKey = groupBy(secretsToUpdate, (i) => i.key);
|
const secretsToUpdateInDBGroupedByKey = groupBy(secretsToUpdate, (i) => i.key);
|
||||||
|
|
||||||
secretsToUpdate.forEach((el) => {
|
secretsToUpdate.forEach((el) => {
|
||||||
|
|||||||
@@ -1444,7 +1444,7 @@ export const secretServiceFactory = ({
|
|||||||
decryptedSecret.secretValue = expandedSecretValue || "";
|
decryptedSecret.secretValue = expandedSecretValue || "";
|
||||||
}
|
}
|
||||||
|
|
||||||
return decryptedSecret;
|
return { secretMetadata: undefined, ...decryptedSecret };
|
||||||
};
|
};
|
||||||
|
|
||||||
const createSecretRaw = async ({
|
const createSecretRaw = async ({
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ export const eventToNameMap: { [K in EventType]: string } = {
|
|||||||
[EventType.GET_SECRETS]: "List secrets",
|
[EventType.GET_SECRETS]: "List secrets",
|
||||||
[EventType.GET_SECRET]: "Read secret",
|
[EventType.GET_SECRET]: "Read secret",
|
||||||
[EventType.DELETE_SECRETS]: "Delete secrets",
|
[EventType.DELETE_SECRETS]: "Delete secrets",
|
||||||
|
[EventType.CREATE_SECRETS]: "Create secrets",
|
||||||
|
[EventType.UPDATE_SECRETS]: "Update secrets",
|
||||||
[EventType.CREATE_SECRET]: "Create secret",
|
[EventType.CREATE_SECRET]: "Create secret",
|
||||||
[EventType.UPDATE_SECRET]: "Update secret",
|
[EventType.UPDATE_SECRET]: "Update secret",
|
||||||
[EventType.DELETE_SECRET]: "Delete secret",
|
[EventType.DELETE_SECRET]: "Delete secret",
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ export enum UserAgentType {
|
|||||||
export enum EventType {
|
export enum EventType {
|
||||||
GET_SECRETS = "get-secrets",
|
GET_SECRETS = "get-secrets",
|
||||||
DELETE_SECRETS = "delete-secrets",
|
DELETE_SECRETS = "delete-secrets",
|
||||||
|
CREATE_SECRETS = "create-secrets",
|
||||||
|
UPDATE_SECRETS = "update-secrets",
|
||||||
GET_SECRET = "get-secret",
|
GET_SECRET = "get-secret",
|
||||||
CREATE_SECRET = "create-secret",
|
CREATE_SECRET = "create-secret",
|
||||||
UPDATE_SECRET = "update-secret",
|
UPDATE_SECRET = "update-secret",
|
||||||
|
|||||||
Reference in New Issue
Block a user