diff --git a/README.md b/README.md
index 69463978..61fa5afc 100644
--- a/README.md
+++ b/README.md
@@ -245,7 +245,7 @@ To attach access management tags to resources in this module, you need the follo
| [security\_group\_rules](#input\_security\_group\_rules) | A list of security group rules to be added to the default vpc security group (default empty) |
| `[]` | no |
| [skip\_custom\_resolver\_hub\_creation](#input\_skip\_custom\_resolver\_hub\_creation) | Indicates whether to skip the configuration of a custom resolver in the hub VPC. Only relevant if enable\_hub is set to true. | `bool` | `false` | no |
| [skip\_spoke\_auth\_policy](#input\_skip\_spoke\_auth\_policy) | Set to true to skip the creation of an authorization policy between the DNS resolution spoke and hub, only enable this if a policy already exists between these two VPCs. See https://cloud.ibm.com/docs/vpc?topic=vpc-vpe-dns-sharing-s2s-auth&interface=ui for more details. | `bool` | `false` | no |
-| [subnets](#input\_subnets) | List of subnets for the vpc. For each item in each array, a subnet will be created. Items can be either CIDR blocks or total ipv4 addressess. Public gateways will be enabled only in zones where a gateway has been created |
object({ zone-1 = list(object({ name = string cidr = string public_gateway = optional(bool) acl_name = string no_addr_prefix = optional(bool, false) # do not automatically add address prefix for subnet, overrides other conditions if set to true subnet_tags = optional(list(string), []) })) zone-2 = optional(list(object({ name = string cidr = string public_gateway = optional(bool) acl_name = string no_addr_prefix = optional(bool, false) # do not automatically add address prefix for subnet, overrides other conditions if set to true subnet_tags = optional(list(string), []) }))) zone-3 = optional(list(object({ name = string cidr = string public_gateway = optional(bool) acl_name = string no_addr_prefix = optional(bool, false) # do not automatically add address prefix for subnet, overrides other conditions if set to true subnet_tags = optional(list(string), []) }))) })
| no |
+| [subnets](#input\_subnets) | List of subnets for the vpc. For each item in each array, a subnet will be created. Items can be either CIDR blocks or total ipv4 addresses. Public gateways will be enabled only in zones where a gateway has been created |
object({ zone-1 = list(object({ name = string cidr = string public_gateway = optional(bool) acl_name = string no_addr_prefix = optional(bool, false) # do not automatically add address prefix for subnet, overrides other conditions if set to true subnet_tags = optional(list(string), []) })) zone-2 = optional(list(object({ name = string cidr = string public_gateway = optional(bool) acl_name = string no_addr_prefix = optional(bool, false) # do not automatically add address prefix for subnet, overrides other conditions if set to true subnet_tags = optional(list(string), []) }))) zone-3 = optional(list(object({ name = string cidr = string public_gateway = optional(bool) acl_name = string no_addr_prefix = optional(bool, false) # do not automatically add address prefix for subnet, overrides other conditions if set to true subnet_tags = optional(list(string), []) }))) })
| no |
| [tags](#input\_tags) | List of Tags for the resource created | `list(string)` | `null` | no |
| [update\_delegated\_resolver](#input\_update\_delegated\_resolver) | If set to true, and if the vpc is configured to be a spoke for DNS resolution (enable\_hub\_vpc\_crn or enable\_hub\_vpc\_id set), then the spoke VPC resolver will be updated to a delegated resolver. | `bool` | `false` | no |
| [use\_existing\_dns\_instance](#input\_use\_existing\_dns\_instance) | Whether to use an existing dns instance. If true, existing\_dns\_instance\_id must be set. | `bool` | `false` | no |
diff --git a/common-dev-assets b/common-dev-assets
index 2ba5cc2c..abf631a1 160000
--- a/common-dev-assets
+++ b/common-dev-assets
@@ -1 +1 @@
-Subproject commit 2ba5cc2c867361e8bcf34bd95f7359cc03d82b25
+Subproject commit abf631a16a48a308e609896937e1eed16b4aae4e
diff --git a/dynamic_values/network_acls.tf b/dynamic_values/network_acls.tf
index 24b26a79..f2342c9e 100644
--- a/dynamic_values/network_acls.tf
+++ b/dynamic_values/network_acls.tf
@@ -8,7 +8,7 @@ locals {
network_acl.name => {
rules = flatten([
[
- # These rules cannot be added in a conditional operator due to inconsistant typing
+ # These rules cannot be added in a conditional operator due to inconsistent typing
# This will add all cluster_rules if the acl object contains prepend_ibm_rules as true
for rule in local.rules :
rule if network_acl.prepend_ibm_rules == true
diff --git a/examples/hub-spoke-manual-resolver/README.md b/examples/hub-spoke-manual-resolver/README.md
index 47b0eff5..49ad4b06 100644
--- a/examples/hub-spoke-manual-resolver/README.md
+++ b/examples/hub-spoke-manual-resolver/README.md
@@ -1,6 +1,6 @@
# Hub and Spoke VPC with manual DNS resolver Example
-This example demostrates how to deploy hub and spoke VPCs, inclusive of enabling DNS-sharing using a manual DNS resolver in the spoke VPC (as opposed to a delegated resolver).
+This example demonstrates how to deploy hub and spoke VPCs, inclusive of enabling DNS-sharing using a manual DNS resolver in the spoke VPC (as opposed to a delegated resolver).
Caveat: Using a manual resolver, as opposed to a delegated resolver requires to ensure that the custom resolver IPs in the hub VPC do not change outside the terraform lifecycle (which should be the case if you follow a proper IaC approach).
diff --git a/ibm_catalog.json b/ibm_catalog.json
index 8a6cc9c0..90f8ad28 100644
--- a/ibm_catalog.json
+++ b/ibm_catalog.json
@@ -71,8 +71,16 @@
"description": "Supports Key Management Service (KMS) encryption for the Object Storage bucket where flow logs are stored, enhancing data security."
},
{
- "title": "Optional Integrations",
- "description": "This solution can be integrated with [Cloud automation for Observability](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-observability-a3137d28-79e0-479d-8a24-758ebd5a0eab-global) that supports configuring resources for logging, monitoring and activity tracker event routing."
+ "title": "Sets up logging for the VPC instance",
+ "description": "Optionally, you can deploy [Cloud automation for Cloud Logs]((https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-cloud-logs-63d8ae58-fbf3-41ce-b844-0fb5b85882ab-global)) to route, alert, and visualize platform logs that are generated by your VPC instance."
+ },
+ {
+ "title": "Sets up monitoring operational metrics for the VPC instance",
+ "description": "Optionally, you can deploy [Cloud automation for Cloud Monitoring](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-cloud-monitoring-73debdbf-894f-4c14-81c7-5ece3a70b67d-global) to measure how users and applications interact with your VPC instance."
+ },
+ {
+ "title": "Sets up activity tracking for the VPC instance",
+ "description": "Optionally, you can deploy [Cloud automation for Activity Tracker Event Routing](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-activity-tracker-918453c3-4f97-4583-8c4a-83ef12fc7916-global) to route and securely store auditing events that are related to your VPC instance."
}
],
"support_details": "This product is in the community registry, support is handled through the [original repo](https://github.com/terraform-ibm-modules/terraform-ibm-landing-zone-vpc). If you experience issues, please open an issue in the repository [here](https://github.com/terraform-ibm-modules/terraform-ibm-landing-zone-vpc/issues). Please note this product is not supported via the IBM Cloud Support Center.",
@@ -106,7 +114,7 @@
"url": "https://raw.githubusercontent.com/terraform-ibm-modules/terraform-ibm-landing-zone-vpc/main/reference-architecture/deployable-architecture-vpc.svg",
"type": "image/svg+xml"
},
- "description": "This architecture supports provisioning and configuring a Virtual Private Cloud (VPC) environment. While the diagram illustrates a three-zone deployment, the VPC can also be provisioned in a single-zone or two-zone configuration, depending on your availability requirements.
The default configuration deploys a VPC with three zone subnets, configures the predefined ACLs, and attaches a public gateway with one of the subnets. Additional functionalities such as VPN gateway, VPE gateway, Flow Logs, security groups, etc., can be configured by providing the appropriate input values.
VPC Flow Logs are used to monitor and analyze traffic. To enable VPC Flow Logs, this solution automatically manages the following tasks: - Provisions a Cloud Object Storage (COS) instance using the COS deployable architecture. Alternatively, you can provide an existing COS instance if available. - Creates an object storage bucket to store flow logs in the provisioned or existing COS instance. - Supports creation of keys for a Key Management Service (KMS) if a KMS-encrypted bucket is enabled for enhanced security. You can use an existing KMS instance or create a new Key Protect instance using the KMS deployable architecture.
In addition, you have an option to integrate with Observability services. [Cloud automation for Observability](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-observability-a3137d28-79e0-479d-8a24-758ebd5a0eab-global) provides robust monitoring and logging capabilities to deliver deep operational insights into your VPC deployment. You can use IBM Cloud Activity Tracker Event Routing to monitor how users and applications interact with the VPC, supporting compliance and auditability. Cloud Logs can be enabled to collect, view, and analyze platform logs related to the VPC components. Furthermore, IBM Cloud Monitoring captures essential metrics such as CPU and memory utilization, helping you proactively monitor system performance and resource consumption.
This modular design provides flexibility and serves as a secure baseline for deploying compute workloads."
+ "description": "This architecture supports provisioning and configuring a Virtual Private Cloud (VPC) environment. While the diagram illustrates a three-zone deployment, the VPC can also be provisioned in a single-zone or two-zone configuration, depending on your availability requirements.
The default configuration deploys a VPC with three zone subnets, configures the predefined ACLs, and attaches a public gateway with one of the subnets. Additional functionalities such as VPN gateway, VPE gateway, Flow Logs, security groups, etc., can be configured by providing the appropriate input values.
VPC Flow Logs are used to monitor and analyse traffic. To enable VPC Flow Logs, this solution automatically manages the following tasks: - Provisions a Cloud Object Storage (COS) instance using the COS deployable architecture. Alternatively, you can provide an existing COS instance if available. - Creates an object storage bucket to store flow logs in the provisioned or existing COS instance. - Supports creation of keys for a Key Management Service (KMS) if a KMS-encrypted bucket is enabled for enhanced security. You can use an existing KMS instance or create a new Key Protect instance using the KMS deployable architecture.
In addition, you have an option to integrate with Observability services such as [Cloud automation for Cloud Monitoring](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-cloud-monitoring-73debdbf-894f-4c14-81c7-5ece3a70b67d-global) which provides robust monitoring capabilities and captures essential metrics such as CPU and memory utilization, helping you proactively monitor system performance and resource consumption, [Cloud automation for Activity Tracker Event Routing](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-activity-tracker-918453c3-4f97-4583-8c4a-83ef12fc7916-global) to monitor how users and applications interact with the VPC, supporting compliance and auditability, [Cloud automation for Cloud Logs](https://cloud.ibm.com/catalog/7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3/architecture/deploy-arch-ibm-cloud-logs-63d8ae58-fbf3-41ce-b844-0fb5b85882ab-global) can be enabled to collect, view, and analyze platform logs related to the VPC components."
}
]
},
@@ -122,8 +130,15 @@
"role_crns": [
"crn:v1:bluemix:public:iam::::role:Administrator"
],
- "service_name": "iam-identity",
- "notes": "[Optional] Required if Cloud automation for account configuration is enabled."
+ "service_name": "All Account Management services",
+ "notes": "[Optional] Required to create new resource groups when enabling the Account Configuration integration."
+ },
+ {
+ "role_crns": [
+ "crn:v1:bluemix:public:iam::::role:Administrator"
+ ],
+ "service_name": "All Identity and Access enabled services",
+ "notes": "[Optional] Required to create new resource groups with account settings when enabling the Account Configuration integration."
},
{
"role_crns": [
@@ -154,7 +169,7 @@
"crn:v1:bluemix:public:iam::::role:Editor"
],
"service_name": "sysdig-monitor",
- "notes": "[Optional] Required for consuming Observability deployable architecture which sets up Cloud monitoring."
+ "notes": "[Optional] Required to create an instance of Cloud Monitoring."
},
{
"role_crns": [
@@ -162,7 +177,31 @@
"crn:v1:bluemix:public:iam::::role:Editor"
],
"service_name": "logs",
- "notes": "[Optional] Required for consuming Observability deployable architecture which sets up Cloud logs."
+ "notes": "[Optional] Required to create an instance of Cloud Logs."
+ },
+ {
+ "role_crns": [
+ "crn:v1:bluemix:public:iam::::serviceRole:Writer",
+ "crn:v1:bluemix:public:iam::::role:Editor"
+ ],
+ "service_name": "atracker",
+ "notes": "[Optional] Required to set up Activity Tracker Event Routing of auditing events."
+ },
+ {
+ "service_name": "sysdig-secure",
+ "role_crns": [
+ "crn:v1:bluemix:public:iam::::serviceRole:Manager",
+ "crn:v1:bluemix:public:iam::::role:Editor"
+ ],
+ "notes": "[Optional] Required for creating and managing SCC Workload Protection instance."
+ },
+ {
+ "role_crns": [
+ "crn:v1:bluemix:public:iam::::role:Administrator",
+ "crn:v1:bluemix:public:iam::::serviceRole:Manager"
+ ],
+ "service_name": "apprapp",
+ "notes": "[Optional] Required for provisioning the App Configuration instance."
}
],
"configuration": [
@@ -558,7 +597,7 @@
],
"optional": true,
"on_by_default": true,
- "version": "v5.1.4"
+ "version": "v5.1.19"
},
{
"name": "deploy-arch-ibm-cos",
@@ -570,7 +609,7 @@
"catalog_id": "7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3",
"input_mapping": [
{
- "dependency_input": "resource_group_name",
+ "dependency_input": "existing_resource_group_name",
"version_input": "existing_resource_group_name",
"reference_version": true
},
@@ -590,17 +629,17 @@
],
"optional": true,
"on_by_default": true,
- "version": "v9.0.2"
+ "version": "v10.2.1"
},
{
- "name": "deploy-arch-ibm-observability",
- "description": "Configure IBM Cloud Logs, Cloud Monitoring and Activity Tracker event routing for analysing logs and metrics generated by the VPC instance.",
- "id": "a3137d28-79e0-479d-8a24-758ebd5a0eab-global",
- "version": "v3.0.3",
+ "name": "deploy-arch-ibm-cloud-logs",
+ "description": "Configure an IBM Cloud Logs instance to analyse the platform logs.",
+ "catalog_id": "7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3",
"flavors": [
- "instances"
+ "fully-configurable"
],
- "catalog_id": "7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3",
+ "id": "63d8ae58-fbf3-41ce-b844-0fb5b85882ab-global",
+ "version": "v1.6.11",
"optional": true,
"on_by_default": true,
"input_mapping": [
@@ -609,19 +648,121 @@
"version_input": "prefix",
"reference_version": true
},
+ {
+ "dependency_input": "existing_cos_instance_crn",
+ "version_input": "existing_cos_instance_crn",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "existing_kms_instance_crn",
+ "version_input": "existing_kms_instance_crn",
+ "reference_version": true
+ },
{
"dependency_input": "region",
"version_input": "region",
"reference_version": true
},
+ {
+ "dependency_input": "logs_routing_tenant_regions",
+ "version_input": "logs_routing_tenant_regions",
+ "reference_version": true
+ }
+ ]
+ },
+ {
+ "name": "deploy-arch-ibm-cloud-monitoring",
+ "description": "Sets up a Cloud Monitoring instance to collect the platform metrics.",
+ "id": "73debdbf-894f-4c14-81c7-5ece3a70b67d-global",
+ "version": "v1.6.4",
+ "flavors": [
+ "fully-configurable"
+ ],
+ "catalog_id": "7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3",
+ "optional": true,
+ "on_by_default": true,
+ "input_mapping": [
{
"dependency_input": "enable_platform_metrics",
"version_input": "enable_platform_metrics",
"reference_version": true
},
{
- "dependency_input": "logs_routing_tenant_regions",
- "version_input": "logs_routing_tenant_regions",
+ "dependency_input": "prefix",
+ "version_input": "prefix",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "region",
+ "version_input": "region",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "existing_cos_instance_crn",
+ "version_input": "existing_cos_instance_crn",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "existing_kms_instance_crn",
+ "version_input": "existing_kms_instance_crn",
+ "reference_version": true
+ }
+ ]
+ },
+ {
+ "name": "deploy-arch-ibm-activity-tracker",
+ "description": "Configure Activity Tracker Event Routing to route the auditing events.",
+ "id": "918453c3-4f97-4583-8c4a-83ef12fc7916-global",
+ "version": "v1.2.12",
+ "flavors": [
+ "fully-configurable"
+ ],
+ "catalog_id": "7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3",
+ "optional": true,
+ "on_by_default": true,
+ "input_mapping": [
+ {
+ "dependency_input": "prefix",
+ "version_input": "prefix",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "region",
+ "version_input": "region",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "existing_cos_instance_crn",
+ "version_input": "existing_cos_instance_crn",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "existing_kms_instance_crn",
+ "version_input": "existing_kms_instance_crn",
+ "reference_version": true
+ }
+ ]
+ },
+ {
+ "name": "deploy-arch-ibm-scc-workload-protection",
+ "description": "Configure an IBM Cloud Security and Compliance Center Workload Protection instance to help you manage security and compliance for your organization.",
+ "id": "4322cf44-2289-49aa-a719-dd79e39b14dc-global",
+ "version": "v1.11.1",
+ "flavors": [
+ "fully-configurable"
+ ],
+ "catalog_id": "7a4d68b4-cf8b-40cd-a3d1-f49aff526eb3",
+ "optional": true,
+ "on_by_default": true,
+ "input_mapping": [
+ {
+ "dependency_input": "prefix",
+ "version_input": "prefix",
+ "reference_version": true
+ },
+ {
+ "dependency_input": "region",
+ "version_input": "region",
"reference_version": true
}
]
diff --git a/network_acls.tf b/network_acls.tf
index e40d7842..6f124d34 100644
--- a/network_acls.tf
+++ b/network_acls.tf
@@ -132,7 +132,7 @@ locals {
rules = flatten([
# Prepend ibm rules
[
- # These rules cannot be added in a conditional operator due to inconsistant typing
+ # These rules cannot be added in a conditional operator due to inconsistent typing
# This will add all internal rules if the acl object contains add_ibm_cloud_internal_rules rules
for rule in local.ibm_cloud_internal_rules :
rule if network_acl.add_ibm_cloud_internal_rules == true && network_acl.prepend_ibm_rules == true
@@ -190,7 +190,7 @@ resource "ibm_is_network_acl" "network_acl" {
# equal to null and only include rules where one of the values is not null
# this allows for patterns to include `tcp` blocks for conversion to list
# while still not creating a rule. default behavior would force the rule to
- # be included if all indiviual values are set to null
+ # be included if all individual values are set to null
: length([
for value in ["port_min", "port_max", "source_port_min", "source_port_min"] :
true if lookup(rules.value["tcp"], value, null) == null
@@ -216,7 +216,7 @@ resource "ibm_is_network_acl" "network_acl" {
# equal to null and only include rules where one of the values is not null
# this allows for patterns to include `udp` blocks for conversion to list
# while still not creating a rule. default behavior would force the rule to
- # be included if all indiviual values are set to null
+ # be included if all individual values are set to null
: length([
for value in ["port_min", "port_max", "source_port_min", "source_port_min"] :
true if lookup(rules.value["udp"], value, null) == null
@@ -242,7 +242,7 @@ resource "ibm_is_network_acl" "network_acl" {
# equal to null and only include rules where one of the values is not null
# this allows for patterns to include `udp` blocks for conversion to list
# while still not creating a rule. default behavior would force the rule to
- # be included if all indiviual values are set to null
+ # be included if all individual values are set to null
: length([
for value in ["code", "type"] :
true if lookup(rules.value["icmp"], value, null) == null
diff --git a/reference-architecture/deployable-architecture-vpc.svg b/reference-architecture/deployable-architecture-vpc.svg
index 4dd8db8c..c09eb30a 100644
--- a/reference-architecture/deployable-architecture-vpc.svg
+++ b/reference-architecture/deployable-architecture-vpc.svg
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
ACL
ACL
IBM Cloud
IBM Cloud
Region
RegionResource GroupFlow Logs bucket
[Optional] Object Storage
[Optional] Object Storage
VPC
VPC
Zone 3
Zone 3
Zone 2
Zone 2
Zone 1
Zone 1
ACL
ACL
Subnet
Subnet [Optional] Public Gateway[Optional] VPN Gateway [Optional] Virtual Private Endpoints