Skip to content

Commit efc59a2

Browse files
committed
fix(searchable): enforce TLS 1.2 on OpenSearch domains (v1 transformer)
1 parent 831edd1 commit efc59a2

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

packages/graphql-elasticsearch-transformer/src/__tests__/SearchableModelTransformer.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,35 @@ test('SearchableModelTransformer with external versioning', () => {
145145
expect(out.resolvers[expectedSearchResponseResolver]).toBeDefined();
146146
expect(out.resolvers[expectedSearchResponseResolver]).toMatchSnapshot();
147147
});
148+
149+
describe('Elasticsearch domain TLS configuration', () => {
150+
test('enforces HTTPS with TLS 1.2 on the Elasticsearch domain', () => {
151+
const validSchema = `
152+
type Post @model @searchable {
153+
id: ID!
154+
title: String!
155+
createdAt: String
156+
updatedAt: String
157+
}
158+
`;
159+
const transformer = new GraphQLTransform({
160+
transformers: [new DynamoDBModelTransformer(), new SearchableModelTransformer()],
161+
featureFlags,
162+
});
163+
const out = transformer.transform(validSchema);
164+
expect(out).toBeDefined();
165+
166+
const searchableStack = out.stacks['SearchableStack'];
167+
expect(searchableStack).toBeDefined();
168+
expect(searchableStack.Resources).toBeDefined();
169+
170+
const esDomain = searchableStack.Resources!['ElasticSearchDomain'];
171+
expect(esDomain).toBeDefined();
172+
expect(esDomain.Type).toEqual('AWS::Elasticsearch::Domain');
173+
174+
const domainEndpointOptions = esDomain.Properties.DomainEndpointOptions;
175+
expect(domainEndpointOptions).toBeDefined();
176+
expect(domainEndpointOptions.EnforceHTTPS).toBeUndefined();
177+
expect(domainEndpointOptions.TLSSecurityPolicy).toBe('Policy-Min-TLS-1-2-2019-07');
178+
});
179+
});

packages/graphql-elasticsearch-transformer/src/resources.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,9 @@ export class ResourceFactory {
494494
return new Elasticsearch.Domain({
495495
DomainName: this.domainName(),
496496
ElasticsearchVersion: '6.2',
497+
DomainEndpointOptions: {
498+
TLSSecurityPolicy: 'Policy-Min-TLS-1-2-2019-07',
499+
},
497500
ElasticsearchClusterConfig: {
498501
ZoneAwarenessEnabled: false,
499502
InstanceCount: Fn.Ref(ResourceConstants.PARAMETERS.ElasticsearchInstanceCount),
@@ -504,7 +507,7 @@ export class ResourceFactory {
504507
VolumeType: 'gp2',
505508
VolumeSize: Fn.Ref(ResourceConstants.PARAMETERS.ElasticsearchEBSVolumeGB),
506509
},
507-
});
510+
} as any);
508511
}
509512

510513
/**

0 commit comments

Comments
 (0)