UNPKG

cdk-ssm-secure-iam-access-key

Version:

Creates an IAM Access Key for a provided IAM User and stores the result in an SSM SecureString Parameter

50 lines (49 loc) 2.34 kB
import { HttpRequest } from "@smithy/protocol-http"; import { getDateHeader, getSkewCorrectedDate, getUpdatedSystemClockOffset } from "../utils"; import { throwAWSSDKSigningPropertyError } from "./throwAWSSDKSigningPropertyError"; const validateSigningProperties = async (signingProperties) => { const context = throwAWSSDKSigningPropertyError("context", signingProperties.context); const config = throwAWSSDKSigningPropertyError("config", signingProperties.config); const authScheme = context.endpointV2?.properties?.authSchemes?.[0]; const signerFunction = throwAWSSDKSigningPropertyError("signer", config.signer); const signer = await signerFunction(authScheme); const signingRegion = signingProperties?.signingRegion; const signingName = signingProperties?.signingName; return { config, signer, signingRegion, signingName, }; }; export class AWSSDKSigV4Signer { async sign(httpRequest, identity, signingProperties) { if (!HttpRequest.isInstance(httpRequest)) { throw new Error("The request is not an instance of `HttpRequest` and cannot be signed"); } const { config, signer, signingRegion, signingName } = await validateSigningProperties(signingProperties); const signedRequest = await signer.sign(httpRequest, { signingDate: getSkewCorrectedDate(config.systemClockOffset), signingRegion: signingRegion, signingService: signingName, }); return signedRequest; } errorHandler(signingProperties) { return (error) => { const serverTime = error.ServerTime ?? getDateHeader(error.$response); if (serverTime) { const config = throwAWSSDKSigningPropertyError("config", signingProperties.config); config.systemClockOffset = getUpdatedSystemClockOffset(serverTime, config.systemClockOffset); } throw error; }; } successHandler(httpResponse, signingProperties) { const dateHeader = getDateHeader(httpResponse); if (dateHeader) { const config = throwAWSSDKSigningPropertyError("config", signingProperties.config); config.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, config.systemClockOffset); } } }