Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

queries(pulumi): add pulumi azure security queries #5658

Merged
merged 4 commits into from
Aug 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"queryName": "Storage Account Not Forcing HTTPS",
"severity": "HIGH",
"category": "Encryption",
"descriptionText": "See that Storage Accounts forces the use of HTTPS",
"descriptionText": "Storage Accounts should enforce the use of HTTPS",
"descriptionUrl": "https://docs.ansible.com/ansible/latest/collections/azure/azcollection/azure_rm_storageaccount_module.html#parameter-https_only",
"platform": "Ansible",
"descriptionID": "bc830876",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"id": "49e30ac8-f58e-4222-b488-3dcb90158ec1",
"queryName": "Redis Cache Allows Non SSL Connections",
"severity": "MEDIUM",
"category": "Encryption",
"descriptionText": "Redis Cache resource should not allow non-SSL connections.",
"descriptionUrl": "https://www.pulumi.com/registry/packages/azure-native/api-docs/cache/redis/#enablenonsslport_yaml",
"platform": "Pulumi",
"descriptionID": "64acf7a6",
"cloudProvider": "azure"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package Cx

import data.generic.common as common_lib
import data.generic.pulumi as plm_lib

CxPolicy[result] {
resource := input.document[i].resources[name]
resource.type == "azure-native:cache:Redis"

resource.properties.enableNonSslPort == true

result := {
"documentId": input.document[i].id,
"resourceType": resource.type,
"resourceName": plm_lib.getResourceName(resource, name),
"searchKey": sprintf("resources[%s].properties.enableNonSslPort", [name]),
"issueType": "IncorrectValue",
"keyExpectedValue": "Redis Cache should have attribute 'enableNonSslPort' set to false",
"keyActualValue": "Redis Cache has attribute 'enableNonSslPort' set to true",
"searchLine": common_lib.build_search_line(["resources", name, "properties"], ["enableNonSslPort"]),
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: azure-aks
runtime: yaml
description: An Aks cluster
resources:
redis:
type: azure-native:cache:Redis
properties:
enableNonSslPort: false
location: West US
minimumTlsVersion: 1.2
name: cache1
redisConfiguration:
maxmemoryPolicy: allkeys-lru
replicasPerMaster: 2
resourceGroupName: rg1
shardCount: 2
sku:
capacity: 1
family: P
name: Premium
staticIP: 192.168.0.5
subnetId: /subscriptions/subid/resourceGroups/rg2/providers/Microsoft.Network/virtualNetworks/network1/subnets/subnet1
zones:
- 1

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: azure-aks
runtime: yaml
description: An Aks cluster
resources:
redis:
type: azure-native:cache:Redis
properties:
enableNonSslPort: true
location: West US
minimumTlsVersion: 1.2
name: cache1
redisConfiguration:
maxmemoryPolicy: allkeys-lru
replicasPerMaster: 2
resourceGroupName: rg1
shardCount: 2
sku:
capacity: 1
family: P
name: Premium
staticIP: 192.168.0.5
subnetId: /subscriptions/subid/resourceGroups/rg2/providers/Microsoft.Network/virtualNetworks/network1/subnets/subnet1
zones:
- 1

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{
"queryName": "Redis Cache Allows Non SSL Connections",
"severity": "MEDIUM",
"line": 8,
"fileName": "positive.yaml"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"id": "cb8e4bf0-903d-45c6-a278-9a947d82a27b",
"queryName": "Storage Account Not Forcing HTTPS",
"severity": "HIGH",
"category": "Encryption",
"descriptionText": "Storage Accounts should enforce the use of HTTPS",
"descriptionUrl": "https://www.pulumi.com/registry/packages/azure-native/api-docs/storage/storageaccount/#enablehttpstrafficonly_yaml",
"platform": "Pulumi",
"descriptionID": "406540e1",
"cloudProvider": "azure"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package Cx

import data.generic.common as common_lib
import data.generic.pulumi as plm_lib

CxPolicy[result] {
resource := input.document[i].resources[name]
resource.type == "azure-native:storage:StorageAccount"

resource.properties.enableHttpsTrafficOnly == false

result := {
"documentId": input.document[i].id,
"resourceType": resource.type,
"resourceName": plm_lib.getResourceName(resource, name),
"searchKey": sprintf("resources[%s].properties.enableHttpsTrafficOnly", [name]),
"issueType": "IncorrectValue",
"keyExpectedValue": "Storage Account should have attribute 'enableHttpsTrafficOnly' set to true",
"keyActualValue": "Storage Account has attribute 'enableHttpsTrafficOnly' set to false",
"searchLine": common_lib.build_search_line(["resources", name, "properties"], ["enableHttpsTrafficOnly"]),
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: azure-aks
runtime: yaml
description: An Aks cluster
resources:
storageAccount:
type: azure-native:storage:StorageAccount
properties:
accountName: sto4445
enableHttpsTrafficOnly: true
enableNfsV3: true
isHnsEnabled: true
kind: BlockBlobStorage
location: eastus
networkRuleSet:
bypass: AzureServices
defaultAction: Allow
ipRules: []
virtualNetworkRules:
- virtualNetworkResourceId: /subscriptions/{subscription-id}/resourceGroups/res9101/providers/Microsoft.Network/virtualNetworks/net123/subnets/subnet12
resourceGroupName: res9101
sku:
name: Premium_LRS

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: azure-aks
runtime: yaml
description: An Aks cluster
resources:
storageAccount:
type: azure-native:storage:StorageAccount
properties:
accountName: sto4445
enableHttpsTrafficOnly: false
enableNfsV3: true
isHnsEnabled: true
kind: BlockBlobStorage
location: eastus
networkRuleSet:
bypass: AzureServices
defaultAction: Allow
ipRules: []
virtualNetworkRules:
- virtualNetworkResourceId: /subscriptions/{subscription-id}/resourceGroups/res9101/providers/Microsoft.Network/virtualNetworks/net123/subnets/subnet12
resourceGroupName: res9101
sku:
name: Premium_LRS

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{
"queryName": "Storage Account Not Forcing HTTPS",
"severity": "HIGH",
"line": 9,
"fileName": "positive.yaml"
}
]
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"queryName": "Storage Account Not Forcing HTTPS",
"severity": "HIGH",
"category": "Encryption",
"descriptionText": "See that Storage Accounts forces the use of HTTPS",
"descriptionText": "Storage Accounts should enforce the use of HTTPS",
"descriptionUrl": "https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account",
"platform": "Terraform",
"descriptionID": "ab6688ca",
Expand Down
1 change: 1 addition & 0 deletions test/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ var (
"../assets/queries/pulumi/aws": {FileKind: []model.FileKind{model.KindYAML}, Platform: "pulumi"},
"../assets/queries/pulumi/gcp": {FileKind: []model.FileKind{model.KindYAML}, Platform: "pulumi"},
"../assets/queries/pulumi/kubernetes": {FileKind: []model.FileKind{model.KindYAML}, Platform: "pulumi"},
"../assets/queries/pulumi/azure": {FileKind: []model.FileKind{model.KindYAML}, Platform: "pulumi"},
"../assets/queries/k8s": {FileKind: []model.FileKind{model.KindYAML, model.KindJSON}, Platform: "k8s"},
"../assets/queries/cloudFormation/aws": {FileKind: []model.FileKind{model.KindYAML, model.KindJSON}, Platform: "cloudFormation"},
"../assets/queries/cloudFormation/aws_bom": {FileKind: []model.FileKind{model.KindYAML, model.KindJSON}, Platform: "cloudFormation"},
Expand Down