Islam Salem
04/28/2022, 2:36 PMFrank
Frank
sst build
, go into .build/cdk.out
, and open up the template for the Islam-Salem-metatrust-com-met-match-service-MailReceiver
stack. Search for GetParameter
, do u see it anywhere in the template?Islam Salem
04/28/2022, 7:53 PM"Route53HostedZoneIdReaderCustomResourcePolicyB255EC5E": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyDocument": {
"Statement": [
{
"Action": "ssm:GetParameter",
"Effect": "Allow",
"Resource": "arn:aws:ssm:eu-west-1:072408395743:parameter:EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM"
}
],
"Version": "2012-10-17"
},
"PolicyName": "Route53HostedZoneIdReaderCustomResourcePolicyB255EC5E",
"Roles": [
{
"Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"
}
]
},
"Metadata": {
"aws:cdk:path": "Islam-Salem-metatrust-com-met-match-service-MailReceiver/Route53HostedZoneIdReader/CustomResourcePolicy/Resource"
}
},
Islam Salem
04/28/2022, 7:54 PMimport { Construct } from 'constructs';
import { AwsCustomResource, AwsSdkCall } from 'aws-cdk-lib/custom-resources';
import * as iam from 'aws-cdk-lib/aws-iam';
interface SSMParameterReaderProps {
parameterName: string;
region: string;
}
export class SSMParameterReader extends AwsCustomResource {
constructor(scope: Construct, name: string, props: SSMParameterReaderProps) {
const { parameterName, region } = props;
const ssmAwsSdkCall: AwsSdkCall = {
service: 'SSM',
action: 'getParameter',
parameters: {
Name: parameterName,
},
region,
physicalResourceId: {
id: Date.now().toString(), // Update physical id to always fetch the latest version
},
};
super(scope, name, {
onUpdate: ssmAwsSdkCall,
policy: {
statements: [
new iam.PolicyStatement({
resources: [
`arn:aws:ssm:eu-west-1:072408395743:parameter:${parameterName}`,
],
actions: ['ssm:GetParameter'],
effect: iam.Effect.ALLOW,
}),
],
},
});
}
public getParameterValue() {
return this.getResponseField('Parameter.Value');
}
}
Islam Salem
04/28/2022, 7:54 PMIslam Salem
04/28/2022, 7:59 PM// main stack in eu-central-1
import * as sst from "@serverless-stack/resources";
import { StringParameter } from "aws-cdk-lib/aws-ssm";
import { EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM } from "./constant";
export default class MainStack extends sst.Stack {
constructor(scope: <http://sst.App|sst.App>, id: string, props?: sst.StackProps) {
super(scope, id, props);
const emailHandlerFunction = new sst.Function(
this,
"ExposeEmailHandlerFunction",
{
handler: "src/expose-email-handler.removeExpose",
}
);
new StringParameter(this, "EmailHandlerFunctionSSMParam", {
parameterName: EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM,
description: "The Expose subdomain email handler function ARN",
stringValue: emailHandlerFunction.functionArn,
});
}
}
// MailReceiverStack in eu-west-1
import * as sst from '@serverless-stack/resources';
import * as ses from 'aws-cdk-lib/aws-ses';
import * as actions from 'aws-cdk-lib/aws-ses-actions';
import { VerifySesDomain } from '@seeebiii/ses-verify-identities';
import { SSMParameterReader } from './SSMParameterReader';
import { EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM } from './constant';
export default class MailReceiverStack extends sst.Stack {
constructor(scope: <http://sst.App|sst.App>, id: string, props: sst.StackProps) {
super(scope, id, props);
new VerifySesDomain(this, 'SesDomainVerification', {
domainName: '<http://expose.metatrust.net|expose.metatrust.net>',
hostedZoneName: '<http://metatrust.net|metatrust.net>',
});
const ruleSet = ses.ReceiptRuleSet.fromReceiptRuleSetName(
this,
'DefaultRuleSet',
'default-rule-set'
);
const emailHandlerFunctionArn = new SSMParameterReader(
this,
'Route53HostedZoneIdReader',
{
parameterName: EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM,
region: 'eu-central-1',
}
).getParameterValue();
new ses.ReceiptRule(this, 'ReceiptRule', {
ruleSet,
recipients: ['<http://expose.metatrust.net|expose.metatrust.net>'],
actions: [
new actions.Lambda({
function: sst.Function.fromFunctionArn(
this,
'emailHandler',
emailHandlerFunctionArn
),
}),
],
});
}
}
Islam Salem
04/29/2022, 7:19 PMFrank
eu-central-1
arn:aws:ssm:eu-central-1:072408395743:parameter/EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM
Frank
eu-west-1
arn:aws:ssm:eu-west-1:072408395743:parameter:EMAIL_HANDLER_FUNCTION_ARN_SSM_PARAM
Frank
Islam Salem
05/02/2022, 10:49 AMIslam Salem
05/02/2022, 11:39 AMsuper(scope, name, {
onUpdate: ssmAwsSdkCall,
policy: {
statements: [
new iam.PolicyStatement({
resources : ['*'],
actions: ['ssm:GetParameter'],
effect: iam.Effect.ALLOW,
}),
],
},
});
Frank
Islam Salem
05/09/2022, 3:59 PMFrank