Setting the file. One moment.
Authorizer · Deploying Custom Domain REST API · aws/agent-toolkit-for-aws · Skills Docs
ContentsBack to the top of the page 10
Setup DevOps Agent
33
AWS Deployment
RDS Oracle
Authorizer
Raw file
scripts/ authorizer.mjs
JavaScript · 90 lines · 4 KB
process.env.
AUTH_SECRET_ARN
) {
11 console. warn ( 'WARNING: Using hardcoded demo credentials. Set AUTH_SECRET_ARN env var for production.' );
12 }
13
14 console. log ( 'Received event:' , JSON . stringify (event, null , 2 ));
15
16 // Retrieve request parameters from the Lambda function input:
17 var headers = event.headers;
18 var queryStringParameters = event.queryStringParameters;
19 var pathParameters = event.pathParameters;
20 var stageVariables = event.stageVariables;
21
22 // Parse the input for the parameter values
23 var tmp = event.methodArn. split ( ':' );
24 var apiGatewayArnTmp = tmp[ 5 ]. split ( '/' );
25 var awsAccountId = tmp[ 4 ];
26 var region = tmp[ 3 ];
27 var restApiId = apiGatewayArnTmp[ 0 ];
28 var stage = apiGatewayArnTmp[ 1 ];
29 var method = apiGatewayArnTmp[ 2 ];
30 var resource = '/' ; // root resource
31 if (apiGatewayArnTmp[ 3 ]) {
32 resource += apiGatewayArnTmp[ 3 ];
33 }
34
35 // Perform authorization to return the Allow policy for correct parameters and
36 // the 'Unauthorized' error, otherwise.
37
38 // API Gateway lowercases header keys in REQUEST authorizer events
39 var headerAuth = headers.headerauth1 || headers.HeaderAuth1;
40
41 // Validate required parameters exist
42 if ( ! queryStringParameters || ! stageVariables) {
43 callback ( null , generateDeny ( 'me' , event.methodArn));
44 return ;
45 }
46
47 // WARNING: These hardcoded values are for demo only. In production, retrieve
48 // credentials from AWS Secrets Manager or environment variables. See:
49 // https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html
50 if (headerAuth === "headerValue1"
51 && queryStringParameters.QueryString1 === "queryValue1"
52 && stageVariables.StageVar1 === "stageValue1" ) {
53 callback ( null , generateAllow ( 'me' , event.methodArn));
54 } else {
55 callback ( null , generateDeny ( 'me' , event.methodArn));
56 }
57 }
58
59 // Help function to generate an IAM policy
60 var generatePolicy = function ( principalId , effect , resource ) {
61 // Required output:
62 var authResponse = {};
63 authResponse.principalId = principalId;
64 if (effect && resource) {
65 var policyDocument = {};
66 policyDocument.Version = '2012-10-17' ; // default version
67 policyDocument.Statement = [];
68 var statementOne = {};
69 statementOne.Action = 'execute-api:Invoke' ; // default action
70 statementOne.Effect = effect;
71 statementOne.Resource = resource;
72 policyDocument.Statement[ 0 ] = statementOne;
73 authResponse.policyDocument = policyDocument;
74 }
75 // Optional output with custom properties of the String, Number or Boolean type.
76 authResponse.context = {
77 "stringKey" : "stringval" ,
78 "numberKey" : 123 ,
79 "booleanKey" : true
80 };
81 return authResponse;
82 }
83
84 var generateAllow = function ( principalId , resource ) {
85 return generatePolicy (principalId, 'Allow' , resource);
86 }
87
88 var generateDeny = function ( principalId , resource ) {
89 return generatePolicy (principalId, 'Deny' , resource);
90 }