feat(integrations): aws secrets manager prefix support

This commit is contained in:
Daniel Hougaard
2024-09-16 15:36:41 +04:00
parent 1ecce285f0
commit 8a33f1a591
2 changed files with 34 additions and 4 deletions

View File

@@ -1006,12 +1006,28 @@ const syncSecretsAWSSecretManager = async ({
}
};
let secretsToProcess: Record<string, { value: string; comment?: string }> = {};
if (metadata && metadata.secretPrefix) {
const { secretPrefix } = metadata;
// Update each secret to have the secret prefix
Object.keys(secrets).forEach((key) => {
if (key.startsWith(secretPrefix)) {
secretsToProcess[key] = secrets[key];
} else {
secretsToProcess[`${secretPrefix}${key}`] = secrets[key];
}
});
} else {
secretsToProcess = secrets;
}
if (metadata.mappingBehavior === IntegrationMappingBehavior.ONE_TO_ONE) {
for await (const [key, value] of Object.entries(secrets)) {
for await (const [key, value] of Object.entries(secretsToProcess)) {
await processAwsSecret(key, value.value);
}
} else {
await processAwsSecret(integration.app as string, getSecretKeyValuePair(secrets));
await processAwsSecret(integration.app as string, getSecretKeyValuePair(secretsToProcess));
}
};

View File

@@ -104,6 +104,7 @@ export default function AWSSecretManagerCreateIntegrationPage() {
const [tagKey, setTagKey] = useState("");
const [tagValue, setTagValue] = useState("");
const [kmsKeyId, setKmsKeyId] = useState("");
const [secretPrefix, setSecretPrefix] = useState("");
// const [path, setPath] = useState('');
// const [pathErrorText, setPathErrorText] = useState('');
@@ -165,6 +166,7 @@ export default function AWSSecretManagerCreateIntegrationPage() {
]
}
: {}),
...(secretPrefix && { secretPrefix }),
...(kmsKeyId && { kmsKeyId }),
mappingBehavior: selectedMappingBehavior
}
@@ -325,7 +327,7 @@ export default function AWSSecretManagerCreateIntegrationPage() {
</Switch>
</div>
{shouldTag && (
<div className="mt-4">
<div className="mt-4 flex justify-between">
<FormControl label="Tag Key">
<Input
placeholder="managed-by"
@@ -342,10 +344,20 @@ export default function AWSSecretManagerCreateIntegrationPage() {
</FormControl>
</div>
)}
<FormControl label="Secret Prefix" className="mt-4">
<Input
value={secretPrefix}
onChange={(e) => setSecretPrefix(e.target.value)}
placeholder="INFISICAL_"
/>
</FormControl>
<FormControl label="Encryption Key" className="mt-4">
<Select
value={kmsKeyId}
onValueChange={(e) => {
if (e === "no-keys") return;
setKmsKeyId(e);
}}
className="w-full border border-mineshaft-500"
@@ -363,7 +375,9 @@ export default function AWSSecretManagerCreateIntegrationPage() {
);
})
) : (
<div />
<SelectItem isDisabled value="no-keys" key="no-keys">
No KMS keys available
</SelectItem>
)}
</Select>
</FormControl>