Skip to content

Commit 3c3532f

Browse files
authored
Merge branch 'master' into SAAS-3774
2 parents 5bb5d51 + 713f047 commit 3c3532f

21 files changed

Lines changed: 2014 additions & 1 deletion

‎collectors/oracle/collector.js‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,14 @@ var calls = {
114114
restVersion: '/20171215',
115115
}
116116
},
117+
fileSystem: {
118+
list: {
119+
api: 'fileStorage',
120+
filterKey: ['compartmentId'],
121+
filterValue: ['compartmentId'],
122+
restVersion: '/20171215',
123+
}
124+
},
117125
mountTarget: {
118126
list: {
119127
api: 'fileStorage',
@@ -132,6 +140,14 @@ var calls = {
132140
filterValue: ['compartmentId'],
133141
}
134142
},
143+
defaultTags: {
144+
list: {
145+
api: 'iam',
146+
filterKey: ['compartmentId'],
147+
filterValue: ['compartmentId'],
148+
restVersion: '/20160918'
149+
}
150+
},
135151
waasPolicy: {
136152
list: {
137153
api: 'waas',
@@ -140,6 +156,22 @@ var calls = {
140156
filterValue: ['compartmentId'],
141157
}
142158
},
159+
topics: {
160+
list: {
161+
api: 'notification',
162+
restVersion: '/20181201',
163+
filterKey: ['compartmentId'],
164+
filterValue: ['compartmentId'],
165+
}
166+
},
167+
subscriptions: {
168+
list: {
169+
api: 'notification',
170+
restVersion: '/20181201',
171+
filterKey: ['compartmentId'],
172+
filterValue: ['compartmentId'],
173+
}
174+
},
143175
policy: {
144176
list: {
145177
api: 'iam',
@@ -407,6 +439,17 @@ var postcalls = {
407439
restVersion: '/20180608'
408440
}
409441
},
442+
cluster: {
443+
get: {
444+
api: 'oke',
445+
reliesOnService: ['cluster'],
446+
reliesOnCall: ['list'],
447+
restVersion: '/20180222',
448+
filterKey: ['id'],
449+
filterValue: ['id'],
450+
filterConfig: [false]
451+
},
452+
}
410453
};
411454

412455
// Important Note: All relies must be passed in an array format []

‎exports.js‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,8 @@ module.exports = {
811811
'bootVolumeRestorable' : require(__dirname + '/plugins/oracle/compute/bootVolumeRestorable.js'),
812812
'bootVolumeBackupEnabled' : require(__dirname + '/plugins/oracle/compute/bootVolumeBackupEnabled.js'),
813813
'instancePolicyProtection' : require(__dirname + '/plugins/oracle/compute/instancePolicyProtection.js'),
814+
'bootVolumeCMKEncryption' : require(__dirname + '/plugins/oracle/compute/bootVolumeCMKEncryption.js'),
815+
'legacyEndpointDisabled' : require(__dirname + '/plugins/oracle/compute/legacyEndpointDisabled.js'),
814816

815817
'usersMfaEnabled' : require(__dirname + '/plugins/oracle/identity/usersMfaEnabled.js'),
816818
'passwordRequiresLowercase' : require(__dirname + '/plugins/oracle/identity/passwordRequiresLowercase.js'),
@@ -828,6 +830,8 @@ module.exports = {
828830
'userCustomerSecretKeysRotated' : require(__dirname + '/plugins/oracle/identity/userCustomerSecretKeysRotated.js'),
829831
'userAPIKeysRotated' : require(__dirname + '/plugins/oracle/identity/userAPIKeysRotated.js'),
830832
'usersPasswordLastUsed' : require(__dirname + '/plugins/oracle/identity/usersPasswordLastUsed.js'),
833+
'defaultTagsForResources' : require(__dirname + '/plugins/oracle/identity/defaultTagsForResources.js'),
834+
'notificationTopicSubscription' : require(__dirname + '/plugins/oracle/identity/notificationTopicSubscription.js'),
831835

832836
'openSSH' : require(__dirname + '/plugins/oracle/networking/openSSH.js'),
833837
'openOracleAutoDataWarehouse' : require(__dirname + '/plugins/oracle/networking/openOracleAutoDataWarehouse.js'),
@@ -860,6 +864,7 @@ module.exports = {
860864
'lbNSGEnabled' : require(__dirname + '/plugins/oracle/networking/lbNSGEnabled.js'),
861865
'lbNoInstances' : require(__dirname + '/plugins/oracle/networking/lbNoInstances.js'),
862866
'wafPublicIpEnabled' : require(__dirname + '/plugins/oracle/networking/wafPublicIpEnabled.js'),
867+
'inboundSecurityLists' : require(__dirname + '/plugins/oracle/networking/inboundSecurityLists.js'),
863868

864869
'multipleSubnets' : require(__dirname + '/plugins/oracle/networking/multipleSubnets.js'),
865870
'subnetMultiAd' : require(__dirname + '/plugins/oracle/networking/subnetMultiAd.js'),
@@ -869,9 +874,11 @@ module.exports = {
869874
'preAuthRequestsAccess' : require(__dirname + '/plugins/oracle/objectstore/preAuthRequestsAccess.js'),
870875
'objectPolicyProtection' : require(__dirname + '/plugins/oracle/objectstore/objectPolicyProtection.js'),
871876
'bucketCMKEncryption' : require(__dirname + '/plugins/oracle/objectstore/bucketCMKEncryption.js'),
877+
'bucketObjectEvents' : require(__dirname + '/plugins/oracle/objectstore/bucketObjectEvents.js'),
872878

873879
'nfsPublicAccess' : require(__dirname + '/plugins/oracle/filestorage/nfsPublicAccess.js'),
874880
'nfsPolicyProtection' : require(__dirname + '/plugins/oracle/filestorage/nfsPolicyProtection.js'),
881+
'fileSystemsCMKEncryption' : require(__dirname + '/plugins/oracle/filestorage/fileSystemsCMKEncryption.js'),
875882

876883
'dbBackupEnabled' : require(__dirname + '/plugins/oracle/database/dbBackupEnabled.js'),
877884
'dbPrivateSubnetOnly' : require(__dirname + '/plugins/oracle/database/dbPrivateSubnetOnly.js'),
@@ -886,6 +893,7 @@ module.exports = {
886893
'logRetentionPeriod' : require(__dirname + '/plugins/oracle/audit/logRetentionPeriod.js'),
887894

888895
'okePrivateEndpoint' : require(__dirname + '/plugins/oracle/oke/okePrivateEndpoint.js'),
896+
'okeSecretsEncrypted' : require(__dirname + '/plugins/oracle/oke/okeSecretsEncrypted.js'),
889897
},
890898
google: {
891899
'excessiveFirewallRules' : require(__dirname + '/plugins/google/vpcnetwork/excessiveFirewallRules.js'),

‎helpers/oracle/regions.js‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,14 @@ module.exports = {
4747
authenticationPolicy: regions,
4848
exprt: regions,
4949
exportSummary: regions,
50+
fileSystem: regions,
5051
compartment: regions,
5152
bucket: regions,
5253
waasPolicy: regions,
54+
topics: regions,
55+
subscriptions: regions,
5356
policy: regions,
57+
defaultTags: ['default'],
5458
subnet: regions,
5559
dbHome: regions,
5660
database: regions,

‎other_modules/oci/services.json‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,43 @@
3434
"method": "GET",
3535
"path": "clusters",
3636
"endpoint": "containerengine.{{region}}.oci.oraclecloud.com"
37+
},
38+
"get": {
39+
"encodedGet": "id",
40+
"allowedQueryStrings": [
41+
"compartmentId",
42+
"page",
43+
"limit"
44+
],
45+
"method": "GET",
46+
"path": "clusters",
47+
"endpoint": "containerengine.{{region}}.oci.oraclecloud.com"
48+
}
49+
}
50+
},
51+
"notification": {
52+
"topics": {
53+
"list": {
54+
"allowedQueryStrings": [
55+
"compartmentId",
56+
"limit",
57+
"page"
58+
],
59+
"method": "GET",
60+
"path": "topics",
61+
"endpoint": "notification.{{region}}.oraclecloud.com"
62+
}
63+
},
64+
"subscriptions": {
65+
"list": {
66+
"allowedQueryStrings": [
67+
"compartmentId",
68+
"limit",
69+
"page"
70+
],
71+
"method": "GET",
72+
"path": "subscriptions",
73+
"endpoint": "notification.{{region}}.oraclecloud.com"
3774
}
3875
}
3976
},
@@ -279,6 +316,16 @@
279316
"endpoint": "filestorage.{{region}}.oraclecloud.com"
280317
}
281318
},
319+
"fileSystem": {
320+
"list": {
321+
"allowedQueryStrings": [
322+
"opc-request-id", "displayName", "availabilityDomain", "exportSetId", "id", "compartmentId", "limit", "page", "sortBy", "sortOrder", "lifecycleState"
323+
],
324+
"method": "GET",
325+
"path": "fileSystems",
326+
"endpoint": "filestorage.{{region}}.oraclecloud.com"
327+
}
328+
},
282329
"mountTarget": {
283330
"list": {
284331
"allowedQueryStrings": [
@@ -317,6 +364,18 @@
317364
"endpoint": "identity.{{region}}.oraclecloud.com"
318365
}
319366
},
367+
"defaultTags": {
368+
"list" : {
369+
"allowedQueryStrings": [
370+
"compartmentId",
371+
"page",
372+
"limit"
373+
],
374+
"method": "GET",
375+
"path": "tagDefaults",
376+
"endpoint": "identity.{{region}}.oraclecloud.com"
377+
}
378+
},
320379
"group": {
321380
"list": {
322381
"allowedQueryStrings": [
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
var async = require('async');
2+
var helpers = require('../../../helpers/oracle/');
3+
4+
module.exports = {
5+
title: 'Boot Volume CMK Encryption',
6+
category: 'Block Storage',
7+
domain: 'Storage',
8+
description: 'Ensures that boot volumes have encryption enabled using desired protection level.',
9+
more_info: 'By default, boot volumes are encrypted using an Oracle-managed master encryption key. To have better control over the encryption process, you can use Customer-Managed Keys (CMKs).',
10+
recommended_action: 'Ensure all boot volumes have desired encryption level.',
11+
link: 'https://docs.oracle.com/en-us/iaas/Content/Security/Reference/blockstorage_security.htm#data-encryption',
12+
apis: ['vault:list', 'keys:list', 'bootVolume:list'],
13+
settings: {
14+
volume_encryption_level: {
15+
name: 'Boot Volume Encryption Level',
16+
description: 'Desired protection level for boot volumes. default: oracle-managed, cloudcmek: customer managed encryption keys, ' +
17+
'cloudhsm: customer managed HSM encryption key',
18+
regex: '^(default|cloudcmek|cloudhsm)$',
19+
default: 'cloudcmek'
20+
}
21+
},
22+
23+
run: function(cache, settings, callback) {
24+
var results = [];
25+
var source = {};
26+
var regions = helpers.regions(settings.govcloud);
27+
var keysObj = {};
28+
29+
let desiredEncryptionLevelStr = settings.volume_encryption_level || this.settings.volume_encryption_level.default;
30+
var desiredEncryptionLevel = helpers.PROTECTION_LEVELS.indexOf(desiredEncryptionLevelStr);
31+
32+
async.series([
33+
function(cb) {
34+
async.each(regions.keys, function(region, rcb) {
35+
let keys = helpers.addSource(
36+
cache, source, ['keys', 'list', region]);
37+
if (keys && keys.data && keys.data.length) helpers.listToObj(keysObj, keys.data, 'id');
38+
rcb();
39+
}, function() {
40+
cb();
41+
});
42+
},
43+
function(cb) {
44+
async.each(regions.bootVolume, function(region, rcb) {
45+
46+
if (helpers.checkRegionSubscription(cache, source, results, region)) {
47+
48+
var bootVolumes = helpers.addSource(cache, source,
49+
['bootVolume', 'list', region]);
50+
51+
if (!bootVolumes) return rcb();
52+
53+
if (bootVolumes.err || !bootVolumes.data) {
54+
helpers.addResult(results, 3,
55+
'Unable to query for boot volumes: ' + helpers.addError(bootVolumes), region);
56+
return rcb();
57+
}
58+
59+
if (!bootVolumes.data.length) {
60+
helpers.addResult(results, 0, 'No boot volumes found', region);
61+
return rcb();
62+
}
63+
64+
bootVolumes.data.forEach(bootVolume => {
65+
if (bootVolume.lifecycleState && bootVolume.lifecycleState === 'TERMINATED') return;
66+
67+
let currentEncryptionLevel = 1; //default
68+
69+
if (bootVolume.kmsKeyId) {
70+
currentEncryptionLevel = helpers.getProtectionLevel(keysObj[bootVolume.kmsKeyId], helpers.PROTECTION_LEVELS);
71+
}
72+
73+
let currentEncryptionLevelStr = helpers.PROTECTION_LEVELS[currentEncryptionLevel];
74+
75+
if (currentEncryptionLevel >= desiredEncryptionLevel) {
76+
helpers.addResult(results, 0,
77+
`Boot volume (${bootVolume.displayName}) has encryption level ${currentEncryptionLevelStr} which is greater than or equal to ${desiredEncryptionLevelStr}`, region, bootVolume.id);
78+
} else {
79+
helpers.addResult(results, 2,
80+
`Boot volume (${bootVolume.displayName}) has encryption level ${currentEncryptionLevelStr} which is less than ${desiredEncryptionLevelStr}`, region, bootVolume.id);
81+
}
82+
});
83+
}
84+
85+
rcb();
86+
}, function() {
87+
cb();
88+
});
89+
}
90+
], function() {
91+
// Global checking goes here
92+
callback(null, results, source);
93+
});
94+
}
95+
};

0 commit comments

Comments
 (0)