-
Notifications
You must be signed in to change notification settings - Fork 5
/
serverless.ts
97 lines (95 loc) · 2.59 KB
/
serverless.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*!
* Copyright © 2023 United States Government as represented by the
* Administrator of the National Aeronautics and Space Administration.
* All Rights Reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
export function cloudformationResources(collectionName: string) {
return {
OpenSearchServerlessCollection: {
Type: 'AWS::OpenSearchServerless::Collection',
DependsOn: [
'OpenSearchServerlessSecurityPolicyEncryption',
'OpenSearchServerlessSecurityPolicyNetwork',
'OpenSearchServerlessAccessPolicy',
],
Properties: {
Name: collectionName,
Type: 'SEARCH',
},
},
OpenSearchServerlessSecurityPolicyEncryption: {
Type: 'AWS::OpenSearchServerless::SecurityPolicy',
Properties: {
Type: 'encryption',
Name: collectionName,
Policy: JSON.stringify({
Rules: [
{
ResourceType: 'collection',
Resource: [`collection/${collectionName}`],
},
],
AWSOwnedKey: true,
}),
},
},
OpenSearchServerlessSecurityPolicyNetwork: {
Type: 'AWS::OpenSearchServerless::SecurityPolicy',
Properties: {
Type: 'network',
Name: collectionName,
Policy: JSON.stringify([
{
Rules: [
{
ResourceType: 'collection',
Resource: [`collection/${collectionName}`],
},
],
AllowFromPublic: true,
},
]),
},
},
OpenSearchServerlessAccessPolicy: {
Type: 'AWS::OpenSearchServerless::AccessPolicy',
Properties: {
Type: 'data',
Name: collectionName,
Policy: {
'Fn::Sub': [
JSON.stringify([
{
Rules: [
{
ResourceType: 'collection',
Resource: [`collection/${collectionName}`],
Permission: ['aoss:*'],
},
{
ResourceType: 'index',
Resource: [`index/${collectionName}/*`],
Permission: ['aoss:*'],
},
],
// eslint-disable-next-line no-template-curly-in-string
Principal: ['${Role}'],
},
]),
{
Role: { 'Fn::GetAtt': 'Role.Arn' },
},
],
},
},
},
}
}
export const services = {
node: {
'Fn::GetAtt': 'OpenSearchServerlessCollection.CollectionEndpoint',
},
sig4service: 'aoss',
}