diff --git a/.gitignore b/.gitignore
index 1c60cada..afb08302 100644
--- a/.gitignore
+++ b/.gitignore
@@ -122,6 +122,8 @@ dist
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
+.vscode/
+
# yarn v2
.yarn/cache
.yarn/unplugged
@@ -138,4 +140,4 @@ docs/mods/servicenow
docs/mods/osquery
docs/mods/kubernetes
docs/reference/graphql
-sidebar-generated.json
\ No newline at end of file
+sidebar-generated.json
diff --git a/docs/apollo/index.md b/docs/apollo/index.md
new file mode 100644
index 00000000..f0f4e3e4
--- /dev/null
+++ b/docs/apollo/index.md
@@ -0,0 +1,6 @@
+---
+id: apollo
+title: Turbot Guardrails (Apollo)
+---
+
+# Turbot Guardrails (Apollo)
\ No newline at end of file
diff --git a/docs/artemis/console/index.md b/docs/artemis/console/index.md
new file mode 100644
index 00000000..da9c2604
--- /dev/null
+++ b/docs/artemis/console/index.md
@@ -0,0 +1,90 @@
+---
+title: Console
+sidebar_label: Console
+---
+
+# Guardrails Console
+
+The Turbot Guardrails Console provides a web-based interface for managing cloud governance policies, monitoring compliance, and tracking resource states across your cloud infrastructure. This documentation covers the main features and navigation of the console interface.
+
+
+## Navigation
+The console is organized into several main sections accessible via the left sidebar:
+
+### POSTURE
+Guardrails enables you to define and deploy your cloud governance *posture* — The items that define and enforce your cloud security, FinOps, and operational policies. The posture section enables you to configure, observe, analyze, and troubleshoot your cloud governance rules.
+
+- **Guardrails** are deployable units of policy enforcement that implement a control objective, such as enforcing encryption, monitoring access, and securing networking configurations. Guardrails allow you to define your policies and provide controls to audit or enforce them, enabling you to [raise the bar](https://cloudgovernance.org/library/the-cloud-governance-loop) for your organization.
+
+- **Rollouts** provide a predictable, ordered mechanism for deploying guardrails to your organization. When you create a rollout, you choose one or more guardrails that you would like to deploy, select the accounts to deploy them to, and set a deployment and communication schedule for promoting the guardrails through phases. Rollouts help you [make change happen](https://cloudgovernance.org/library/the-cloud-governance-loop)!
+
+
+### INVENTORY
+
+The Turbot Guardrails CMDB provides a flexible, dynamic asset inventory that enables you to [know your cloud](https://cloudgovernance.org/library/the-cloud-governance-loop). The inventory section lets you import and manage cloud accounts, as well as search and inspect your cloud resources.
+
+- **Accounts** are the fundamental organizational unit in cloud computing that serve as a container for your cloud resources and services. To manage resources, you need to connect one or more accounts (AWS accounts, Azure subscriptions, GCP projects, GitHub repositories, etc).
+
+- **Resources** represent objects that are managed by Guardrails, such as AWS S3 buckets, GCP compute instances, Azure SQL databases, etc.
+
+
+### Other
+
+- **Reports** provide curated, purpose-driven views to give you insight into the compliance, governance, inventory, and configuration of your environment.
+
+
+- Your name will appear near the bottom of the sidebar. This link allows you to view your user **profile** information and manage your API access keys.
+
+
+- If you have sufficient permission, the **Admin** link also appears near the bottom of the sidebar. The admin area is where you manage your guardrails installation. Admin activities include mod installation and management, setting permissions, configuring authentication, and managing global inventory and settings.
+
+- **Help** is available at the bottom of the sidebar
+
+
+## Searching
+
+Many pages include a search box at the top of the page to allow you to quickly find what you are looking for. Guardrails' basic search capability is intuitive - simply enter text and Guardrails will perform a case-insensitive search against all the properties of all objects.
+
+If multiple search terms are specified, Guardrails will search for items that contain both terms. For example, a search for `bucket demo` will return all resources that contain both `bucket` AND `demo`.
+
+A filter can be negated with the `-` or `!` character. For example, to find resources that do not contain `demo`, you can search for `!demo` or `-demo`
+
+The `search` keyword may be used to explicitly specify a full-text search. In
+addition to the full-text filtering behavior described previously, `search`
+allows you to specify "OR" conditions using a comma-separated list of terms. For example, to find resources that contain either `bucket` or `demo`, use the `search` keyword: `search:bucket,demo`
+
+Regular Expressions are also supported, and should be delimited with forward
+slashes. Note that regular expressions will search the title only.
+
+
+### More full-text examples
+
+| Aim | Filter text |
+| ---------------------------------------------- | ---------------- |
+| Require foo | `foo` |
+| Exclude foo | `-foo` |
+| Exclude foo | `!foo` |
+| Require "foo" and "bar" | `foo bar` |
+| Require "foo bar" | `"foo bar"` |
+| Exclude "foo bar" | `!"foo bar"` |
+| Require foo or bar | `search:foo,bar` |
+| title starts with "foo" | `/^foo/` |
+| title contains "foo", case insensitive | `/foo/i` |
+| title does not contain "foo", case insensitive | `!/foo/i` |
+
+
+Guardrails also supports advanced searching and filtering on specific properties, filtering relative dates and times, CIDR matching, and more. See the [Guardrails filter syntax](/guardrails/docs/reference/filter) reference documentation for details.
+
+
+## Filtering and Grouping
+
+Many pages provide a **Filter & Group** button to allow you to customize your view of the data. For example, you may want to group your alarms by account, guardrail, then control, and only show `alarms` and `errors` for guardrails that are in `check` or `enforce` phase.
+
+Click the **Filter & Group** button to show/hide the filtering and grouping pane.
+
+
+## Developer Tab
+
+The Guardrails UI provides a simple yet powerful way to manage your governance posture, but you can also manage your guardrails installation using Terraform or via the API. To assist you, the console provides a **Developers** panel. The developer panel provides context-dependent code for the current view, including the GraphQL APIs, CLI commands, and Terraform plans corresponding to the current view.
+
+Click the purple button at the top right of the page to show and hide the panel.
\ No newline at end of file
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-bucket-in-alarm-for-quick-action.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-bucket-in-alarm-for-quick-action.png
new file mode 100644
index 00000000..91ddfaae
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-bucket-in-alarm-for-quick-action.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-enable-quick-actions.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-enable-quick-actions.png
new file mode 100644
index 00000000..58648f3a
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-enable-quick-actions.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-quick-action-report-detail.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-quick-action-report-detail.png
new file mode 100644
index 00000000..2dbedbd0
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-quick-action-report-detail.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-quick-action-reports-success.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-quick-action-reports-success.png
new file mode 100644
index 00000000..fd3db0f1
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-quick-action-reports-success.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-search-bucket-in-alarm-for-quick-action.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-search-bucket-in-alarm-for-quick-action.png
new file mode 100644
index 00000000..0c7abca7
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-search-bucket-in-alarm-for-quick-action.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-versioning-quick-action-dropdown.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-versioning-quick-action-dropdown.png
new file mode 100644
index 00000000..78fdb28c
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/aws-versioning-quick-action-dropdown.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/choose-create-inline-policy.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/choose-create-inline-policy.png
new file mode 100755
index 00000000..edbd0c8d
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/choose-create-inline-policy.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/expand-quick-actions-dropdown.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/expand-quick-actions-dropdown.png
new file mode 100755
index 00000000..8c0be194
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/expand-quick-actions-dropdown.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/find-bucket-in-alarm-for-versioning.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/find-bucket-in-alarm-for-versioning.png
new file mode 100755
index 00000000..f0d37e4f
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/find-bucket-in-alarm-for-versioning.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/find-quick-actions-policies.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/find-quick-actions-policies.png
new file mode 100644
index 00000000..6a7eb5a3
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/find-quick-actions-policies.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/index.md b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/index.md
new file mode 100644
index 00000000..1c1cdc91
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/index.md
@@ -0,0 +1,127 @@
+---
+title: Apply a Quick Action
+sidebar_label: Apply a Quick Action
+---
+
+# Apply a Quick Action
+
+In this guide we’ll show how you can enable Guardrails to perform [Quick Actions](/guardrails/docs/guides/quick-actions) that fix misconfigurations. A Quick Action empowers an administrator to quickly fix misconfigurations by applying a change directly to an underlying AWS resource. In order to use this feature, the cross account role used by Guardrails will need additional permissions to perform those actions. This guide will instruct you how to change the permissions specific to S3 bucket versioning, other types of quick actions will require different permission grants.
+
+This is the ninth guide in the *Getting started with AWS series*.
+
+**Prerequisites**:
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+- Access to an AWS account with administrative privileges to add permissions to the Guardrails cross-account role.
+
+
+## Step 1: Locate the IAM role
+
+In the AWS Console, find the role you created in the [first guide](/guardrails/docs/getting-started/getting-started-aws/connect-an-account/) and open its details by clicking the named link.
+
+

+
+## Step 2: Review role permissions
+
+Expand the **Add permissions** dropdown.
+
+
+
+
+## Step 3: Edit the IAM policy
+
+Choose **Create inline policy**.
+
+
+
+Choose **JSON**, and then copy and paste this code:
+
+```json
+{
+"Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": "s3:PutBucketVersioning",
+ "Resource": "*"
+ }
+ ]
+}
+```
+
+Select **Next**.
+
+
+
+## Step 4: Name the policy
+
+Name the policy `PutBucketVersioningForGuardrails`, and select **Create policy**.
+
+
+
+## Step 5: Find Quick Actions
+
+Select **Policies** from the top-level navigation. In the search box, type `quick actions`, then select the **Turbot > Quick Actions > Enabled** policy type.
+
+
+
+Select the green **New Policy Setting** button.
+
+
+
+## Step 6: Enable Quick Actions
+
+Choose **Sandbox** as the **Resource**, and then select **Enabled**, and click the green **Create** button.
+
+
+
+## Step 7: Find a bucket in Alarm
+
+Use your bookmark to navigate back to the **Controls by State** report and filter on **AWS > S3 > Bucket > Versioning**.
+
+
+
+## Step 8: Select a bucket in Alarm
+
+Select a bucket in `Alarm` state from the list of buckets.
+
+
+
+## Step 9: Use a Quick Action
+
+Select the **Actions** dropdown, and choose **Enable Versioning**.
+
+
+
+## Step 10: Observe the change
+
+Guardrails reports that the action was successful, and the control goes to the `OK` state.
+
+
+
+## Step 11: Check if it worked
+
+Open a tab to the AWS console, and navigate to the S3 bucket. Confirm the Guardrails Quick Action has correctly set the versioning status of the bucket.
+
+
+
+## Step 12: Review
+
+In this guide you increased the permissions scope for your cross-account role, enabled Guardrails Quick Actions and, used a Quick Action to change a bucket's versioning property.
+
+## Next Steps
+
+In the [next guide](/guardrails/docs/getting-started/getting-started-aws/enable-enforcement) we’ll set Guardrails to automatically enforce these actions continuously.
+
+## Progress tracker
+- [x] Prepare an AWS Account for Import to Guardrails
+- [x] Connect an AWS Account to Guardrails
+- [x] Observe AWS Resource Activity
+- [x] Enable Your First Policy Pack
+- [x] Review Account-Wide Governance
+- [x] Create a Static Exception to a Guardrails Policy
+- [x] Create a Calculated Exception to a Guardrails Policy
+- [x] Send an Alert to Email
+- [x] **Apply a Quick Action**
+- [ ] Enable Automatic Enforcement
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/locate-add-permissions.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/locate-add-permissions.png
new file mode 100755
index 00000000..91db1535
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/locate-add-permissions.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/locate-turbot-iam-role.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/locate-turbot-iam-role.png
new file mode 100755
index 00000000..0b5bd0fd
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/locate-turbot-iam-role.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/name-and-create-policy.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/name-and-create-policy.png
new file mode 100755
index 00000000..b84fe0fd
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/name-and-create-policy.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/observe-aws-console-result.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/observe-aws-console-result.png
new file mode 100755
index 00000000..5ae5d3c2
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/observe-aws-console-result.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/observe-updated-control.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/observe-updated-control.png
new file mode 100755
index 00000000..7d1f8872
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/observe-updated-control.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/put-bucket-versioning-for-guardrails.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/put-bucket-versioning-for-guardrails.png
new file mode 100755
index 00000000..bb0613e1
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/put-bucket-versioning-for-guardrails.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/select-bucket-in-alarm-for-versioning.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/select-bucket-in-alarm-for-versioning.png
new file mode 100755
index 00000000..03275855
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/select-bucket-in-alarm-for-versioning.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/specify-permissions.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/specify-permissions.png
new file mode 100755
index 00000000..5241b21f
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/specify-permissions.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/switch-to-settings.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/switch-to-settings.png
new file mode 100644
index 00000000..e7370990
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/switch-to-settings.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/apply-quick-action/view-quick-actions-enabled-policy-type.png b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/view-quick-actions-enabled-policy-type.png
new file mode 100644
index 00000000..37263aab
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/apply-quick-action/view-quick-actions-enabled-policy-type.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrail-overview.png b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrail-overview.png
new file mode 100644
index 00000000..56686f00
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrail-overview.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrail-unattached.png b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrail-unattached.png
new file mode 100644
index 00000000..c86c80a4
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrail-unattached.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrails-list.png b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrails-list.png
new file mode 100644
index 00000000..69586b0b
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/guardrails-list.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/attach-guardrail/index.md b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/index.md
new file mode 100644
index 00000000..ee1a4837
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/attach-guardrail/index.md
@@ -0,0 +1,94 @@
+---
+title: Attach a Guardrail
+sidebar_label: Attach a Guardrail
+---
+
+
+# Attach a Guardrail
+
+In this guide you'll learn how to attach a guardrail to an AWS Account. In previous guides, you imported an AWS account and created a guardrail. Now we will apply that guardrail to your account and manually move it through the phases.
+
+**Prerequisites**:
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+
+## Step 1: Go to the Guardrails page
+
+Click the **Guardrails** link from the sidebar to view your guardrails.
+
+
+
+Click the "Enforce S3 Bucket Versioning" guardrail that you created in the previous guide.
+
+
+
+
+## Step 2: View the rollouts page for the guardrail
+
+Go to the **Rollouts** page for the guardrail. Note that the guardrail is not associated with any rollouts, and it is currently **Unattached** to your account.
+
+At the top of the page you will see the alert counts. They will all be `0`, since the guardrail has not been attached.
+
+
+
+
+## Step 3: View the rollouts page for the guardrail
+
+Go to the **Rollouts** page for the guardrail. Note that the guardrail is not associated with any rollouts, and it is currently **Unattached** to your account.
+
+At the top of the page you will see the alert counts. They will all be `0`, since the guardrail has not been attached.
+
+
+
+## Step 4: Attach the guardrail in 'Draft' phase
+
+A guardrail can be attached to accounts manually, or via a rollout. In this guide, we will attach the guardrail and promote through the phases manually. While it is possible to attach the guardrail in any phase, its is generally recommended to start in the **Draft** phase. The draft phase allows the cloud team to preview the control with no impact or visibility to the account teams. This gives you an opportunity to preview and assess the potential impact of a guardrail in a safe, isolated manner. When in draft phase, alrms will only be visible to the cloud team, and no enforcement ations will run.
+
+To attach the guardrail in draft, simply drag and drop it to the **Draft** column in the kanban board.
+
+## Step 5: View the alarms
+
+Once the guardrail has been attached to the account, the guardrails controls will begin to run against resources in the account.
+
+## Step 6: Move the guardrail to 'Preview' phase
+
+## Step 7: Move the guardrail to 'Check' phase
+
+## Step 8: Move the guardrail to 'Check' phase
+
+## Step 9: View the alarms
+
+
+## Step 9: Review
+
+In this guide you created a guardrail that enforces AWS S3 bucket versioning. This guardrail can now be applied to accounts to ensure compliance with your organization's data protection policies.
+
+## Next Steps
+
+- [Create a rollout](/guardrails/docs/artemis/getting-started/getting-started-aws/rollout-guardrail) to deploy this guardrail to your organization.
+
+
+## Troubleshooting
+
+If you run into issues following this guide, jump in the `#guardrails` channel in the [Turbot Community Slack](https://turbot.com/community/join), or [open a support ticket](https://support.turbot.com/hc/en-us/requests/new).
+
+
+## Progress tracker
+- [x] Import an AWS Account
+- [x] Observe AWS Resource Activity
+- [x] **Create a Guardrail**
+- [ ] Attach a Guardrail
+- [ ] Mute a Control
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Deploy a Guardrail with a Rollout
+
+
+
+## Next Steps
+
+- Monitor compliance through the **Alerts** and **Activity** tabs
+- Create exceptions for specific resources when needed
+- Set up notifications for policy violations
\ No newline at end of file
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/bucket-versioning-policy-pack.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/bucket-versioning-policy-pack.png
new file mode 100644
index 00000000..6967f6ff
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/bucket-versioning-policy-pack.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/bucket-versioning-policy-settings.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/bucket-versioning-policy-settings.png
new file mode 100644
index 00000000..d742d4c9
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/bucket-versioning-policy-settings.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/calc-policy-builder-launched.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/calc-policy-builder-launched.png
new file mode 100644
index 00000000..95f6a956
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/calc-policy-builder-launched.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policies.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policies.png
new file mode 100755
index 00000000..b617f823
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policies.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policy-type-and-resource.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policy-type-and-resource.png
new file mode 100644
index 00000000..53cc3bbb
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policy-type-and-resource.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policy-type.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policy-type.png
new file mode 100755
index 00000000..8c2e05fa
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/choose-policy-type.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/enable-calculated-mode.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/enable-calculated-mode.png
new file mode 100644
index 00000000..70e28efd
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/enable-calculated-mode.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/index.md b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/index.md
new file mode 100644
index 00000000..8d3175b3
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/index.md
@@ -0,0 +1,138 @@
+---
+title: Create a Calculated Exception to a Guardrails Policy
+sidebar_label: Create a Calculated Exception
+---
+
+# Create a Calculated Exception to a Guardrails AWS Policy
+
+In this guide you'll learn how to make dynamic policy exceptions based on resource tags. These [Calculated Policies](/guardrails/docs/reference/glossary#calculated-policy) enable you to implement business logic when designing your governance controls.
+
+Some typical examples of how to use calculated polices are:
+
+- Dynamic tagging of resources based on resource metadata.
+- Creating policy exceptions for different classes of resources.
+- Taking enforcement action for based on resource tags.
+
+This guide will walk you through a simple calculated policy based on resource tags.
+
+This is the seventh guide in the *Getting started with AWS* series.
+
+**Prerequisites**
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+- Access to the AWS console with permissions to tag S3 buckets.
+
+
+## Step 1: Open the policy pack
+
+Choose **Policies** from the top navigation bar. Select the **Enforce Versioning is Enabled for AWS S3 Buckets** Policy Pack from the list on the right.
+
+
+
+## Step 2: Modify the policy setting
+
+The bucket versioning policy is currently statically set to `Check: Enabled`. Use the pencil icon on the right side of the policy setting to edit the policy.
+
+
+
+## Step 3: Enable calculated mode
+
+Select the blue **Launch calculated policy builder** link.
+
+
+
+## Step 4: Launch calculated policy builder
+
+Select **Launch calculated policy builder**.
+
+
+
+## Step 5: Choose test resource
+
+Calculated policies work across all resources in scope of the policy setting. While building a calc policy it is useful to test the business logic against real resources in your environment. For this guide you will find and select one of the previously-created test buckets by searching for its name in the **Test Resource** field.
+
+
+
+## Step 6: Build query
+
+In the **Query Input** field we will use **Select Snippet** to prepopulate our [GraphQL](/guardrails/docs/reference/glossary#graphql) query. Choose **Get bucket** from the dropdown.
+
+
+
+## Step 7: View query result
+
+Guardrails inserts a GraphQL query for bucket tags into the **Input** pane, and then runs the query against the selected test resource. The result, in the **Output** pane, shows there are no tags on the bucket.
+
+
+
+## Step 8: Add the Jinja2 template
+
+Our business logic is created in the `Template` section, using [Nunjucks syntax](https://mozilla.github.io/nunjucks/templating.html).
+
+Copy this template code:
+
+```nunjucks
+{% if $.bucket.turbot.tags.environment == "development" %}
+'Skip'
+{% else %}
+'Check: Enabled'
+{% endif %}
+```
+And paste it into the template pane.
+
+
+
+Guardrails immediately evaluates the template in the context of the chosen **Test Resource**. The template output, `Check: Enabled`, is the calculated policy value that will govern any bucket’s **AWS > S3 > Bucket > Versioning** policy if the bucket is tagged with `environment:development`. For all others buckets, Guardrails will go into Alarm state if versioning is not enabled.
+
+The result we see for our test resource confirms that `Check: Enabled` is the applicable setting for this bucket. Why? Because the test bucket does not have a tag `{ "environment": "development" }`.
+
+Select **Update**.
+
+
+
+## Step 9: Save the calculated policy to the policy pack
+
+Select **Update**.
+
+
+
+## Step 10: Observe controls for bucket versioning
+
+Navigate back to the **Controls by State** report and set the **Type** filter to **AWS > S3 > Bucket > Versioning**. Buckets with versioning enabled will be in the `OK` state. Find a bucket in the `Alarm` state to modify, and note its name.
+
+
+
+## Step 11: Tag the bucket
+
+Open the AWS console in another tab, navigate to the bucket identified in the previous step, and assign the tag `environment:development` to it.
+
+
+
+
+## Step 12: Observe the effect
+
+Return to the **Controls by State** report in the previous browser tab. Observe that Guardrails notices the change, reevaluates the resource, runs the calculated policy, and changes the status from `Alarm` to `Skipped`.
+
+
+
+## Step 13: Review
+
+In this guide you created your first calculated policy and tested it using the S3 bucket versioning control.
+
+
+## Next Steps
+
+In the [next guide](/guardrails/docs/getting-started/getting-started-aws/send-alert-to-email) we’ll see how to subscribe to these status alerts via email, Slack, or MS Teams.
+
+## Progress tracker
+- [x] Prepare an AWS Account for Import to Guardrails
+- [x] Connect an AWS Account to Guardrails
+- [x] Observe AWS Resource Activity
+- [x] Enable Your First Policy Pack
+- [x] Review Account-Wide Governance
+- [x] Create a Static Exception to a Guardrails Policy
+- [x] **Create a Calculated Exception to a Guardrails Policy**
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Enable Automatic Enforcement
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/launch-calculated-policy-builder.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/launch-calculated-policy-builder.png
new file mode 100644
index 00000000..92503e48
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/launch-calculated-policy-builder.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/locate-policy-pack.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/locate-policy-pack.png
new file mode 100644
index 00000000..9e857925
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/locate-policy-pack.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/revisit-controls-by-state.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/revisit-controls-by-state.png
new file mode 100644
index 00000000..4b34627f
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/revisit-controls-by-state.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/search-versioning.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/search-versioning.png
new file mode 100755
index 00000000..53143c2c
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/search-versioning.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/snippet-active.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/snippet-active.png
new file mode 100644
index 00000000..99142497
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/snippet-active.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/snippet-dropdown-open.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/snippet-dropdown-open.png
new file mode 100644
index 00000000..dde1a73d
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/snippet-dropdown-open.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/tagged-bucket-now-skipped.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/tagged-bucket-now-skipped.png
new file mode 100644
index 00000000..09fed62f
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/tagged-bucket-now-skipped.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/tagged-bucket.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/tagged-bucket.png
new file mode 100755
index 00000000..61902e08
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/tagged-bucket.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/template-active-update.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/template-active-update.png
new file mode 100644
index 00000000..70be99fe
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/template-active-update.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/template-active.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/template-active.png
new file mode 100644
index 00000000..f79ffe77
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/template-active.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/update-policy-setting.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/update-policy-setting.png
new file mode 100644
index 00000000..de2e8b32
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/update-policy-setting.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/view-policy-packs.png b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/view-policy-packs.png
new file mode 100755
index 00000000..f321f8e9
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-calculated-exception/view-policy-packs.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/advanced-settings.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/advanced-settings.png
new file mode 100644
index 00000000..0402f770
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/advanced-settings.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/create-guardrail-form.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/create-guardrail-form.png
new file mode 100644
index 00000000..8ea4897e
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/create-guardrail-form.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/create-setting.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/create-setting.png
new file mode 100644
index 00000000..df7d46d7
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/create-setting.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-config-policy.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-config-policy.png
new file mode 100644
index 00000000..191e5175
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-config-policy.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-config.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-config.png
new file mode 100644
index 00000000..31dc391e
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-config.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-settings-saved.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-settings-saved.png
new file mode 100644
index 00000000..79543ab1
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrail-settings-saved.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrails-dashboard.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrails-dashboard.png
new file mode 100644
index 00000000..17d435bc
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrails-dashboard.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrails-empty.png b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrails-empty.png
new file mode 100644
index 00000000..9a47ea87
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/create-guardrail/guardrails-empty.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/create-guardrail/index.md b/docs/artemis/getting-started/getting-started-aws/create-guardrail/index.md
new file mode 100644
index 00000000..986a1562
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/create-guardrail/index.md
@@ -0,0 +1,109 @@
+---
+title: Create a Guardrail
+sidebar_label: Create a Guardrail
+---
+
+
+# Create a Guardrail
+
+In this guide you'll learn how to create a custom guardrail to enforce AWS S3 bucket versioning policies across your accounts.
+
+This guide demonstrates how to build governance controls that can be applied organization-wide.
+
+**Prerequisites**:
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+- `aws-s3` mod installed.
+- Understanding of AWS S3 bucket versioning requirements.
+
+## Step 1: Navigate to the Guardrails dashboard
+
+From the main Guardrails dashboard, you can see your existing guardrails and their current status. Click the green **New Guardrail** button in the top right corner.
+
+
+
+## Step 2: Enter guardrail details
+
+In the **Create Guardrail** dialog, provide a descriptive name and optional description for your guardrail:
+
+- **Name**: Enter "Enforce S3 Bucket Versioning"
+- **Description**: Enter "Ensure that versioning is enabled for all AWS S3 Buckets"
+
+You also need to specify which control types this guardrail will manage. Start typing "AWS S3 Bucket Versioning" in the search field. You'll see a dropdown with available options. Select **AWS > S3 > Bucket > Versioning** from the dropdown.
+
+
+
+
+
+## Step 3: Configure advanced settings (Optional)
+
+If desired, click on **Advanced** to expand additional configuration options. Here you can set:
+
+- **Targets**: Select which resource types this guardrail can target
+- **AKAs**: Add alternative unique aliases for the guardrail
+
+
+
+## Step 4: Create the guardrail
+
+Once you've configured all the necessary settings, click the green **Create** button to create your guardrail.
+
+## Step 5: Review the guardrail configuration
+
+After creation, you'll be taken to the guardrail's **Config*** page to configure the policy settings.
+
+
+
+## Step 6: Configure the versioning policy
+
+Click the **Versioning** policy from the lsit of polices. You'll see that there's "No setting" initially, with a **Create one** link available.
+
+
+
+## Step 7: Create a policy setting
+
+Click **Create one** to create a new policy setting for the guardrail. This will open the **Create 'Enforce S3 Bucket Versioning' Guardrail Setting** dialog where you can configure the policy setting.
+
+Select **Enforce: Enabled** to actively enforce S3 bucket versioning.
+
+Leave the precedence set to the default "Required" setting.
+
+You may optionally add a **note** to the setting.
+
+By default, settings do no expire, however you may optionally add an **Expiration**.
+
+
+
+## Step 8: Save the policy setting
+
+Click the green **Create** button to save your guardrail policy setting. Your guardrail is now ready to be attached to one or more accounts to enforce S3 bucket versioning policies across your organization.
+
+
+
+
+## Step 9: Review
+
+In this guide you created a guardrail that enforces AWS S3 bucket versioning. This guardrail can now be applied to accounts to ensure compliance with your organization's data protection policies.
+
+## Next Steps
+
+- [Attach](/guardrails/docs/artemis/getting-started/getting-started-aws/attach-guardrail) this guardrail to specific accounts.
+- [Create a rollout](/guardrails/docs/artemis/getting-started/getting-started-aws/rollout-guardrail) to deploy this guardrail to your organization.
+
+
+## Troubleshooting
+
+If you run into issues following this guide, jump in the `#guardrails` channel in the [Turbot Community Slack](https://turbot.com/community/join), or [open a support ticket](https://support.turbot.com/hc/en-us/requests/new).
+
+
+## Progress tracker
+- [x] Import an AWS Account
+- [x] Observe AWS Resource Activity
+- [x] **Create a Guardrail**
+- [ ] Attach a Guardrail
+- [ ] Mute a Control
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Deploy a Guardrail with a Rollout
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/account-overview.png b/docs/artemis/getting-started/getting-started-aws/import-account/account-overview.png
new file mode 100644
index 00000000..5343547a
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/account-overview.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/account-resources.png b/docs/artemis/getting-started/getting-started-aws/import-account/account-resources.png
new file mode 100644
index 00000000..e0aa52c1
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/account-resources.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/accounts-list-empty.png b/docs/artemis/getting-started/getting-started-aws/import-account/accounts-list-empty.png
new file mode 100644
index 00000000..9b00987e
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/accounts-list-empty.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/choose-template-file.png b/docs/artemis/getting-started/getting-started-aws/import-account/choose-template-file.png
new file mode 100644
index 00000000..8ec74b3b
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/choose-template-file.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/create-stack.png b/docs/artemis/getting-started/getting-started-aws/import-account/create-stack.png
new file mode 100644
index 00000000..bc3029f4
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/create-stack.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/import-aws-account.png b/docs/artemis/getting-started/getting-started-aws/import-account/import-aws-account.png
new file mode 100644
index 00000000..211bf077
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/import-aws-account.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/import-aws-select-type.png b/docs/artemis/getting-started/getting-started-aws/import-account/import-aws-select-type.png
new file mode 100644
index 00000000..1cf64462
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/import-aws-select-type.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/import-choose-integration.png b/docs/artemis/getting-started/getting-started-aws/import-account/import-choose-integration.png
new file mode 100644
index 00000000..df72eb14
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/import-choose-integration.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/index.md b/docs/artemis/getting-started/getting-started-aws/import-account/index.md
new file mode 100644
index 00000000..4333c1d4
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/import-account/index.md
@@ -0,0 +1,145 @@
+---
+title: Import an Account
+sidebar_label: Import an Account
+---
+
+# Import an Account
+
+
+In this guide, you will deploy the Guardrails IAM access role to your AWS account using a CloudFormation template and then connect that account to Guardrails.
+
+This is the first guide in the *Getting started with AWS* series.
+
+## Prerequisites
+
+- Access to the Turbot Guardrails console with admin privilege.
+
+- An AWS Account to import into Guardrails.
+
+> [!NOTE]
+> While Guardrails does not need admin access to your AWS account, you will need elevated access to create the cross account roles necessary to import the account in readonly mode.
+
+## Step 1: Launch the Import Account wizard
+
+Login to your Guardrails console and go to the **Accounts** screen. Click the green **Import Account** at the top right of the page.
+
+
+
+
+## Step 2: Select the AWS integration
+
+Guardrails will present you with a list of integrations. Click **AWS**
+
+
+
+
+## Step 3: Select the integration type
+
+You can import a single account, or import all the accounts in your organization. In this guide, we will import a single account. Select **AWS Account**.
+
+
+
+
+
+## Step 4: Enter the required information
+Enter the required information.
+
+
+
+
+
+- Enter the **Account ID** of the account that you wish to import.
+- Select the **Environment** (partition) in which the account resides: **Commercial Cloud**, **US Government** (GovCloud), or **China Cloud**
+- Choose a **Role Name** or keep the default
+- A unique **External ID** is generated for you. You can change this if you want, but you must adhere to the [Guardrails External ID Protection Format](/guardrails/docs/faq/general-faq#what-is-guardrails-aws-iam-role-external-id-protection). It is recommended to use the default unless you have a specific reason not to.
+- Select the **Permissions** to grant to Guardrails. If you are planning to complete all the guides in this Quick Start series, select **Full Remediation**.
+
+## Step 5: Download the CloudFormation template
+
+Guardrails needs a cross account IAM role that grants permission to discover [resources](/guardrails/docs/artemis/inventory/resources) in your account and to monitor changes via event handlers. The CloudFormation template downloaded in this step will create that role and assign the required permissions and trust policy, using the information that you provided in the previous step.
+
+Click the link to **Download and run this CloudFormation template**.
+
+> [!IMPORTANT]
+> Leave this browser tab open while we do the next steps in a different tab. Closing and reopening this page will cause a new random ExternalID to be generated.
+
+## Step 6: Create the stack
+
+Open a new tab and login to your AWS account. Navigate to the CloudFormation service and create a stack with new resources.
+
+
+
+## Step 7: Upload the template
+
+On the **Create Stack** page, select **Upload a template file** and then click the **Choose file** button.
+
+
+
+Use the file dialog to find and upload the file you downloaded in step 2, then select the **Next** button.
+
+
+
+## Step 8: Launch the stack
+
+In the Stack Name field, enter `guardrails-import` and then scroll down the page.
+
+
+
+Review the rest of the default values (no changes should be needed), and then select the **Next** button at the bottom of the page:
+
+
+
+On the next page of the stack wizard, scroll to the bottom, enable the acknowlegement checkbox and then the **Next** button.
+
+
+
+On the final page of the wizard, scroll to the bottom of the page and select the **Submit** button.
+
+## Step 9: Verify the stack
+
+Wait for the stack to complete and for the status of the stack to change to **CREATE_COMPLETE**.
+
+
+
+## Step 10: Connect the account
+
+Now that the role has been created, click the **Connect** button on the Guardrails account import page to connect to the account and begin importing resources.
+
+
+
+
+## Step 11: View Account Overview
+
+You will be redirected to the Account Overview page for the account that you have connected.
+
+
+
+
+## Step 11: Verify
+
+Click the **Resources** tab for the account. Resources should begin to appear as Guardrails discover the resources in your account and adds them to the CMDB.
+
+
+
+## Step 12: Review
+
+In this guide you've learned how to connect an AWS account and import its resources into Guardrails.
+
+## Next Steps
+
+In the [next guide](/guardrails/docs/artemis/getting-started/getting-started-aws/observe-aws-activity) we’ll see how Guardrails monitors cloud events and reacts to resource changes.
+
+## Troubleshooting
+
+If you run into issues following this guide, jump in the `#guardrails` channel in the [Turbot Community Slack](https://turbot.com/community/join), or [open a support ticket](https://support.turbot.com/hc/en-us/requests/new).
+
+## Progress tracker
+- [x] **Import an AWS Account**
+- [ ] Observe AWS Resource Activity
+- [ ] Create a Guardrail
+- [ ] Attach a Guardrail
+- [ ] Mute a Control
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Deploy a Guardrail with a Rollout
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details-2.png b/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details-2.png
new file mode 100644
index 00000000..df458daf
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details-2.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details-3.png b/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details-3.png
new file mode 100644
index 00000000..4d7714d0
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details-3.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details.png b/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details.png
new file mode 100644
index 00000000..c75b8aa4
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/specify-stack-details.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/import-account/upload-template-file.png b/docs/artemis/getting-started/getting-started-aws/import-account/upload-template-file.png
new file mode 100644
index 00000000..d140331c
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/import-account/upload-template-file.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/index.md b/docs/artemis/getting-started/getting-started-aws/index.md
new file mode 100755
index 00000000..0b5bbf15
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/index.md
@@ -0,0 +1,21 @@
+---
+title: Getting Started with AWS
+sidebar_label: Getting Started with AWS
+---
+
+# Getting Started with AWS
+
+This series of guides provides a curated experience to import your first AWS account and learn how to use Turbot Guardrails. If you are brand-new to Guardrails, we highly recommend that you walk through the guides in order and follow each step. Once you are familar with the concepts presented here, you can then focus in on a specific use case important to your organization. You can browse our library of use case examples on [The Guardrails Hub](https://hub.guardrails.turbot.com/)
+
+| Guide | Description
+| - | - |
+| [Prepare an Account](getting-started/getting-started-aws/prepare-account) | Prepare an account for import into Guardrails. |
+| [Connect an Account](getting-started/getting-started-aws/connect-an-account) | Import an AWS account. |
+| [Observe Resource Activity](getting-started/getting-started-aws/observe-aws-activity) | Monitor AWS [resource](/guardrails/docs/reference/glossary#resource) activities. |
+| [Enable a Policy Pack](getting-started/getting-started-aws/enable-policy-pack) | Attach a [Policy Pack](/guardrails/docs/concepts/policy-packs) to enforce security and compliance. |
+| [Review Account-Wide Activity](getting-started/getting-started-aws/review-account-wide) | Observe the effect of a Policy Pack across your account. |
+| [Create a Static Exception](getting-started/getting-started-aws/create-static-exception) | Create a static policy exception for a specific resource. |
+| [Create a Calculated Exception](getting-started/getting-started-aws/create-calculated-exception) | Create a [Calculated Policy](/guardrails/docs/reference/glossary#calculated-policy) that use [CMDB](/guardrails/docs/reference/glossary#cmdb) data, a [GraphQL](/guardrails/docs/reference/glossary#graphql) query, and a Nunjucks template to dynamically generate resource-specific policy values. |
+| [Send Alerts](getting-started/getting-started-aws/send-alert-to-email) | Set up Guardrails [notifications](/guardrails/docs/reference/glossary#notifications) to send real-time alerts about events that occur in your cloud infrastructure. |
+| [Apply a Quick Action](getting-started/getting-started-aws/apply-quick-action) | Enable users to initiate specific, one-time [Control](/guardrails/docs/reference/glossary#control) enforcements directly from the Guardrails UI. |
+| [Enable Enforcement](getting-started/getting-started-aws/enable-enforcement) | Enable enforcement in Guardrails to ensure automatic remediation of policy violations. |
\ No newline at end of file
diff --git a/docs/artemis/getting-started/getting-started-aws/mute-control/index.md b/docs/artemis/getting-started/getting-started-aws/mute-control/index.md
new file mode 100644
index 00000000..ef9ded67
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/mute-control/index.md
@@ -0,0 +1,6 @@
+---
+title: Mute a Control
+sidebar_label: Mute a Control
+---
+
+# Mute a Control
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-diff-the-first-change.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-diff-the-first-change.png
new file mode 100644
index 00000000..1faf4177
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-diff-the-first-change.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-activities-initial-notifications.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-activities-initial-notifications.png
new file mode 100644
index 00000000..db4d16a2
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-activities-initial-notifications.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-activities-with-change-detected.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-activities-with-change-detected.png
new file mode 100644
index 00000000..28b92de3
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-activities-with-change-detected.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-dropdown.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-dropdown.png
new file mode 100644
index 00000000..3a2862d5
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-dropdown.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-filter-set.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-filter-set.png
new file mode 100644
index 00000000..8354700a
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-filter-set.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-search.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-search.png
new file mode 100644
index 00000000..42649773
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-resource-type-search.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-search-bucket-versioning.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-search-bucket-versioning.png
new file mode 100644
index 00000000..cc5651be
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-search-bucket-versioning.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-search-resource-activities.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-search-resource-activities.png
new file mode 100644
index 00000000..a7f1d7c7
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/aws-search-resource-activities.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-1.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-1.png
new file mode 100644
index 00000000..92c70754
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-1.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-2.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-2.png
new file mode 100644
index 00000000..661eb25d
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-2.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-3.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-3.png
new file mode 100644
index 00000000..bf1f785d
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/create-bucket-3.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning-1.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning-1.png
new file mode 100644
index 00000000..ccd049ac
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning-1.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning-2.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning-2.png
new file mode 100644
index 00000000..ceac1e72
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning-2.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning.png b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning.png
new file mode 100755
index 00000000..d7b0e0f3
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/enable-versioning.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/index.md b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/index.md
new file mode 100644
index 00000000..25b85e05
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/observe-aws-activity/index.md
@@ -0,0 +1,98 @@
+---
+title: Observe AWS Resource Activity
+sidebar_label: Observe Resource Activity
+---
+
+
+# Observe AWS Resource Activity
+
+In this guide you will learn how Guardrails detects and reacts to events in your AWS account. You will manually create and modify an S3 bucket in your account and explore how to view that activity in the Guardrails console.
+
+This is the third guide in the *Getting started with AWS* series.
+
+## Prerequisites
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+- Console access to an AWS account and the ability to create and modify S3 buckets.
+
+> [!NOTE]
+> We will use the bucket name `bucket-example-01` in this guide. Bucket names in AWS must be globally unique, so please change the default name for your testing.
+
+## Step 1: Create an S3 bucket
+
+After logging into the AWS console, navigate to S3 and select the **Create Bucket** button.
+
+
+
+Give your bucket a name that is easy to remember.
+
+
+
+Accept all defaults for the remaining configuration choices and then select the **Create Bucket** button.
+
+
+
+## Step 2: Resource Activities report
+
+Select **Reports** from the top navigation bar. Search for the word "resource" and select **Resource Activities**.
+
+
+
+## Step 3: Filter by type
+
+From the filter bar, expand the **Resource Type** dropdown.
+
+
+
+Set the filter to **AWS > S3 > Bucket**. You can do this by typing `aws s3 bucket` into the search box, as shown here. When you see *AWS > S3 > Bucket* appear in the list, select the checkbox next to it.
+
+
+
+## Step 4: Observe activity
+
+You can scope the resource activity report to a specific bucket by searching for the name of your bucket. To do this, type its name into the search field. Guardrails will show all notifications related to the bucket. In the screen below, the `RESOURCE CREATED` activity represents Guardrails discovery of the bucket and `RESOURCE UPDATED` indicates that Guardrails has updated the CMDB entry with additional details about the bucket.
+
+
+
+## Step 5: Enable versioning
+
+In the AWS console, select the name of your bucket from the list of all buckets. Select the **Properties** tab and then select the **Edit** button in the **Bucket Versioning** section.
+
+
+
+In the Versioning dialog box choose **Enable**, then select **Save changes**.
+
+
+
+## Step 6: Observe events
+
+Switch back to the Guardrails console browser tab. Guardrails' event processing system will soon detect the change, and a new `RESOURCE UPDATED` notification will appear in the list. Select that new notification from the Activities list.
+
+
+
+## Step 7: Audit resource change
+
+On the notifications detail page, you can see metadata about the change and even audit the changes in configuration between the previous known state and the observed change. Scroll down in the **DIFF** section to observe the changes that Guardrails has recorded.
+
+
+
+## Step 8: Review
+
+In this guide you changed the versioning property of an S3 bucket and observed how Guardrails recorded the change.
+
+## Next Steps
+
+Next we’ll explore [how to enable a policy pack](/guardrails/docs/getting-started/getting-started-aws/enable-policy-pack) that requires buckets to enable versioning.
+
+## Progress tracker
+- [x] Prepare an AWS Account for Import to Guardrails
+- [x] Connect an AWS Account to Guardrails
+- [x] **Observe AWS Resource Activity**
+- [ ] Enable Your First Policy Pack
+- [ ] Review Account-Wide Governance
+- [ ] Create a Static Exception to a Guardrails Policy
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Enable Automatic Enforcement
diff --git a/docs/artemis/getting-started/getting-started-aws/rollout-guardrail/index.md b/docs/artemis/getting-started/getting-started-aws/rollout-guardrail/index.md
new file mode 100644
index 00000000..2a8954ac
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/rollout-guardrail/index.md
@@ -0,0 +1,7 @@
+---
+title: Deploy a Guardrail with a rollout
+sidebar_label: Deploy a Guardrail with a rollout
+---
+
+
+# Deploy a Guardrail with a rollout
\ No newline at end of file
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/choose-turbot-root.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/choose-turbot-root.png
new file mode 100755
index 00000000..44320884
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/choose-turbot-root.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/create-notification-rule.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/create-notification-rule.png
new file mode 100644
index 00000000..0e431379
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/create-notification-rule.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/create-turbot-notifications-setting.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/create-turbot-notifications-setting.png
new file mode 100644
index 00000000..c675c2b2
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/create-turbot-notifications-setting.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/enable-notifications.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/enable-notifications.png
new file mode 100644
index 00000000..352f4485
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/enable-notifications.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/enable-rule-based-routing.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/enable-rule-based-routing.png
new file mode 100644
index 00000000..6aa51a4c
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/enable-rule-based-routing.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/find-skipped-bucket.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/find-skipped-bucket.png
new file mode 100644
index 00000000..de9d465f
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/find-skipped-bucket.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/index.md b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/index.md
new file mode 100644
index 00000000..1ec4b1b0
--- /dev/null
+++ b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/index.md
@@ -0,0 +1,116 @@
+---
+title: Send an Alert to Email
+sidebar_label: Send an Alert to Email
+---
+
+
+# Send an Alert to Email
+
+In this guide you'll learn how to enable Guardrails notifications and configure the notification rules to send email notifications. Similar configuration options exist to send notifications to Slack or Teams channels, and to generic webhooks. Our [launch week announcement blog post](/guardrails/blog/2023/10/guardrails-notifications) includes a demo of notifications in action.
+
+This is the eighth guide in the *Getting started with AWS series*.
+
+**Prerequisites**:
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+
+## Step 1: Create policy setting
+
+To enable notifications for your workspace, select **Policies** in the top navigation bar, and then search for `turbot notifications`. Select the **Turbot > Notifications** policy type.
+
+
+
+Select the **New Policy Setting** button.
+
+
+
+## Step 2: Choose level
+
+Select the **Turbot** root node as the resource.
+
+> [!NOTE]
+> Notifications polices may only be created at the root level (aka Turbot level) of the resource hierarchy.
+
+
+
+## Step 3: Choose setting
+
+Choose the **Enabled** setting. Then select **Create**.
+
+
+
+## Step 4: List notifications policies
+
+Navigate back to the list of Notification policies by clicking on the word `Notifications` in the `Turbot > Notifications` breadcrumb.
+
+
+
+## Step 5: Select Rules policy
+
+Select the **Rule-Based Routing** policy type from the list of policies.
+
+
+
+## Step 6: View the policy
+
+Select **New Policy Setting**.
+
+
+
+## Step 7: Create notification rule
+
+Again choose **Turbot** as the **Resource**. Copy and paste this rule, using one or more email addresses you want to notify.
+
+```yaml
+- rules: NOTIFY $.control.state:alarm $.controlType.uri:'tmod:@turbot/aws-s3#/control/types/bucketVersioning'
+ emails:
+ - you@yourcompany.com
+```
+
+The rule will send an alert to the configured email address when any control enters the `Alarm` state for S3 bucket versioning.
+
+Select **Create**.
+
+
+
+## Step 8: Find a bucket skipped by your calculated policy
+
+Navigate to your bookmark for the **Controls by State** report, select the **Type** dropdown from the filter bar, and verify that the bucket you tagged in the [calculated policy guide](/guardrails/docs/getting-started/getting-started-aws/create-calculated-exception) is still in the `Skipped` state.
+
+
+
+## Step 9: Trigger the notification
+
+In the AWS console, update the tag value for the `environment` tag. Change its value from `development` to `production`.
+
+
+
+The calculated policy setting, which had previously evaluated to `Skip`, now evaluates to `Check: Enabled`. Because you left the bucket’s versioning in the AWS default state – suspended – the bucket’s control for versioning now transitions to `Alarm`.
+
+## Step 10: Check your email
+
+The alarm reported in the Guardrails console also appears in your inbox. You can alternatively configure Guardrails to send alerts to [Slack]([guardrails/docs/guides/notifications/templates#example-slack-template](https://turbot.com/guardrails/docs/guides/notifications/templates#example-slack-template)) or [MS Teams](/guardrails/docs/guides/notifications/templates#example-ms-teams-template).
+
+
+
+## Step 11: Review
+
+In this guide you configured a simple notification rule and triggered a notification event.
+
+
+## Next Steps
+
+In the [next guide](/guardrails/docs/getting-started/getting-started-aws/apply-quick-action) you’ll learn how to configure for [Quick Actions]([/guardrails/docs/guides/quick-actions](https://turbot.com/guardrails/docs/guides/quick-actions#enabling-quick-actions)) so you can, for example, directly enable versioning on a bucket that’s now in the `Alarm` state and make it green.
+
+## Progress tracker
+- [x] Prepare an AWS Account for Import to Guardrails
+- [x] Connect an AWS Account to Guardrails
+- [x] Observe AWS Resource Activity
+- [x] Enable Your First Policy Pack
+- [x] Review Account-Wide Governance
+- [x] Create a Static Exception to a Guardrails Policy
+- [x] Create a Calculated Exception to a Guardrails Policy
+- [x] **Send an Alert to Email**
+- [ ] Apply a Quick Action
+- [ ] Enable Automatic Enforcement
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/locate-rule-based-routing.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/locate-rule-based-routing.png
new file mode 100644
index 00000000..2ebb6ac6
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/locate-rule-based-routing.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/notifications-enabled.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/notifications-enabled.png
new file mode 100644
index 00000000..b23da971
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/notifications-enabled.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/observe-unlabeled-bucket-in-alarm.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/observe-unlabeled-bucket-in-alarm.png
new file mode 100644
index 00000000..f8caa613
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/observe-unlabeled-bucket-in-alarm.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/observe-untagged-bucket-in-alarm.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/observe-untagged-bucket-in-alarm.png
new file mode 100644
index 00000000..e9e28bcf
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/observe-untagged-bucket-in-alarm.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/search-notifications-policy-type.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/search-notifications-policy-type.png
new file mode 100644
index 00000000..f8491094
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/search-notifications-policy-type.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-email-notification.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-email-notification.png
new file mode 100644
index 00000000..b5e1ae20
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-email-notification.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-rule-based-routing.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-rule-based-routing.png
new file mode 100755
index 00000000..e3111a89
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-rule-based-routing.png differ
diff --git a/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-turbot-notifications-policy-type.png b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-turbot-notifications-policy-type.png
new file mode 100644
index 00000000..c4d13c5a
Binary files /dev/null and b/docs/artemis/getting-started/getting-started-aws/send-alert-to-email/view-turbot-notifications-policy-type.png differ
diff --git a/docs/artemis/getting-started/index.md b/docs/artemis/getting-started/index.md
new file mode 100644
index 00000000..fe3b4700
--- /dev/null
+++ b/docs/artemis/getting-started/index.md
@@ -0,0 +1,77 @@
+---
+title: Getting Started
+sidebar_label: Getting Started
+---
+
+# Getting Started with Turbot Guardrails!
+
+Welcome to the wonderful world of Turbot Guardrails!
+
+These step-by-step guides help new Guardrails Admins learn the basics of Turbot Guardrails. For those just getting started in a Free Trial, please follow the directions below to sign up. If you are already a customer, please reach out to your local Guardrails Admin for access to your current environment.
+
+## Guardrails Overview
+
+- Product Demo:
+ [Turbot Guardrails Demo](https://www.youtube.com/watch?v=sHWDixKoz9g)
+- [Concepts](concepts): Overviews of core Turbot Guardrails concepts including
+ [Policies](concepts/policies), [Controls](concepts/controls), and
+ [Guardrails](concepts/guardrails).
+- [Cloud Integrations](integrations): Learn how to connect and configure cloud
+ accounts.
+
+## Free Trial Information
+
+Guardrails offers a free trial to interested organizations. Here's how to kickstart your experience:
+
+1. [Sign up for your Turbot.com account](turbot.com/user/sign-up): This grants access to your Free Trial Guardrails Workspace. We only need one team member to sign up initially - more can join later.
+2. [Chat with Bob about your Free Trial onboarding](/start)
+
+After your chat with Bob, we'll get your free trial up and running and send you the login instructions. The trial encompasses an onboarding call, check-ins, and a closing or upgrade meeting.
+
+Questions? Don't hesitate to reach out to your Turbot representative or email [Turbot Sales](mailto:sales+poc@turbot.com).
+
+## First Steps
+
+Once you have received your login URL from Turbot, follow the steps below to log
+into your Turbot Workspace.
+
+### Login
+
+1. Go to your dedicated Turbot Workspace URL. This will either be given to you
+ by Turbot or defined by the organization. Reach out to your Turbot contact if
+ there are questions.
+2. Select the **Turbot SAML** directory option in the dropdown menu. This will
+ only appear for new Turbot Guardrails Cloud users. This directory name
+ might be different for existing customers who setup their own identity provider.
+
+
+
+3. Select **Login with Turbot**. This will re-direct you to the sign in page.
+ More info can be found on our
+ [Turbot User Sign Up docs](turbot.com/user/sign-up).
+
+### Optional: Add team members to your Turbot Workspace
+
+If you are using the Turbot SAML authentication method, first have your team
+member create a free account on our
+[User Sign Up Page](turbot.com/user/sign-up).
+
+1. Ask your team member to login to the Workspace using Turbot SAML with the newly created account.
+2. Immediately upon logging in, a new user profile is created. As `Turbot/Owner` of the workspace, you can now assign
+ permissions to your team member.
+3. Go to the **Permissions** tab designated by user icon.
+4. Click the green **Grant Permissions** button.
+5. Leave the resource scope as `Turbot`.
+6. In the **Identities** field, type in the user name of your team member. Select the profile in the
+ drop down menu.
+7. Click the **Permissions** field and select `Turbot/Owner`.
+8. Click the **Grant** button.
+9. Your team member will now have the same level of permissions as yourself.
+ These can be modified in the future to be more specific.
+
+### Now what?
+
+Congrats! Now that you have signed in (and optionally added a team member to the
+workspace), we need to import a cloud account for Turbot to manage. Click the
+following link to get going! Additionally, you can use the nav bar on the left
+to jump to a specific subsection.
diff --git a/docs/artemis/guardrails/attach-guardrail/index.md b/docs/artemis/guardrails/attach-guardrail/index.md
new file mode 100644
index 00000000..7f78f569
--- /dev/null
+++ b/docs/artemis/guardrails/attach-guardrail/index.md
@@ -0,0 +1,4 @@
+---
+title: Attach a Guardrail
+sidebar_label: Attach a Guardrail 🛠
+---
\ No newline at end of file
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-console-login.png b/docs/artemis/guardrails/controls/access-control-logs/guardrails-console-login.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-console-login.png
rename to docs/artemis/guardrails/controls/access-control-logs/guardrails-console-login.png
diff --git a/docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-control-page.png b/docs/artemis/guardrails/controls/access-control-logs/guardrails-control-page.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-control-page.png
rename to docs/artemis/guardrails/controls/access-control-logs/guardrails-control-page.png
diff --git a/docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-copy-logs.png b/docs/artemis/guardrails/controls/access-control-logs/guardrails-copy-logs.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-copy-logs.png
rename to docs/artemis/guardrails/controls/access-control-logs/guardrails-copy-logs.png
diff --git a/docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-select-debug-level.png b/docs/artemis/guardrails/controls/access-control-logs/guardrails-select-debug-level.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-select-debug-level.png
rename to docs/artemis/guardrails/controls/access-control-logs/guardrails-select-debug-level.png
diff --git a/docs/guides/using-guardrails/troubleshooting/access-control-logs/index.md b/docs/artemis/guardrails/controls/access-control-logs/index.md
similarity index 74%
rename from docs/guides/using-guardrails/troubleshooting/access-control-logs/index.md
rename to docs/artemis/guardrails/controls/access-control-logs/index.md
index 7150c1cb..85d047f2 100644
--- a/docs/guides/using-guardrails/troubleshooting/access-control-logs/index.md
+++ b/docs/artemis/guardrails/controls/access-control-logs/index.md
@@ -1,9 +1,9 @@
---
-title: Access Control Logs
-sidebar_label: Access Control Logs
+title: View Control Logs
+sidebar_label: View Control Logs 🛠
---
-# Access Control Logs
+# View Control Logs
In this guide, you will:
- Learn how to retrieve and analyze access logs to investigate control failures in the Guardrails console.
@@ -23,14 +23,14 @@ Control logs are essential for tracking activities and operations within a Guard
Log in to the Guardrails console.
-
+
## Step 2: Navigate to Control
Navigate to the control page to inspect the failure details. Select **VIEW LOG**.
-
+
> [!NOTE]
> `Handling...` signifies the control is in the execution state. You can still view the logs by selecting **VIEW LOG**. This example demonstrates a control in the `ERROR` state. However, logs can be viewed for analysis at any state of the control.
@@ -40,14 +40,14 @@ Navigate to the control page to inspect the failure details. Select **VIEW LOG**
From the **Level:** dropdown filter, choose **Debug and above**.
-
+
## Step 4: Copy Logs
Select the **Copy to clipboard** button and save the logs in a `.txt` file.
-
+
> [!IMPORTANT]
> If debug logs are unavailable, rerun the control to generate the logs. Refer `Step 5` based on need.
@@ -56,7 +56,7 @@ Select the **Copy to clipboard** button and save the logs in a `.txt` file.
If the logs are incomplete or display `Internal Error`, rerun the control to generate a fresh log.
-
+
## Support
diff --git a/docs/guides/using-guardrails/troubleshooting/access-control-logs/run-control.png b/docs/artemis/guardrails/controls/access-control-logs/run-control.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/access-control-logs/run-control.png
rename to docs/artemis/guardrails/controls/access-control-logs/run-control.png
diff --git a/docs/artemis/guardrails/controls/index.md b/docs/artemis/guardrails/controls/index.md
new file mode 100644
index 00000000..ff42cf2d
--- /dev/null
+++ b/docs/artemis/guardrails/controls/index.md
@@ -0,0 +1,106 @@
+---
+title: Controls
+sidebar_label: Controls
+---
+
+# Controls
+
+A Guardrail configures one or more **Controls**. The control is responsible for evaluating and enforcing one or more [policies](artemis/guardrails/policies); it "controls" all policy enforcements, either generating alarms or taking action against out-of-compliance cloud resources.
+
+When you create a guardrail, you add one or more [Control Types](#control-types) that the guardrail will apply and then set the [policies](artemis/guardrails/policies) that govern the controls behavior.
+
+Controls, like policies, target a resource type. When you attach a guardrail to an account, Guardrails will create an instance of the control for each of the targeted resources. For instance, when you attach a guardrail that includes the `AWS > S3 > Bucket > Versioning` control type to your account, Guardrails will create an instance of the control for every bucket in the account, each with its own [control state](#control-state).
+
+The control's behavior is governed by:
+- The *policies* on which it depends. The policy settings essentially represent the desired state of the resource.
+- The state of the *resource*. This reflects the actual state that the control should compare against the policy posture to determine the state of the control. Whenever the resource state changes, the control will re-run to keep the resource in the desired state.
+- The current *phase* of the guardrail. While the policies may specify to `enforce` the control, it will not run enforcement actions unless the guardrail is in the `enforce` phase. In prior phases, it will remain in the alarm state but not change the resource.
+
+
+## Control Types
+
+A **Control Type** is a definition for a particular control. Each different control type is a blueprint that can be configured for resources, such the **Encryption at Rest** control type for AWS S3 buckets. The`AWS > S3 > Bucket > Encryption at Rest` control evaluates the policy settings to determine the desired S3 bucket encryption settings and compares that to the current state of the bucket, and updates the control state. Depending on the policy settings, the control may merely raise an alarm, or it may automatically fix the resource by applying the appropriate encryption settings.
+
+## Control State
+
+Controls are responsible for enforcing policy values. This introduces the concept of a **Control State**. After a control has completed running, it is assigned a state, which can depend on a variety of factors, such as the IAM permissions (i.e. can Guardrails describe the resource?), pending work (i.e. is a policy waiting to be calculated?), or simply that the evaluated policy tells the control to not do anything.
+
+Controls have six different possible states:
+
+| State | Description
+|-------|-------------
+| **OK** | Generally, this is the desired state of any control in the environment. It implies that Guardrails and cloud resources are working and within the guidelines set by the organization via a policy set. An OK state is denoted by a green checkmark while on the controls tab.
+| **Alarm** | Controls in the alarm state are either waiting to be modified by Guardrails for compliance (this generally clears within a few seconds), or have a policy/ collection of policies configured such that Guardrails is only monitoring cloud resources rather than remediating. Controls in alarm should be investigated by administrators, as enforcement requires review.
+| **Error** | The error state signifies that the control cannot enforce the configured policy values on a specific resource, or that a specific resource is misconfigured. This can be for a variety of reasons, such as the Guardrails role in the target account does not have sufficient permissions to describe or modify a resource. Each error will need to be evaluated by an administrator. Often, the control itself will specify what issue occurred, be it a policy misconfiguration or permissions. If there are any questions or concerns regarding controls in error, contact [Guardrails Support](mailto:help@turbot.com).
+| **Invalid** | This control state means that Guardrails cannot configure, or possibly describe, a particular resource due to policy misconfigurations. For example, if an administrator has the policy `AWS > EC2 > Key Pair` set to `Check: Active`, but all dependent policies such as `AWS > EC2 > Key Pair > Active > Age` are set to skip, Guardrails does not have the required policy settings to accurately evaluate what `Active` means. In this case, the control `AWS > EC2 > Key Pair > Active` is invalid.
+| **Skipped** | A skipped state means that the resource in question is not evaluated by policies by choice. This can range from not enforcing or checking tags on resources to allowing users to build any security group in one or many cloud accounts.
+| **To Be Determined (TBD)** | Controls waiting on policies to be calculated will be in the TBD state. When troubleshooting controls in a TBD state, check the policies tab to ensure that no policies are also in the TBD state. This can be accomplished by navigating to the **Policies** tab, then clicking on **Values**, then setting the **State** dropdown menu on the right side to **TBD**.
+
+
+## Muting Controls
+
+You can **mute** controls if you want to ignore them. For example, you may want to suppress errors and alarms for specific controls because they have a known, valid reason to be out of compliance. Or perhaps a fix is pending, so you want to ignore the alarms until they go to an `OK` state. By muting these controls, you can reduce noise and increase the visibility of the controls that matter.
+
+Control muting helps streamline operations without compromising security policies. It’s a lightweight alternative to adjusting policy settings or creating exceptions, and it’s particularly useful in these scenarios:
+
+- **Planned changes and maintenance**: During scheduled maintenance or infrastructure updates, muting specific controls reduces unnecessary alerts while preserving visibility into other issues. For example, muting high availability controls during a planned 4-hour failover test, or replication controls during a 2-week regional migration.
+
+- **Known issues under resolution** When actively addressing an issue, mute controls to focus efforts:
+ - Suppress alerts until a fix is deployed (e.g., mute until the control status changes to `OK`).
+ - Temporarily silence noisy controls while fixing errors (e.g., mute `ERROR` states).
+ - Mute controls for a specific timeframe during fix deployment (e.g., `Mute for 1 Month`).
+ - Reduce noise from multiple related controls, focusing on the key issue.
+
+- **False Positive Management** While tuning detection logic, mute controls that generate known false positives. This allows teams to adjust underlying rules without being overwhelmed by irrelevant alerts.
+
+
+When a control is muted:
+- It will be displayed in the console with a gray `MUTED [{state}]` state (e.g. `MUTED [ERROR]`).
+- It will not be "scored." It will not be shown by default when the display is filtered by state, nor will it be included in the totals for its state. For example, if the control is in an `ERROR` state but is muted, it will not be reflected in the count of `ERROR` controls, and the control will not appear when filtering on `state:error.`
+- Enforcement actions will not run.
+
+
+
+You can mute or unmute a control from its [detail page](#control-detail-page). You may mute the control indefinitely, set an expiration date and time, or mute the control until it changes to a specific state or states, e.g.:
+- Mute for 1 day
+- Mute for 1 month
+- Mute until OK
+- Mute until Alarm
+- Mute Indefinitely
+
+
diff --git a/docs/concepts/processes/index.md b/docs/artemis/guardrails/controls/processes/index.md
similarity index 100%
rename from docs/concepts/processes/index.md
rename to docs/artemis/guardrails/controls/processes/index.md
diff --git a/docs/artemis/guardrails/create-guardrail/create-guardrail-advanced.png b/docs/artemis/guardrails/create-guardrail/create-guardrail-advanced.png
new file mode 100644
index 00000000..809bc4e5
Binary files /dev/null and b/docs/artemis/guardrails/create-guardrail/create-guardrail-advanced.png differ
diff --git a/docs/artemis/guardrails/create-guardrail/create-guardrail-filled.png b/docs/artemis/guardrails/create-guardrail/create-guardrail-filled.png
new file mode 100644
index 00000000..666060f7
Binary files /dev/null and b/docs/artemis/guardrails/create-guardrail/create-guardrail-filled.png differ
diff --git a/docs/artemis/guardrails/create-guardrail/guardrails-tab.png b/docs/artemis/guardrails/create-guardrail/guardrails-tab.png
new file mode 100644
index 00000000..3d22ebad
Binary files /dev/null and b/docs/artemis/guardrails/create-guardrail/guardrails-tab.png differ
diff --git a/docs/artemis/guardrails/create-guardrail/index.md b/docs/artemis/guardrails/create-guardrail/index.md
new file mode 100644
index 00000000..ab8117cd
--- /dev/null
+++ b/docs/artemis/guardrails/create-guardrail/index.md
@@ -0,0 +1,127 @@
+---
+title: Create a Guardrail
+sidebar_label: Create a Guardrail 🛠
+---
+
+# Create a Guardrail
+
+In this guide, you will create a [Guardrail](artemis/guardrails) to accomplish a policy objective.
+
+
+## Prerequisites
+
+- Access to the Turbot Guardrails console with `Turbot/Admin` privilege.
+
+- One or [mods](managing/mods) installed
+
+## Step 1: Navigate to the Guardrails page
+
+From the left-hand navigation bar, select **Guardrails**.
+
+
+
+## Step 2: Open the **New Guardrail** page
+
+Click the **New ▼** action button at the top right and select **New Guardrail** to open the **Create Guardrail** screen.
+
+
+
+
+## Step 3: Enter the guardrail details
+
+On the the **Create Guardrail** page, enter a name for your guardrail, and optionally a short description.
+
+Each guardrail must include one or more [controls](artemis/guardrails/controls) to accomplish your objectives. Select one or more control types that guardrail will implement. You can type to search, and then select the control type you with to add.
+
+
+
+## Step 4: Optionally enter advanced configuration
+
+Optionally, click **Advanced** to set the advanced options.
+
+You can restrict the account types to which the guardrail applies by choosing **Targets**, and set a unique [AKA](reference/glossary#aka-also-known-as) for your guardrail
+
+
+
+
+## Step 5: Review and create the guardrail
+Review your options, and click the **Create** button at the bottom of the screen to create your new guardrail.
+
+## Step 6: Create the policy settings
+After the guardrail has been created, you will be redirected to the **Config** page for your guardrail so that you can set the [policy settings](artemis/guardrails/policies) to your desired values.
+
+To set a policy, select it from the list. Since you have just created the guardrail, the policy wil not yet have a setting. Click **create one** to enter the setting.
+
+
+
+## Step 7: Enter the policy settings
+
+On the **Enter the Policy Settings** page, enter the desired value for your setting
+.
+
+
+
+
+
+## Step 8: Review
+
+In this guide you've learned how to create a [Guardrail](artemis/guardrails) to accomplish a policy objective.
+
+
+## Next Steps
+
+You guardrail has been created, but it is not yet in effect. You must attach it to your accounts. You can [attach it directly](), but its generally recommended to [deploy guardrails with a rollout]().
+
+## Troubleshooting
+
+If you run into issues following this guide, jump in the `#guardrails` channel in the [Turbot Community Slack](https://turbot.com/community/join), or [open a support ticket](https://support.turbot.com/hc/en-us/requests/new).
+
diff --git a/docs/artemis/guardrails/create-guardrail/new-guardrail-button.png b/docs/artemis/guardrails/create-guardrail/new-guardrail-button.png
new file mode 100644
index 00000000..e384457b
Binary files /dev/null and b/docs/artemis/guardrails/create-guardrail/new-guardrail-button.png differ
diff --git a/docs/artemis/guardrails/create-guardrail/versioning-policy-blank.png b/docs/artemis/guardrails/create-guardrail/versioning-policy-blank.png
new file mode 100644
index 00000000..2ed22e41
Binary files /dev/null and b/docs/artemis/guardrails/create-guardrail/versioning-policy-blank.png differ
diff --git a/docs/artemis/guardrails/create-guardrail/versioning-policy-filled.png b/docs/artemis/guardrails/create-guardrail/versioning-policy-filled.png
new file mode 100644
index 00000000..4605edb2
Binary files /dev/null and b/docs/artemis/guardrails/create-guardrail/versioning-policy-filled.png differ
diff --git a/docs/artemis/guardrails/delete-guardrail/index.md b/docs/artemis/guardrails/delete-guardrail/index.md
new file mode 100644
index 00000000..0a8d0efe
--- /dev/null
+++ b/docs/artemis/guardrails/delete-guardrail/index.md
@@ -0,0 +1,4 @@
+---
+title: Delete a Guardrail
+sidebar_label: Delete a Guardrail 🛠
+---
\ No newline at end of file
diff --git a/docs/artemis/guardrails/index.md b/docs/artemis/guardrails/index.md
new file mode 100644
index 00000000..01612f5c
--- /dev/null
+++ b/docs/artemis/guardrails/index.md
@@ -0,0 +1,72 @@
+---
+title: Guardrails
+---
+
+# Guardrails
+
+A **Guardrail** is a deployable unit of policy enforcement that implements a control objective, such as enforcing encryption, monitoring access, and securing networking configurations.
+
+Each guardrail configures one or more [controls](artemis/controls), according the [policy settings](artemis/policies) in the guardrail.
+
+You can attach guardrails to accounts directly, but its generally recommended to deploy them via [rollouts](artemis/rollouts) instead. Rollouts allow you to automate the rollout of one or more guardrails, including scheduling the rollout and sending communications to account teams.
+
+
+
+## Phases
+Guardrail **phases** enable a predictable, reliable, ordered rollout procedure. Phases allow you to bring visibility to stakeholders at the appropriate time, and allow you to preview the impact of change.
+
+For example, the cloud team can attach a guardrail in `draft` to preview its impact on the account without impacting the account team in anyway. If the cloud team decides to deploy the change, then they can then move to `preview` to provide visibility to the account team before the change impacts their compliance score. Subsequently moving to `check` means the guardrail is now scored, but no automatic remediation takes places. This gives the account team time to manually fix the issue. Moving to `enforce` will cause Turbot Guardrails to enforce the guardrail, automatically remediating the issues as they are found.
+
+You can manually attach guardrails and promote them through the phases, but it is generally recommended to deploy guardrails with [rollouts](artemis/rollouts).
+
+
+When attached, a guardrail will be in exactly one phase at a time for a given account.
+
+| Phase | Description
+|---------------|------------------------------------------------------
+| (unattached) | The guardrail is installed but not yet attached.
+| `draft` | Exactly like check, but doesn't count toward your control score, and is ENTIRELY hidden from the account teams. The purpose is for the **Cloud Team** to evaluate the potential impact and determine whether they want to roll it out. Notices should not be sent in this phase.
+| `preview` | Exactly like check, but doesn't count toward your control score. it's a way for the **account teams** that own the accounts see what a guardrail will do before it impacts their score. In preview, we start to notify the account teams to let them know this will be rolled out.
+| `check` | Create alarms but do not enforce settings or remediate automatically. The alarms are scored at this point.
+| `enforce` | Enforce settings where possible/desired
+
+
+Phases are meant to be ordered / progressive; you start in `draft`, move to `preview`, then `check`, then ideally move to `enforce`. You are not required to proceed in order, or to proceed through all phases, however. You may move backward as well - from `enforce` back to `check`, from `check` to `preview`, etc.
+
+
+
+
+
+## Guardrails vs Policy Packs
+Conceptually, a guardrail configures one or more controls via its associated policies. Guardrails are the successor to [Policy Packs](artemis/policies/policy-packs), and generally should be preferred to policy packs because the they provide additional advantages:
+- Guardrails specify which control(s) they configure, allowing Turbot Guardrails to detect and limit conflicts with other guardrails.
+- You can deploy guardrails with rollouts. Rollouts only work with Guardrails, not policy packs.
+- You don't have to worry about attachment order for guardrails, since you are prevented from attaching guardrails with the same control to the same account. Note that Guardrails are alway attached BEFORE policy packs.
+- You can only add, remove, or edit a setting to a Guardrail when it’s in unattached, draft or preview phase.
+
+To simplify their behavior, Guardrails also have some limitations that don't apply to policy packs:
+- Guardrails may only be created at Turbot level, whereas Policy Packs may be created anywhere in the hierarchy.
+- Guardrails may only target accounts (AWS accounts, Azure subscriptions, GCP projects, etc.), and are not attachable to folders or specific resources.
+- A guardrail can only include policies that relate to the controls that it targets.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/concepts/policies/backup-policy.png b/docs/artemis/guardrails/policies/backup-policy.png
similarity index 100%
rename from docs/concepts/policies/backup-policy.png
rename to docs/artemis/guardrails/policies/backup-policy.png
diff --git a/docs/getting-started/7-minute-labs/calc-policy/calculated-policy-test.png b/docs/artemis/guardrails/policies/calculated/calc-policy-lab/calculated-policy-test.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/calc-policy/calculated-policy-test.png
rename to docs/artemis/guardrails/policies/calculated/calc-policy-lab/calculated-policy-test.png
diff --git a/docs/getting-started/7-minute-labs/calc-policy/get-cal-policy.png b/docs/artemis/guardrails/policies/calculated/calc-policy-lab/get-cal-policy.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/calc-policy/get-cal-policy.png
rename to docs/artemis/guardrails/policies/calculated/calc-policy-lab/get-cal-policy.png
diff --git a/docs/getting-started/7-minute-labs/calc-policy/index.md b/docs/artemis/guardrails/policies/calculated/calc-policy-lab/index.md
similarity index 99%
rename from docs/getting-started/7-minute-labs/calc-policy/index.md
rename to docs/artemis/guardrails/policies/calculated/calc-policy-lab/index.md
index 060d2cab..be6719fb 100644
--- a/docs/getting-started/7-minute-labs/calc-policy/index.md
+++ b/docs/artemis/guardrails/policies/calculated/calc-policy-lab/index.md
@@ -1,9 +1,6 @@
---
title: Calculated Policies in 7 minutes
-template: Documentation
-nav:
- title: Calculated Policies
- order: 20
+sidebar_label: Calculated Policies in 7 minutes 🔬
---
# Calculated Policies in 7 minutes
diff --git a/docs/getting-started/7-minute-labs/calc-policy/update-cal-policy.png b/docs/artemis/guardrails/policies/calculated/calc-policy-lab/update-cal-policy.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/calc-policy/update-cal-policy.png
rename to docs/artemis/guardrails/policies/calculated/calc-policy-lab/update-cal-policy.png
diff --git a/docs/concepts/policies/calculated-faq.md b/docs/artemis/guardrails/policies/calculated/calculated-faq.md
similarity index 100%
rename from docs/concepts/policies/calculated-faq.md
rename to docs/artemis/guardrails/policies/calculated/calculated-faq.md
diff --git a/docs/artemis/guardrails/policies/calculated/create-calc-setting/index.md b/docs/artemis/guardrails/policies/calculated/create-calc-setting/index.md
new file mode 100644
index 00000000..81e36b44
--- /dev/null
+++ b/docs/artemis/guardrails/policies/calculated/create-calc-setting/index.md
@@ -0,0 +1,100 @@
+---
+title: Create a Calculated Policy Setting
+sidebar_label: Create a Calculated Policy Setting 🛠
+---
+
+# Create a Calculated Policy Setting
+
+While most policy settings can be set with a simple static value, there may be
+instances where more flexibility is needed in determining the correct option.
+[Calculated policies](concepts/policies/values-settings#calculating-policy-values-for-a-resource)
+allow you to dynamically compute the policy value using information available in
+the Guardrails CMDB.
+
+Any policy in Guardrails can use a calculated policy instead of a static value!
+
+## Calculated Policy Taxonomy
+
+What defines a calculated policy?
+
+1. A [GraphQL](reference/graphql) query. This query automatically pivots to the
+ current resource, simplifying the query syntax. For example, if you query
+ `resource`, Guardrails knows you mean _this (the current) resource_, and querying
+ `region` means _the region for this (the current) resource_:
+
+```graphql
+{
+ resource {
+ tags
+ }
+ region {
+ Name
+ }
+}
+```
+
+2. A [Nunjucks](https://mozilla.github.io/nunjucks/) template to define logic,
+ parse the query response, and eventually output a value. For example:
+
+```
+{% if $.resource.tags['data-classification'] == "temp" %}
+"Enforce: Disabled"
+{% else %}
+"Enforce: Enabled"
+{% endif %}
+```
+
+## Create a Calculated Policy Setting [Guardrails Console]
+
+You can create a policy setting in the Guardrails Console in the same way that you
+can
+[create a simple policy setting](guides/managing-policies#creating-simple-policy-settings),
+however instead of entering a value for the **Setting**, click **Enable
+calculated mode** and click **Launch calculated policy builder**.
+
+To create a calculated policy, navigate to the **Create Policy Setting** page.
+Select **Enable calculated mode** then **Launch calculated policy builder**.
+
+1. Select a **Test Resource** that is used to verify the query.
+2. Enter a valid **GraphQL Input Query**. The query Output box will update in
+ real time.
+3. Enter a valid **Nunjucks Template**. Once again, this is logic that can be
+ used to parse the query and then output a value based on template logic.
+4. Verify that the final computed policy value in the **Result** box is correct
+ and has passed validation.
+ 
+
+5. If desired, change the **Test Resource** to verify against other resources.
+6. Click **Update** to set the calculated policy.
+7. Click **Create** to create your new policy setting.
+ 
+
+## Creating a Policy Setting [Terraform]
+
+You can manage policy settings with Terraform using the
+[turbot_policy_setting](https://www.terraform.io/docs/providers/turbot/r/policy_setting.html)
+resource by specifying a `template` and `template_input`. Syntax here is VERY
+important. Note the `EOT` encapsulating both the template and template_input!
+
+```hcl
+# AWS > S3 > Bucket > Versioning
+resource "turbot_policy_setting" "s3_bucket_versioning" {
+ resource = turbot_policy_pack.baseline.id
+ type = "tmod:@turbot/aws-s3#/policy/types/bucketVersioning"
+ template_input = < Age` policy be
+calculated. However, this can sometimes result in the `Active` control going
+into an `invalid` state, as they require at least one of the sub policies not be
+in `Skip`. To solve this problem, a calc policy can be placed on the `Active`
+policy with similar logic to the `Active > Age` policy. This way, evaluation of
+the `Active` control as a whole will go to `Skipped` and avoid the `invalid`
+state.
+
+## Multi-query Calculated Policies
+
+The below Terraform excerpt shows the YAML array of GraphQL+Nunjucks templates.
+
+```yaml
+- |
+ {
+ account {
+ turbot {
+ id
+ }
+ }
+ }
+- |
+ {
+ account {
+ turbot {
+ id
+ }
+ }
+ trails: resources(filter: "resourceId:{{ $.account.turbot.id }} resourceTypeId:'tmod:@turbot/aws-cloudtrail#/resource/types/trail' $.Status.IsLogging:true $.IsMultiRegionTrail:true limit:300") {
+ items {
+ trailName: get(path: "Name")
+ cloudWatchLogsLogGroupArn: get(path: "CloudWatchLogsLogGroupArn")
+ eventSelectors: get(path: "EventSelectors")
+ }
+ }
+ }
+```
+
+Notes:
+
+- The YAML `- |` symbols are essential as this indicates that this is an array
+ of queries and the strings in each array element are multi-line. These `- |`
+ array indicators should be on their own lines. YAML is also particular about
+ indentation.
+- Only the results of the final query are sent to the control. Any intermediate
+ results must also be included in the final query. The example shows how this
+ is done.
+- GraphQL permits multiple `resources()` queries when they have labels. The
+ `trails:` label shows how this is done.
+- A full example can be found in the
+ [Guardrails Samples Repo](https://github.com/turbot/guardrails-samples/blob/main/policy_packs/aws/ec2/enforce_encryption_at_rest_is_enabled_for_ebs_volumes/README.md).
+
+## Additional Information
+
+- [Calculated Policy 7 minute lab](7-minute-labs/calc-policy)
+- [Guardrails Samples Repo with Policy Packs](https://github.com/turbot/guardrails-samples/tree/main/policy_packs)
+- [Policies concepts page](concepts/policies)
+- [AWS resource tagging example with calculated policies and Terraform](https://github.com/turbot/guardrails-samples/tree/main/policy_packs/aws/ec2/enforce_instances_use_amis_with_approved_tags)
+- [Calculated Policy FAQ](/guardrails/docs/concepts/policies/calculated-faq)
diff --git a/docs/concepts/policies/default-policy.png b/docs/artemis/guardrails/policies/default-policy.png
similarity index 100%
rename from docs/concepts/policies/default-policy.png
rename to docs/artemis/guardrails/policies/default-policy.png
diff --git a/docs/concepts/policies/exception.png b/docs/artemis/guardrails/policies/exception.png
similarity index 100%
rename from docs/concepts/policies/exception.png
rename to docs/artemis/guardrails/policies/exception.png
diff --git a/docs/artemis/guardrails/policies/index.md b/docs/artemis/guardrails/policies/index.md
new file mode 100644
index 00000000..5ddbe2f1
--- /dev/null
+++ b/docs/artemis/guardrails/policies/index.md
@@ -0,0 +1,99 @@
+---
+title: Policies
+sidebar_label: Policies
+---
+
+# Policies
+
+Each guardrail comprises one or more **Policy Settings** that determine its intended behavior. Policies are essentially the settings and options that allow you to configure the Guardrail to meet your requirements.
+
+Guardrails Policies can be managed using the Guardrails UI, Guardrails API or Terraform.
+
+
+## Policy Types
+
+A **Policy Type** defines a specific setting that may be configured for resources. For example, `AWS > S3 > Bucket > Versioning`.
+
+Each policy type targets one or more [Resource Types](concepts/resources/types-categories#resource-types).
+
+Policy types are defined in [Mods](https://hub.guardrails.turbot.com/#mods).
+
+
+## Policy Settings
+
+A **Policy Setting** represents the intended configuration of the policy type for a given guardrail. When you create a guardrail, you configure policy settings to control the behavior of the controls for the guardrail.
+
+For example, to create a guardrail to enforce bucket versioning, add the `AWS > S3 > Bucket > Versioning` control to the guardrail and configure its `Versioning` policy setting to `Enforce: Enabled`.
+
+
+## Policy Values
+
+A **Policy Value** is the effective policy setting for a given resource. Every resource that is targeted by a given policy setting will have its own value for that policy. For example, if you apply a guardrail to your account that has the `AWS > S3 > Bucket > Versioning` set to `Enforce: Enabled`, every bucket in the account will have its own policy value for `AWS > S3 > Bucket > Versioning` that is set to `Enforce: Enabled`.
+
+In most cases the policy setting is a static data value, so the policy values are the same as the policy setting in the guardrail. The distinction between a setting and the resulting values becomes significant when using [calculated policies](#calculated-policies); the calculated policy setting defines a template for dynamically determining the value for each resource.
+
+
+## Calculated Policies
+
+Policy settings may be defined as calculated policies to dynamically set their values. You can look up data in the CMDB and then apply logic to determine the appropriate value on a per-resource basis. For example, you could create a calculated policy setting that looks up the tags on a bucket and enforces versioning unless there is a `classification` tag with a value of `temp`. Guardrails will calculate this policy for each bucket that the guardrail is attached to, and each will have its own value.
+
+
+
+To create a calculated policy value, you must specify:
+
+- An **Input Query**. The input query allows you to query the guardrails CMDB for information about the resource. The input query must be a valid graphql query. For example:
+ ```graphql
+ {
+ bucket {
+ turbot {
+ tags
+ }
+ }
+ }
+ ```
+- A nunjucks **Template**. The template can use the results of the input query (referenced with the `$` variable) and transform them into the format expected by the policy. For example:
+ ```jinja
+ {% if $.bucket.turbot.tags.classification == "temp" -%}
+ 'Skip'
+ {% else -%}
+ 'Enforce: Enabled'
+ {%- endif %}
+ ```
+
+
+
\ No newline at end of file
diff --git a/docs/concepts/policies/inherit-1.png b/docs/artemis/guardrails/policies/inherit-1.png
similarity index 100%
rename from docs/concepts/policies/inherit-1.png
rename to docs/artemis/guardrails/policies/inherit-1.png
diff --git a/docs/concepts/policies/inherit-2.png b/docs/artemis/guardrails/policies/inherit-2.png
similarity index 100%
rename from docs/concepts/policies/inherit-2.png
rename to docs/artemis/guardrails/policies/inherit-2.png
diff --git a/docs/concepts/policies/inherit-3.png b/docs/artemis/guardrails/policies/inherit-3.png
similarity index 100%
rename from docs/concepts/policies/inherit-3.png
rename to docs/artemis/guardrails/policies/inherit-3.png
diff --git a/docs/concepts/policies/inherit-4.png b/docs/artemis/guardrails/policies/inherit-4.png
similarity index 100%
rename from docs/concepts/policies/inherit-4.png
rename to docs/artemis/guardrails/policies/inherit-4.png
diff --git a/docs/concepts/policies/inherit-5.png b/docs/artemis/guardrails/policies/inherit-5.png
similarity index 100%
rename from docs/concepts/policies/inherit-5.png
rename to docs/artemis/guardrails/policies/inherit-5.png
diff --git a/docs/concepts/policies/policy-pack-2.png b/docs/artemis/guardrails/policies/policy-pack-2.png
similarity index 100%
rename from docs/concepts/policies/policy-pack-2.png
rename to docs/artemis/guardrails/policies/policy-pack-2.png
diff --git a/docs/concepts/policies/policy-pack.png b/docs/artemis/guardrails/policies/policy-pack.png
similarity index 100%
rename from docs/concepts/policies/policy-pack.png
rename to docs/artemis/guardrails/policies/policy-pack.png
diff --git a/docs/concepts/policies/policy_types_categories-ex.png b/docs/artemis/guardrails/policies/policy_types_categories-ex.png
similarity index 100%
rename from docs/concepts/policies/policy_types_categories-ex.png
rename to docs/artemis/guardrails/policies/policy_types_categories-ex.png
diff --git a/docs/concepts/policies/sf-inject.png b/docs/artemis/guardrails/policies/sf-inject.png
similarity index 100%
rename from docs/concepts/policies/sf-inject.png
rename to docs/artemis/guardrails/policies/sf-inject.png
diff --git a/docs/concepts/policies/taxonomy.md b/docs/artemis/guardrails/policies/taxonomy.md.og
similarity index 100%
rename from docs/concepts/policies/taxonomy.md
rename to docs/artemis/guardrails/policies/taxonomy.md.og
diff --git a/docs/concepts/policies/types-categories.md b/docs/artemis/guardrails/policies/types-categories.md.og
similarity index 100%
rename from docs/concepts/policies/types-categories.md
rename to docs/artemis/guardrails/policies/types-categories.md.og
diff --git a/docs/concepts/guardrails/access-logging.md b/docs/artemis/guardrails/standard/access-logging.md
similarity index 100%
rename from docs/concepts/guardrails/access-logging.md
rename to docs/artemis/guardrails/standard/access-logging.md
diff --git a/docs/concepts/guardrails/active.md b/docs/artemis/guardrails/standard/active.md
similarity index 100%
rename from docs/concepts/guardrails/active.md
rename to docs/artemis/guardrails/standard/active.md
diff --git a/docs/concepts/guardrails/approved.md b/docs/artemis/guardrails/standard/approved.md
similarity index 100%
rename from docs/concepts/guardrails/approved.md
rename to docs/artemis/guardrails/standard/approved.md
diff --git a/docs/concepts/guardrails/audit-logging.md b/docs/artemis/guardrails/standard/audit-logging.md
similarity index 100%
rename from docs/concepts/guardrails/audit-logging.md
rename to docs/artemis/guardrails/standard/audit-logging.md
diff --git a/docs/concepts/guardrails/budget.md b/docs/artemis/guardrails/standard/budget.md
similarity index 100%
rename from docs/concepts/guardrails/budget.md
rename to docs/artemis/guardrails/standard/budget.md
diff --git a/docs/concepts/guardrails/configured.md b/docs/artemis/guardrails/standard/configured.md
similarity index 100%
rename from docs/concepts/guardrails/configured.md
rename to docs/artemis/guardrails/standard/configured.md
diff --git a/docs/concepts/guardrails/data-protection.md.not-yet-implemented b/docs/artemis/guardrails/standard/data-protection.md.not-yet-implemented
similarity index 100%
rename from docs/concepts/guardrails/data-protection.md.not-yet-implemented
rename to docs/artemis/guardrails/standard/data-protection.md.not-yet-implemented
diff --git a/docs/concepts/guardrails/encryption-at-rest.md b/docs/artemis/guardrails/standard/encryption-at-rest.md
similarity index 100%
rename from docs/concepts/guardrails/encryption-at-rest.md
rename to docs/artemis/guardrails/standard/encryption-at-rest.md
diff --git a/docs/concepts/guardrails/encryption-in-transit.md b/docs/artemis/guardrails/standard/encryption-in-transit.md
similarity index 100%
rename from docs/concepts/guardrails/encryption-in-transit.md
rename to docs/artemis/guardrails/standard/encryption-in-transit.md
diff --git a/docs/concepts/guardrails/index.md b/docs/artemis/guardrails/standard/index.md
similarity index 98%
rename from docs/concepts/guardrails/index.md
rename to docs/artemis/guardrails/standard/index.md
index 507f4c72..963e9204 100644
--- a/docs/concepts/guardrails/index.md
+++ b/docs/artemis/guardrails/standard/index.md
@@ -1,9 +1,9 @@
---
-title: Guardrails
-sidebar_label: Guardrails
+title: Standard Guardrails
+sidebar_label: Standard Guardrails
---
-# Guardrails
+# Standard Guardrails
Turbot Guardrails [Policies](concepts/policies) and [Controls](concepts/controls) provide a
flexible framework for auditing and enforcing configuration across hundreds of
diff --git a/docs/concepts/guardrails/public-access.md b/docs/artemis/guardrails/standard/public-access.md
similarity index 100%
rename from docs/concepts/guardrails/public-access.md
rename to docs/artemis/guardrails/standard/public-access.md
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png
diff --git a/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/index.md b/docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/index.md
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag/index.md
rename to docs/artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag/index.md
diff --git a/docs/concepts/guardrails/scheduling.md b/docs/artemis/guardrails/standard/scheduling/index.md
similarity index 100%
rename from docs/concepts/guardrails/scheduling.md
rename to docs/artemis/guardrails/standard/scheduling/index.md
diff --git a/docs/guides/using-guardrails/scheduling/index.md b/docs/artemis/guardrails/standard/scheduling/index.md.og
similarity index 100%
rename from docs/guides/using-guardrails/scheduling/index.md
rename to docs/artemis/guardrails/standard/scheduling/index.md.og
diff --git a/docs/guides/using-guardrails/stacks/deploy/aws_iam_stack_control_log_create_top.png b/docs/artemis/guardrails/standard/stacks/deploy/aws_iam_stack_control_log_create_top.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/deploy/aws_iam_stack_control_log_create_top.png
rename to docs/artemis/guardrails/standard/stacks/deploy/aws_iam_stack_control_log_create_top.png
diff --git a/docs/guides/using-guardrails/stacks/deploy/aws_iam_stack_controls_ok.png b/docs/artemis/guardrails/standard/stacks/deploy/aws_iam_stack_controls_ok.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/deploy/aws_iam_stack_controls_ok.png
rename to docs/artemis/guardrails/standard/stacks/deploy/aws_iam_stack_controls_ok.png
diff --git a/docs/guides/using-guardrails/stacks/deploy/index.md b/docs/artemis/guardrails/standard/stacks/deploy/index.md
similarity index 100%
rename from docs/guides/using-guardrails/stacks/deploy/index.md
rename to docs/artemis/guardrails/standard/stacks/deploy/index.md
diff --git a/docs/guides/using-guardrails/stacks/destroy/aws_iam_stack_control_log_delete_preview.png b/docs/artemis/guardrails/standard/stacks/destroy/aws_iam_stack_control_log_delete_preview.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/destroy/aws_iam_stack_control_log_delete_preview.png
rename to docs/artemis/guardrails/standard/stacks/destroy/aws_iam_stack_control_log_delete_preview.png
diff --git a/docs/guides/using-guardrails/stacks/destroy/aws_iam_stack_control_log_destroy.png b/docs/artemis/guardrails/standard/stacks/destroy/aws_iam_stack_control_log_destroy.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/destroy/aws_iam_stack_control_log_destroy.png
rename to docs/artemis/guardrails/standard/stacks/destroy/aws_iam_stack_control_log_destroy.png
diff --git a/docs/guides/using-guardrails/stacks/destroy/aws_iam_stack_controls_alarm.png b/docs/artemis/guardrails/standard/stacks/destroy/aws_iam_stack_controls_alarm.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/destroy/aws_iam_stack_controls_alarm.png
rename to docs/artemis/guardrails/standard/stacks/destroy/aws_iam_stack_controls_alarm.png
diff --git a/docs/guides/using-guardrails/stacks/destroy/index.md b/docs/artemis/guardrails/standard/stacks/destroy/index.md
similarity index 100%
rename from docs/guides/using-guardrails/stacks/destroy/index.md
rename to docs/artemis/guardrails/standard/stacks/destroy/index.md
diff --git a/docs/guides/using-guardrails/stacks/import/1-resource-imported.png b/docs/artemis/guardrails/standard/stacks/import/1-resource-imported.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/1-resource-imported.png
rename to docs/artemis/guardrails/standard/stacks/import/1-resource-imported.png
diff --git a/docs/guides/using-guardrails/stacks/import/1-resource-updated.png b/docs/artemis/guardrails/standard/stacks/import/1-resource-updated.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/1-resource-updated.png
rename to docs/artemis/guardrails/standard/stacks/import/1-resource-updated.png
diff --git a/docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-configured-enforced.png b/docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-configured-enforced.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-configured-enforced.png
rename to docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-configured-enforced.png
diff --git a/docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-control.png b/docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-control.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-control.png
rename to docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-control.png
diff --git a/docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-modifier.png b/docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-modifier.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-modifier.png
rename to docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-modifier.png
diff --git a/docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-source.png b/docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-source.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/aws-iam-native-stack-source.png
rename to docs/artemis/guardrails/standard/stacks/import/aws-iam-native-stack-source.png
diff --git a/docs/guides/using-guardrails/stacks/import/aws-iam-role-search.png b/docs/artemis/guardrails/standard/stacks/import/aws-iam-role-search.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/aws-iam-role-search.png
rename to docs/artemis/guardrails/standard/stacks/import/aws-iam-role-search.png
diff --git a/docs/guides/using-guardrails/stacks/import/index.md b/docs/artemis/guardrails/standard/stacks/import/index.md
similarity index 94%
rename from docs/guides/using-guardrails/stacks/import/index.md
rename to docs/artemis/guardrails/standard/stacks/import/index.md
index a6b95eed..df0b4134 100644
--- a/docs/guides/using-guardrails/stacks/import/index.md
+++ b/docs/artemis/guardrails/standard/stacks/import/index.md
@@ -111,7 +111,7 @@ import {
id = "stack-import-demo-role"
}
```
-![Set AWS > IAM > Stack [Native] > Modifier](/images/docs/guardrails/guides/using-guardrails/stacks/import/aws-iam-native-stack-modifier.png)
+![Set AWS > IAM > Stack [Native] > Modifier](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-modifier.png)
5. Select **Save** to apply the policy.
@@ -145,7 +145,7 @@ resource "aws_iam_role" "stack_import_demo_role" {
})
}
```
-![Set AWS > IAM > Stack [Native] > Source](/images/docs/guardrails/guides/using-guardrails/stacks/import/aws-iam-native-stack-source.png)
+![Set AWS > IAM > Stack [Native] > Source](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-source.png)
Select **Update** to apply the policy.
@@ -159,17 +159,17 @@ Now set the *AWS > IAM > Stack [Native]* policy to enforce mode to import and ma
4. Select "**Enforce: Configured**"
5. Select **Create** to create the policy setting.
-![Set AWS > IAM > Stack [Native]](/images/docs/guardrails/guides/using-guardrails/stacks/import/aws-iam-native-stack-configured-enforced.png)
+![Set AWS > IAM > Stack [Native]](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-configured-enforced.png)
## Step 6: Validate the AWS > IAM > Stack [Native] Stack Control
Once the necessary policies are set, the **AWS > IAM > Stack [Native]** stack will execute and import the resource. If everything goes well, you should see the below log message "Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed."
-![Set AWS > IAM > Stack [Native]](/images/docs/guardrails/guides/using-guardrails/stacks/import/aws-iam-native-stack-control.png)
+![Set AWS > IAM > Stack [Native]](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-control.png)
View control logs to check the if the stack successfully imported the resource.
-![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/guides/using-guardrails/stacks/import/1-resource-imported.png)
+![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/1-resource-imported.png)
## Step 7: Manage Stack with Updates
@@ -207,7 +207,7 @@ resource "aws_iam_role" "stack_import_demo_role" {
If everything goes well, you should see the following log message, `Apply complete! Resources: 0 added, 1 changed, 0 destroyed.`
-![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/guides/using-guardrails/stacks/import/1-resource-updated.png)
+![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/1-resource-updated.png)
## Importing Multiple Resources
@@ -275,7 +275,7 @@ Now enforce the changes, select, `Enforce: Configured`.
If everything goes well, you should see the following log message, `Apply complete! Resources: 3 imported, 0 added, 0 changed, 0 destroyed.`
-![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/guides/using-guardrails/stacks/import/multiple-resources-imported.png)
+![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/multiple-resources-imported.png)
## Importing Regional Stack Resources
@@ -326,7 +326,7 @@ To enforce, set the policy to `Enforce: Configured`at the region where you want
If everything goes well, you should see the following log message, `Apply complete! Resources: 3 imported, 0 added, 0 changed, 0 destroyed.`
-![AWS > Region > Stack [Native] -- Control Logs](/images/docs/guardrails/guides/using-guardrails/stacks/import/s3_bucket_imported.png)
+![AWS > Region > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/s3_bucket_imported.png)
## Resource Stack [Native]
@@ -415,7 +415,7 @@ To enforce, set the policy to `Enforce: Configured` at the `region/account/folde
- [ ] Verify the imported resource shows up in the Related tab of the Stack [Native].
-
+
## Next Steps
diff --git a/docs/guides/using-guardrails/stacks/import/multiple-resources-imported.png b/docs/artemis/guardrails/standard/stacks/import/multiple-resources-imported.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/multiple-resources-imported.png
rename to docs/artemis/guardrails/standard/stacks/import/multiple-resources-imported.png
diff --git a/docs/guides/using-guardrails/stacks/import/s3_bucket_imported.png b/docs/artemis/guardrails/standard/stacks/import/s3_bucket_imported.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/s3_bucket_imported.png
rename to docs/artemis/guardrails/standard/stacks/import/s3_bucket_imported.png
diff --git a/docs/guides/using-guardrails/stacks/import/validate-stack-native-resource.png b/docs/artemis/guardrails/standard/stacks/import/validate-stack-native-resource.png
similarity index 100%
rename from docs/guides/using-guardrails/stacks/import/validate-stack-native-resource.png
rename to docs/artemis/guardrails/standard/stacks/import/validate-stack-native-resource.png
diff --git a/docs/concepts/guardrails/stacks.md b/docs/artemis/guardrails/standard/stacks/index.md
similarity index 100%
rename from docs/concepts/guardrails/stacks.md
rename to docs/artemis/guardrails/standard/stacks/index.md
diff --git a/docs/guides/using-guardrails/stacks/index.md b/docs/artemis/guardrails/standard/stacks/index.md.og
similarity index 100%
rename from docs/guides/using-guardrails/stacks/index.md
rename to docs/artemis/guardrails/standard/stacks/index.md.og
diff --git a/docs/guides/configuring-guardrails/network-stack/index.md b/docs/artemis/guardrails/standard/stacks/network-stack/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/network-stack/index.md
rename to docs/artemis/guardrails/standard/stacks/network-stack/index.md
diff --git a/docs/concepts/guardrails/standard_controls.png b/docs/artemis/guardrails/standard/standard_controls.png
similarity index 100%
rename from docs/concepts/guardrails/standard_controls.png
rename to docs/artemis/guardrails/standard/standard_controls.png
diff --git a/docs/concepts/guardrails/tagging/calc-policy.png b/docs/artemis/guardrails/standard/tagging/calc-policy.png
similarity index 100%
rename from docs/concepts/guardrails/tagging/calc-policy.png
rename to docs/artemis/guardrails/standard/tagging/calc-policy.png
diff --git a/docs/concepts/guardrails/tagging/dynamic-tags.md b/docs/artemis/guardrails/standard/tagging/dynamic-tags.md
similarity index 100%
rename from docs/concepts/guardrails/tagging/dynamic-tags.md
rename to docs/artemis/guardrails/standard/tagging/dynamic-tags.md
diff --git a/docs/concepts/guardrails/tagging/index.md b/docs/artemis/guardrails/standard/tagging/index.md
similarity index 100%
rename from docs/concepts/guardrails/tagging/index.md
rename to docs/artemis/guardrails/standard/tagging/index.md
diff --git a/docs/concepts/guardrails/tagging/require-keys.md b/docs/artemis/guardrails/standard/tagging/require-keys.md
similarity index 100%
rename from docs/concepts/guardrails/tagging/require-keys.md
rename to docs/artemis/guardrails/standard/tagging/require-keys.md
diff --git a/docs/concepts/guardrails/tagging/tag-casing.md b/docs/artemis/guardrails/standard/tagging/tag-casing.md
similarity index 100%
rename from docs/concepts/guardrails/tagging/tag-casing.md
rename to docs/artemis/guardrails/standard/tagging/tag-casing.md
diff --git a/docs/concepts/guardrails/tagging/tagging-helpers.md b/docs/artemis/guardrails/standard/tagging/tagging-helpers.md
similarity index 100%
rename from docs/concepts/guardrails/tagging/tagging-helpers.md
rename to docs/artemis/guardrails/standard/tagging/tagging-helpers.md
diff --git a/docs/concepts/guardrails/trusted-access.md b/docs/artemis/guardrails/standard/trusted-access.md
similarity index 100%
rename from docs/concepts/guardrails/trusted-access.md
rename to docs/artemis/guardrails/standard/trusted-access.md
diff --git a/docs/concepts/guardrails/usage.md b/docs/artemis/guardrails/standard/usage.md
similarity index 100%
rename from docs/concepts/guardrails/usage.md
rename to docs/artemis/guardrails/standard/usage.md
diff --git a/docs/artemis/index.md b/docs/artemis/index.md
new file mode 100644
index 00000000..82b69566
--- /dev/null
+++ b/docs/artemis/index.md
@@ -0,0 +1,16 @@
+---
+id: artemis
+title: Guardrails Governance (Artemis)
+---
+
+# Guardrails Governance
+
+[Cloud governance](https://cloudgovernance.org/) is the discipline of designing and implementing systematic frameworks that enable organizations to use cloud resources effectively while managing risk, controlling costs, and maintaining compliance. Unlike traditional IT governance, which relies on manual processes and approval gates, cloud governance provides automated guardrails that allow teams to move fast while staying within safe boundaries.
+
+At its core, cloud governance addresses a fundamental challenge: how do you maintain control and oversight in an environment where infrastructure changes constantly, resources are provisioned on-demand, and application teams have direct control over the services their applications depend on?
+
+Turbot Guardrails provides a complete cloud governance platform:
+
+1. **Know Your Cloud**: The Guardrails CMDB provides a flexible, dynamic [asset inventory](using/governance/inventory).
+1. **Raise the Bar**: [Guardrails](using/governance/guardrails) enable you to define and implement your standards and automatically remediate your control objectives.
+1. **Make Change Happen**: Driving organizational adoption requires working with *people*. [Rollouts](using/governance/rollouts) provide a predictable, ordered mechanism for deploying guardrails to your organization, enabling you to define a rollout and communications plan for your guardrails.
\ No newline at end of file
diff --git a/docs/artemis/inventory/accounts/index.md b/docs/artemis/inventory/accounts/index.md
new file mode 100644
index 00000000..d2fb3a86
--- /dev/null
+++ b/docs/artemis/inventory/accounts/index.md
@@ -0,0 +1,28 @@
+---
+title: Accounts
+---
+
+# Accounts
+
+In Turbot Guardrails, an **Account** is a foundational resource type that represents a distinct administrative boundary or management scope within a cloud provider, platform, or service. Guardrails accounts correspond to the primary organizational units used by various platforms - such as an AWS Account, Azure Subscription, GCP Project, Kubernetes Cluster, or GitHub Repository. Each account serves as a logical container that groups related resources together under a common governance framework and typically shares similar access controls, billing arrangements, or operational boundaries.
+
+To manage resources, you must import one or more accounts. The details vary by cloud provider, but generally, you may either:
+
+- **Import the organization.** Guardrails allows you to import multiple accounts at once by importing the organization. When you import an organization, the Guardrails CMDB will reflect the hierarchy in your cloud organization. Guardrails will create resources for any OUs, folders, and resource groups, as well as the accounts in your organization. Guardrails will keep the CMDB up to date as your organization changes, automatically adding accounts to Guardrails when they are added to your cloud organization, and removing them from the CMDB when they're deleted from your organization.
+
+- **Import each account directly.** You can import each account individually. You can choose which folder to import the account into, allowing you to create a distinct hierarchy in Guardrails that is different from the cloud organization. In this model, Guardrails cannot automatically create and delete accounts; you must manage them yourself.
+
+### Event Handlers & Pollers
+
+Guardrails provides two patterns to keep the CMDB in sync with your cloud provider state.
+
+- **Event handlers** *push* events to Guardrails as events occur. Typically, event handlers will require write access to the cloud provider and will create resources in the account to forward events to Guardrails. Event handlers *typically* provide more timely CMDB updates than polling since they are triggered as events occur.
+
+- **Event Pollers** *pull* updates to Guardrails on a schedule. Updates are typically slower than event handlers since they happen at regular intervals, but pollers are usually simpler to set up.
+
+Not all cloud providers provide both mechanisms, and the default setup and configuration options vary by provider.
+
+
+
\ No newline at end of file
diff --git a/docs/artemis/inventory/index.md b/docs/artemis/inventory/index.md
new file mode 100644
index 00000000..3cdb0d06
--- /dev/null
+++ b/docs/artemis/inventory/index.md
@@ -0,0 +1,115 @@
+---
+title: Inventory
+---
+
+# Inventory
+
+Turbot Guardrails **Inventory** is a comprehensive Configuration Management Database (CMDB) system that automatically discovers, tracks, and manages cloud resources across multi-cloud environments. The inventory system maintains a structured hierarchy of all resources and enables policy-based governance through continuous monitoring and real-time event processing.
+
+To manage resources, you must import one or more [**Account**](/guardrails/docs/artemis/inventory/accounts). In Turbot Guardrails, an account is a foundational resource type that represents a distinct administrative boundary or management scope within a cloud provider, platform, or service. Guardrails accounts correspond to the primary organizational units used by various platforms - such as an AWS Account, Azure Subscription, GCP Project, Kubernetes Cluster, or GitHub Repository.
+
+Each account serves as a logical container for [**Resources**](/guardrails/docs/artemis/inventory/resources). [Resources] represent objects that are managed by Guardrails. These are typically mapped to cloud service resources such as AWS S3 buckets, GCP compute instances, Azure SQL databases, etc. All resource information is stored in the CMDB.
+
+
+
+## Configuring Inventory
+
+You may configure inventory collection on a per-resource type basis. Most resources support three values for inventory collection:
+- **On**: Inventory collection is enabled for the resource type.
+- **Off**: Inventory collection is disabled for the resource type, and resources of this type are removed from the CMDB.
+**Paused**: Inventory collection is disabled for the resource type. Resources of this type are not removed from the CMDB, but they will not be updated.
+
+You can configure inventory:
+- **Globally** for all accounts in the installation. To manage your global inventory, go to the **Admin** section, and then the **Inventory** tab.
+- For each **Account** individually. To manage the per-account inventory settings, click the account from the list on the **Accounts** screen, click the **Advanced** dropdown, and select **Inventory**
+
+
+
diff --git a/docs/concepts/activities/index.md b/docs/artemis/inventory/not sure where to put this/activities/index.md
similarity index 98%
rename from docs/concepts/activities/index.md
rename to docs/artemis/inventory/not sure where to put this/activities/index.md
index c6b62ab6..eee7b6a5 100644
--- a/docs/concepts/activities/index.md
+++ b/docs/artemis/inventory/not sure where to put this/activities/index.md
@@ -1,9 +1,9 @@
---
-title: Resource Activities
-sidebar_label: Activities
+title: Resource Activity
+sidebar_label: Activity
---
-# Resource Activities
+# Resource Activity
Cloud infrastructure constantly changes to meet the demands of modern
applications. One of the fundamental assumptions of Guardrails is that the
diff --git a/docs/concepts/guardrails/cmdb.md b/docs/artemis/inventory/not sure where to put this/controls/cmdb.md
similarity index 100%
rename from docs/concepts/guardrails/cmdb.md
rename to docs/artemis/inventory/not sure where to put this/controls/cmdb.md
diff --git a/docs/concepts/guardrails/discovery.md b/docs/artemis/inventory/not sure where to put this/controls/discovery.md
similarity index 100%
rename from docs/concepts/guardrails/discovery.md
rename to docs/artemis/inventory/not sure where to put this/controls/discovery.md
diff --git a/docs/guides/configuring-guardrails/files/file-amis.png b/docs/artemis/inventory/resources/files/file-amis.png
similarity index 100%
rename from docs/guides/configuring-guardrails/files/file-amis.png
rename to docs/artemis/inventory/resources/files/file-amis.png
diff --git a/docs/guides/configuring-guardrails/files/index.md b/docs/artemis/inventory/resources/files/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/files/index.md
rename to docs/artemis/inventory/resources/files/index.md
diff --git a/docs/artemis/inventory/resources/index.md b/docs/artemis/inventory/resources/index.md
new file mode 100644
index 00000000..53f35f2b
--- /dev/null
+++ b/docs/artemis/inventory/resources/index.md
@@ -0,0 +1,159 @@
+---
+title: Resources
+sidebar_label: Resources
+---
+
+# Resources
+
+**Resources** represent objects that are managed by Guardrails. Typically, these are mapped to resources in the cloud service, such as an AWS S3 bucket, a GCP compute instance, or an Azure SQL database. Information about Guardrails resources is stored in the CMDB.
+
+Once you import an [account](/guardrails/docs/artemis/inventory/accounts), Guardrails will begin discovering resources and adding them to the CMDB.
+
+
+## Resource Types
+
+Every resource managed by Guardrails is an instance of a **Resource Type**. The resource type defines the properties that belong to a resource, as well as the [Controls](/guardrails/docs/artemis/guardrails/controls) and [Policies](/guardrails/docs/artemis/guardrails/policies) that apply to it.
+
+For example, AWS S3 buckets are represented in the CMDB with the `AWS > S3 > Bucket` resource type. The `AWS > S3 > Bucket` type includes properties such as the bucket name, ACL, bucket policy, logging status, default encryption, versioning configuration, tags, etc. Controls, such as the `AWS > S3 > Bucket > Versioning` control, target the `AWS > S3 > Bucket` resource type, enabling you to create guardrails to manage your buckets; each instances of `AWS > S3 > Bucket` may have an `AWS > S3 > Bucket > Versioning` control.
+
+Resource types are defined in [Mods](https://hub.guardrails.turbot.com/#mods).
+
+## Resource Categories
+
+The Guardrails Resource Type hierarchy provides grouping of resources, but in a structured, service-oriented manner. **Resource Categories** provide an alternate, vendor agnostic, categorization of resource types.
+
+For example, the `AWS > S3 > Bucket`, `Azure > Storage > Storage Account`, and `GCP > Storage > Bucket` resource types all have a resource category of `Storage > Object`.
+
+Resource categories are typically used for reporting, providing useful aggregation and filtering of data.
+
+### Example - Resource Types and Categories
+
+
+
+
+
+
+## Resource Hierarchy
+
+All resources in Guardrails are arranged into a hierarchy. Each resource has one
+parent, and zero or more children.
+
+The **Resource Hierarchy** may be many levels deep, but has 3 general tiers:
+
+| Tier | Purpose
+| ---------------------- | ---------------------------------------------------------------------------------------------
+| Turbot | Root node of the hierarchy.
+| Folders | Hierarchy of folders defined in Guardrails. Typically used to separate resources by business unit.
+| Discoverable Resources | Resources discovered from various sources such as cloud providers, servers and other services.
+
+
+
+### Turbot Root
+
+Turbot Root is the top level resource of the entire hierarchy, and all other
+resources are descendants of this node. This resource is the target for various
+controls and policies used by the Guardrails system.
+
+### Folders
+
+Folders provide a high level arrangement of resources in Guardrails. Common models
+for folders include:
+
+| Model | Example |
+| ------------- | ------------------------------------------------ |
+| Business Unit | R&D, Commercial, Admin |
+| Compliance | GxP production, GxP Development, PCI, Commercial |
+| Environment | Development, Testing, Production |
+
+A typical hierarchy might look something like the following:
+
+```
+Turbot
+ {Company Folder} (Folder)
+ {Top Level Folder} (Folder)
+ {Intermediate Folder} (Folder)
+```
+
+- Folders can be renamed and moved. Use names that make sense within the
+ organization structure.
+- Folders are limited to single inheritance only, consider
+ [Policy Packs](/guardrails/docs/concepts/policy-packs) for cross-hierarchy organization.
+- Folder structure is best configured in such a way that matches control,
+ business, and permission requirements!
+- Folders can be created an destroyed using the [Turbot Guardrails Terraform
+ Provider](https://registry.terraform.io/providers/turbot/turbot/latest/docs/resources/folder).
+
+
+### Discoverable Resources
+
+The vast majority of resources in Guardrails are created to represent resources in
+other tools or systems. Cloud providers, operating systems, SaaS tools -
+virtually any system can be a source of Guardrails Resources.
+
+All discovered resources are added to the Guardrails Resource Hierarchy.
+[Mods](https://hub.guardrails.turbot.com/#mods) define the structure of these resources, Guardrails simply ensures they
+are valid and structured according to their definition.
+
+
+
+
+
+
+
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-diff-the-first-change.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-diff-the-first-change.png
new file mode 100644
index 00000000..1faf4177
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-diff-the-first-change.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-activities-initial-notifications.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-activities-initial-notifications.png
new file mode 100644
index 00000000..db4d16a2
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-activities-initial-notifications.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-activities-with-change-detected.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-activities-with-change-detected.png
new file mode 100644
index 00000000..28b92de3
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-activities-with-change-detected.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-dropdown.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-dropdown.png
new file mode 100644
index 00000000..3a2862d5
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-dropdown.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-filter-set.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-filter-set.png
new file mode 100644
index 00000000..8354700a
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-filter-set.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-search.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-search.png
new file mode 100644
index 00000000..42649773
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-resource-type-search.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-search-bucket-versioning.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-search-bucket-versioning.png
new file mode 100644
index 00000000..cc5651be
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-search-bucket-versioning.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/aws-search-resource-activities.png b/docs/artemis/inventory/resources/observe-aws-activity/aws-search-resource-activities.png
new file mode 100644
index 00000000..a7f1d7c7
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/aws-search-resource-activities.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-1.png b/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-1.png
new file mode 100644
index 00000000..92c70754
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-1.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-2.png b/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-2.png
new file mode 100644
index 00000000..661eb25d
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-2.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-3.png b/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-3.png
new file mode 100644
index 00000000..bf1f785d
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/create-bucket-3.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning-1.png b/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning-1.png
new file mode 100644
index 00000000..ccd049ac
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning-1.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning-2.png b/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning-2.png
new file mode 100644
index 00000000..ceac1e72
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning-2.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning.png b/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning.png
new file mode 100755
index 00000000..d7b0e0f3
Binary files /dev/null and b/docs/artemis/inventory/resources/observe-aws-activity/enable-versioning.png differ
diff --git a/docs/artemis/inventory/resources/observe-aws-activity/index.md b/docs/artemis/inventory/resources/observe-aws-activity/index.md
new file mode 100644
index 00000000..d33efcb7
--- /dev/null
+++ b/docs/artemis/inventory/resources/observe-aws-activity/index.md
@@ -0,0 +1,97 @@
+---
+title: Observe Resource Activity
+sidebar_label: Observe Resource Activity 🛠
+---
+
+# Observe Resource Activity
+
+In this guide you will learn how Guardrails detects and reacts to events in your AWS account. You will manually create and modify an S3 bucket in your account and explore how to view that activity in the Guardrails console.
+
+This is the third guide in the *Getting started with AWS* series.
+
+## Prerequisites
+
+- Completion of the previous guides in this series.
+- Access to the Guardrails console with administrative privileges.
+- Console access to an AWS account and the ability to create and modify S3 buckets.
+
+> [!NOTE]
+> We will use the bucket name `bucket-example-01` in this guide. Bucket names in AWS must be globally unique, so please change the default name for your testing.
+
+## Step 1: Create an S3 bucket
+
+After logging into the AWS console, navigate to S3 and select the **Create Bucket** button.
+
+
+
+Give your bucket a name that is easy to remember.
+
+
+
+Accept all defaults for the remaining configuration choices and then select the **Create Bucket** button.
+
+
+
+## Step 2: Resource Activities report
+
+Select **Reports** from the top navigation bar. Search for the word "resource" and select **Resource Activities**.
+
+
+
+## Step 3: Filter by type
+
+From the filter bar, expand the **Resource Type** dropdown.
+
+
+
+Set the filter to **AWS > S3 > Bucket**. You can do this by typing `aws s3 bucket` into the search box, as shown here. When you see *AWS > S3 > Bucket* appear in the list, select the checkbox next to it.
+
+
+
+## Step 4: Observe activity
+
+You can scope the resource activity report to a specific bucket by searching for the name of your bucket. To do this, type its name into the search field. Guardrails will show all notifications related to the bucket. In the screen below, the `RESOURCE CREATED` activity represents Guardrails discovery of the bucket and `RESOURCE UPDATED` indicates that Guardrails has updated the CMDB entry with additional details about the bucket.
+
+
+
+## Step 5: Enable versioning
+
+In the AWS console, select the name of your bucket from the list of all buckets. Select the **Properties** tab and then select the **Edit** button in the **Bucket Versioning** section.
+
+
+
+In the Versioning dialog box choose **Enable**, then select **Save changes**.
+
+
+
+## Step 6: Observe events
+
+Switch back to the Guardrails console browser tab. Guardrails' event processing system will soon detect the change, and a new `RESOURCE UPDATED` notification will appear in the list. Select that new notification from the Activities list.
+
+
+
+## Step 7: Audit resource change
+
+On the notifications detail page, you can see metadata about the change and even audit the changes in configuration between the previous known state and the observed change. Scroll down in the **DIFF** section to observe the changes that Guardrails has recorded.
+
+
+
+## Step 8: Review
+
+In this guide you changed the versioning property of an S3 bucket and observed how Guardrails recorded the change.
+
+## Next Steps
+
+Next we’ll explore [how to enable a policy pack](/guardrails/docs/getting-started/getting-started-aws/enable-policy-pack) that requires buckets to enable versioning.
+
+## Progress tracker
+- [x] Prepare an AWS Account for Import to Guardrails
+- [x] Connect an AWS Account to Guardrails
+- [x] **Observe AWS Resource Activity**
+- [ ] Enable Your First Policy Pack
+- [ ] Review Account-Wide Governance
+- [ ] Create a Static Exception to a Guardrails Policy
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Enable Automatic Enforcement
diff --git a/docs/concepts/resources/resource_types_categories-ex.png b/docs/artemis/inventory/resources/resource_types_categories-ex.png
similarity index 100%
rename from docs/concepts/resources/resource_types_categories-ex.png
rename to docs/artemis/inventory/resources/resource_types_categories-ex.png
diff --git a/docs/artemis/inventory/resources/resources-lab/index.md b/docs/artemis/inventory/resources/resources-lab/index.md
new file mode 100644
index 00000000..24ea9e06
--- /dev/null
+++ b/docs/artemis/inventory/resources/resources-lab/index.md
@@ -0,0 +1,4 @@
+---
+title: Resources in 7 Minutes
+sidebar_label: Resources in 7 Minutes 🔬
+---
\ No newline at end of file
diff --git a/docs/artemis/permissions/index.md b/docs/artemis/permissions/index.md
new file mode 100644
index 00000000..b69df2bb
--- /dev/null
+++ b/docs/artemis/permissions/index.md
@@ -0,0 +1,184 @@
+---
+title: Permissions
+sidebar_label: Permissions
+---
+
+# Permissions
+Guardrails permissions govern what users are able to do through the Guardrails Console and API. There are 2 types of Guardrails permissions:
+- [Turbot permissions](#turbot-permissions) are used to grant Cloud Governance teams access to manage the Guardrails installation, set permissions, and define policy posture.
+- [Account permissions](#account-permissions) are used to grant limited permissions to application teams to provide visibility into the resources and controls in their account and send notifications about events affecting their account.
+- [Cloud Permissions](#cloud-permissions) provide capabilities for managing authentication and authorization to cloud services like [AWS](/guardrails/docs/connect/aws/permissions), [GCP](/guardrails/docs/connect/gcp/permissions), and [Azure](/guardrails/docs/connect/azure/permissions).
+
+
+## Turbot Permissions
+
+`Turbot` permission levels are use to grant permissions to define and attach guardrails, to manage rollouts, and to administer the Guardrails installation. Usually, you should only grant `Turbot` permissions to centralized Cloud Governance, Security, and FinOps teams. `Turbot` permissions are generally set at the `Turbot` root level and apply to all accounts.
+
+
+| Level | Description
+|---------------------|--------------------------------------------------------------------
+| **Turbot/Owner** | Manage permissions (including directories), manage mods AND
+| **Turbot/Admin** | Manage Guardrails and Rollouts, connect AWS Accounts, GCP Projects, Azure Subscriptions, etc AND
+| **Turbot/Operator** | Run policy values & controls AND
+| **Turbot/ReadOnly** | View resource data in the CMDB\*\*\* AND
+| **Turbot/Metadata** | View resource data in the CMDB\*\*\* AND
+| **Turbot/User** | Log into the console
+
+
+\*\*\* At present, all the resource data stored in the Guardrails CMDB is considered
+to be metadata, thus **Turbot/ReadOnly** and **Turbot/Metadata** are currently
+the same.
+
+
+## Account Permissions
+
+The `Account` permission levels are similar in many ways to the `Turbot` levels, but they are intended to be used for application teams that own the account. Account teams are responsible for adhering to corporate governance policy in their account but not for defining or enforcing such policies. As a result, `Account/Admin` can only configure policies that are related to notification routing.
+
+The account team is often the main point of contact for the account, and users with `Account` permissions are often the target of notifications.
+
+`Account` permissions are *only assignable on account resources* (AWS Accounts, Azure subscriptions, GCP projects, Kubernetes Clusters, etc).
+
+
+| Level | Description
+|--------------------|---------------------------------------------------------
+| **Account/Owner** | Manage `Account/*` permissions (only); AND
+| **Account/Admin** | Manage account-level policies around notification and issue routing ; AND
+| **Account/Operator** | Run specific quick actions (cloud provider actions like start/stop instance, set tags, etc); AND
+| **Account/ReadOnly** | View resource data in the CMDB for the account
+
+
+
+## Cloud Permissions
+
+You may optionally configure access to your cloud accounts through Guardrails.
+
+Turbot Guardrails provides a rich set of capabilities for managing authentication and authorization to cloud services like [AWS](/guardrails/docs/connect/aws/permissions), [GCP](/guardrails/docs/connect/gcp/permissions), and [Azure](/guardrails/docs/connect/azure/permissions).
+
+Guardrails integrates with the native Identity and Access Management solutions for
+the cloud provider but takes a loosely prescriptive approach to managing access
+-- we attempt to provide a well-defined framework that allows flexibility in
+implementation while greatly simplifying the management of permissions and
+policies
+
+
+### Permission Levels
+
+While the exact implementation of permissions varies by cloud provider, Guardrails defines a consistent set of **Permission Levels**. The set of possible levels is consistent across cloud services. Permissions levels are cumulative, where each level includes all the permissions of the level(s) before it.
+
+Permissions Levels, from lowest to highest are as follows:
+
+- **User**: Can log in, but no rights
+- **Metadata**: Read metadata
+- **ReadOnly**: Read metadata and data
+- **Operator**: Read metadata and data, make low-med risk changes
+- **Admin**: Read metadata and data, make high risk changes
+- **Owner**: Read metadata and data, make high risk changes, manage access,
+ modify IAM resources
+
+At the provider level, there is a special **SuperUser** level. Users assigned
+SuperUser permissions have unlimited access.
+
+- SuperUser has full access to all services, even those that Guardrails doesn't
+ define permissions for.
+- Lockdown policies do not apply to SuperUser.
+- There are are no SuperUser levels for individual services, only the AWS
+ Account or Google project.
+
+
+
+
+
+### Permission Types
+
+The permissions levels are applied to **permission types**, which define the
+types of resources or services to which they will apply. For example, **AWS**
+permissions types apply to all the resources within an AWS account, whereas
+**AWS/S3** permissions apply only resource in the S3 service.
+
+### Permissions & Grants
+
+A **permission** is the combination of a permission type and level, for example:
+`AWS/Admin`, `AWS/S3/ReadOnly`, `AWS/EC2/Operator`.
+
+A **grant** is the assignment of a permission to a Guardrails user or group on a
+resource or resource group. For instance:
+
+- Nathan is granted `AWS/Admin` on folder `Operations`
+- The Ops group is granted `AWS/EC2/Operator` on AWS account `aab`
+
+Note that a **grant** does not have to be an **active grant**: a grant can be
+explicitly activated or deactivated. A grant activation can be set to expire at
+a specific time, allowing for time-bound temporary privilege escalation.
+
+
+
+### Cloud Provider Example - AWS Permissions
+
+AWS permissions are specific to the service they are granting permissions for
+while following the general guidelines listed above. For instance, AWS/EC2/Admin
+allows users to launch and terminate instances (high risk changes) while
+AWS/EC2/Operator allows users to stop and start instances (medium risk changes):
+
+The Guardrails-standard roles described below automatically accounts for any `AWS > {Service} > Enabled` policy
+settings. By default, access is denied to all AWS services.
+
+| Level | Description |
+|-------------------|--------------------------------------------------------------------------------------------------------------------|
+| **AWS/SuperUser** | Allows full access permissions to the service with no preventative controls. |
+| **AWS/Owner** | Manage permissions in AWS, e.g., management of AWS IAM users, groups, roles, and policies AND |
+| **AWS/Admin** | Perform high to medium risk changes, e.g., creating and deleting resources, policy management AND |
+| **AWS/Operator** | Perform medium to low risk changes, e.g., stopping and starting resources, tag management, snapshot management AND |
+| **AWS/ReadOnly** | Read data, e.g., S3 key contents AND |
+| **AWS/Metadata** | Read configuration data and metadata, e.g., describe instance configurations, list buckets. |
+
+Guardrails also supports permission assignments to Custom Roles and to Custom Groups.
+
+| Level | Description |
+|---------------------------|--------------------------------------------------------------|
+| **AWS/Role/{RoleName}** | Grants access to a custom IAM role |
+| **AWS/Group/{GroupName}** | Attaches a custom IAM group to a Guardrails-provisioned user |
+
+
+
+---
+
+
\ No newline at end of file
diff --git a/docs/guides/using-guardrails/iam/permission-assignment/advanced.png b/docs/artemis/permissions/permission-assignment/advanced.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/permission-assignment/advanced.png
rename to docs/artemis/permissions/permission-assignment/advanced.png
diff --git a/docs/guides/using-guardrails/iam/permission-assignment/demo-user-grants.png b/docs/artemis/permissions/permission-assignment/demo-user-grants.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/permission-assignment/demo-user-grants.png
rename to docs/artemis/permissions/permission-assignment/demo-user-grants.png
diff --git a/docs/guides/using-guardrails/iam/permission-assignment/index.md b/docs/artemis/permissions/permission-assignment/index.md
similarity index 98%
rename from docs/guides/using-guardrails/iam/permission-assignment/index.md
rename to docs/artemis/permissions/permission-assignment/index.md
index d535b85b..5e97a961 100644
--- a/docs/guides/using-guardrails/iam/permission-assignment/index.md
+++ b/docs/artemis/permissions/permission-assignment/index.md
@@ -1,6 +1,6 @@
---
-title: Permissions
-sidebar_label: Permissions
+title: Assigning Permissions
+sidebar_label: Assigning Permissions 🛠
---
# Assigning Permissions in Guardrails
diff --git a/docs/guides/using-guardrails/iam/permission-assignment/permissions-tab.png b/docs/artemis/permissions/permission-assignment/permissions-tab.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/permission-assignment/permissions-tab.png
rename to docs/artemis/permissions/permission-assignment/permissions-tab.png
diff --git a/docs/artemis/rollouts/index.md b/docs/artemis/rollouts/index.md
new file mode 100644
index 00000000..de80c125
--- /dev/null
+++ b/docs/artemis/rollouts/index.md
@@ -0,0 +1,444 @@
+---
+title: Rollouts
+---
+
+# Rollouts
+
+You may set up a **Rollout** to automate the rollout of one or more [guardrails](guardrails).
+
+A rollout provides a predictable, ordered mechanism for deploying guardrails to your organization. When you create a rollout, you choose one or more guardrails that you would like to deploy, select the accounts to deploy them to, and set a deployment and communication schedule for promoting the guardrails through phases.
+
+Rollouts allow you to control the deployment schedule as well as communications with application teams, for example:
+- Schedule automatic transitions from one [phase](guardrails#phases) to another.
+- Automatically enforce guardrails once there are no alarms.
+- Send email notices to account teams on a schedule or when phase change events occur.
+
+
+## Examples
+The following examples use Terraform to illustrate the capabilities of a rollout, but you can create a rollout from the console if you prefer.
+
+### Rollout Basics
+A rollout should include at least one guardrail. Once the rollout starts, you cannot subsequently add, remove, or change the guardrails.
+
+You may add or remove accounts after the rollout starts, but be careful when doing so. Adding an account to a rollout will move the guardrail directly to the current rollout phase.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+
+ preview {}
+ check {}
+ enforce {}
+}
+```
+
+
+You do not need to include all the phases in the rollout.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+
+ preview {}
+ check {}
+}
+```
+
+### Sending Notices
+By default, transitions are manual only, and no email notices are sent. **Start notices** can be enabled on a per-phase basis. When enabled, emails will be sent to `recipients` when an account enters the phase. Notice `recipients` may be "profiles" similar to [notification routing](), or hardcoded email addresses.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+
+ preview {
+ start_notice = "enabled"
+ }
+
+ check {
+ start_notice = "enabled"
+ }
+
+ enforce {
+ start_notice = "enabled"
+ }
+}
+```
+
+## Scheduling Phase Transitions
+You can (and usually should) schedule the transitions to occur automatically.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+
+ preview {
+ start_at = "2024-10-30T00:00:00Z"
+ start_notice = "enabled"
+ }
+
+ check {
+ start_at = "2024-11-30T00:00:00Z"
+ start_notice = "enabled"
+ }
+
+ enforce {
+ start_at = "2025-01-01T00:00:00Z"
+ start_notice = "enabled"
+ }
+}
+```
+
+
+## Sending Warnings
+You can also send **warning notices** to the `recipients` to notify them of the scheduled transition and highlight items that they should address. You can send the warning multiple times per phase if desired.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+
+ preview {
+ start_at = "2024-10-30T00:00:00Z"
+ start_notice = "enabled"
+ }
+
+ check {
+ start_at = "2024-11-30T00:00:00Z"
+ warn_at = ["2024-10-23T00:00:00Z", "2024-10-29T00:00:00Z"]
+ start_notice = "enabled"
+ }
+
+ enforce {
+ start_at = "2025-01-01T00:00:00Z"
+ start_notice = "enabled"
+ warn_at = ["2024-11-24T00:00:00Z", "2024-12-29T00:00:00Z"]
+ }
+}
+```
+
+You can override the recipients on a per-phase basis if you want.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*"]
+
+ preview {
+ start_at = "2024-10-30T00:00:00Z"
+ start_notice = "enabled"
+ }
+
+ check {
+ start_at = "2024-11-30T00:00:00Z"
+ start_notice = "enabled"
+ }
+
+ enforce {
+ start_at = "2025-01-01T00:00:00Z"
+ start_notice = "enabled"
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+ }
+}
+```
+
+### Relative Dates
+
+All dates are "absolute" in the rollout, but you can use HCL functions to make them relative. This makes it easier to manage the plan if dates change in the future, since they tend to be related to each other.
+
+```hcl
+locals {
+ preview_date = "2024-10-30T00:00:00Z"
+ check_date = timeadd(preview_date, "720h")
+ enforce_date = timeadd(check_date, "720h")
+}
+
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+
+ preview {
+ start_at = local.preview_date
+ start_notice = "enabled"
+ }
+
+ check {
+ start_at = local.check_date
+ warn_at = [ timeadd(check_date, "-168h"), timeadd(check_date, "-24h") ]
+ start_notice = "enabled"
+ }
+
+ enforce {
+ start_at = local.enforce_date
+ start_notice = "enabled"
+ warn_at = [ timeadd(enforce_date, "-168h"), timeadd(enforce_date, "-24h") ]
+ }
+}
+```
+
+
+### Transitioning as soon as there are no alerts
+
+If you want, you can configure a rollout to automatically move accounts to a phase when there are no alerts, regardless of the schedule. For example, accounts could go straight to the `enforce` phase if they don't have any alarms for the guardrails in the rollout. To do set, set `start_early_if = "no_alerts"` in the phase block.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+
+ preview {
+ start_at = "2024-10-30T00:00:00Z"
+ start_notice = "enabled"
+ }
+
+ check {
+ start_at = "2024-11-30T00:00:00Z"
+ warn_at = ["2024-10-23T00:00:00Z", "2024-10-29T00:00:00Z"]
+ start_notice = "enabled"
+ start_early_if = "no_alerts"
+ }
+
+ enforce {
+ start_at = "2025-01-01T00:00:00Z"
+ start_notice = "enabled"
+ warn_at = ["2024-11-24T00:00:00Z", "2024-12-29T00:00:00Z"]
+ start_early_if = "no_alerts"
+ }
+}
+```
+
+### Dynamic attachments via tags
+
+You can use the `turbot_resources` [data source](https://developer.hashicorp.com/terraform/language/data-sources) to search the CMDB for guardrails or accounts dynamically. This makes it possible to attach accounts or guardrails en masse by tag.
+
+
+```hcl
+data "turbot_resources" "guardrails" {
+ filter = "tags:baseline=required resourceType:guardrail"
+}
+
+data "turbot_resources" "accounts" {
+ filter = "tags:environment=dev resourceType:account"
+}
+
+resource "rollout" "bar" {
+ guardrails = data.turbot_resources.guardrails.ids
+ accounts = data.turbot_resources.accounts.ids
+
+ preview {}
+ check {}
+ enforce {}
+}
+```
+
+Note that by using the data source in the Terraform plan, the account list will ONLY be updated if you re-run the plan; The list of accounts is resolved in the plan phase of the Terraform run. If you want to update the list, you have to re-run the plan. The UI also makes it possible to add accounts by tag, even though they are stored internally as IDs.
+
+Guardrails, on the other hand, cannot be added or removed once the rollout has started. If guardrails are added or removed that match the tag, then subsequent Terraform runs will fail - the list of guardrails no longer matches the current state, but you are not allowed to update them. To avoid this situation, you can use an `ignore_changes` lifecycle policy.
+
+```hcl
+data "turbot_resources" "guardrails" {
+ filter = "tags:baseline=required resourceType:guardrail"
+}
+
+data "turbot_resources" "accounts" {
+ filter = "tags:environment=dev resourceType:account"
+}
+
+resource "rollout" "bar" {
+ guardrails = data.turbot_resources.guardrails.ids
+ accounts = data.turbot_resources.accounts.ids
+
+ preview {}
+ check {}
+ enforce {}
+
+ lifecycle {
+ ignore_changes = [ guardrails ]
+ }
+}
+```
+
+
+The data provider is quite flexible - any filter should work..
+
+```hcl
+# list of account aliases
+filter = "$.AccountAlias:morales-aaa,morales-aab"
+
+# regex of account aliases
+filter = "$.AccountAlias:/morales-aa.*/"
+
+# GCP project IDs...
+filter = "$.projectId:morales-aac"
+
+# Azure subscription IDs...
+filter = "$.subscriptionId:'236a078d-0292-46be-80a3-cd8a1cbccde0'"
+# or title and type?
+filter = "$.displayName:'morales AAA' resourceType:subscription"
+```
+
+
+### Baselines
+
+Rollouts provide a predictable way to roll out your guardrails. How to deploy them is up to you; many customers prefer to deploy small, incremental changes frequently, while others prefer larger, less frequent changes. Both options are possible with guardrails.
+
+In either case, your policy posture is dynamic and will change over time. As new guardrails are rolled out to existing accounts, they also need to be applied to new accounts or existing accounts that are newly imported. You can use `tags` on guardrails to help define baselines and manage to a known set of guardrails.
+
+The process is simple; define a [tag](#dynamic-attachments-via-tags) for your baseline, and as you deploy guardrails, tag them with any baseline that you want them to be included in.
+
+This can simplify managing a consistent posture:
+- When *brand new accounts* are added, you can deploy the baseline by creating a rollout that includes all guardrails with the baseline tag(s). Since the accounts are new, you can probably move them straight to enforce (or use `start_early_if` to allow a relaxed schedule but progress faster if there are no alarms).
+- When *existing accounts are newly imported*, you may choose to deploy the baseline to bring them "up to standards". Alternatively, deploy guardrails iteratively in priority order until the baseline has been reached.
+- You can *manage drift* and ensure accounts have the baseline installed. Because guardrails that are already in `enforce` will not be re-applied, simply create a deployment plan to apply the baseline and attach any accounts. Any "missing" guardrails will be deployed on the rollout schedule. Accounts that already meet the baseline will be unaffected, and no notices will be sent for them.
+
+
+### Detaching guardrails
+
+You can detach guardrails from accounts via a rollout as well, using the same communication and scheduling capabilities that you can use to deploy them.
+
+```hcl
+resource "rollout" "foo" {
+ guardrails = [ "199358163546318", "173967295044320"]
+ accounts = ["111111111111", "222222222222"]
+ recipients = [ "Account/*", "Turbot/Owner", "Turbot/Admin"]
+
+ detach {
+ start_at = "2025-01-01T00:00:00Z"
+ start_notice = enabled
+ warn_at = ["2024-11-24T00:00:00Z", "2024-12-29T00:00:00Z"]
+ }
+}
+```
+
+## Conflicts
+
+A guardrail may be included in more than one rollout, and an account may be a member of multiple rollouts that include the same guardrail. If this occurs, the guardrail will be in the most advanced phase. For example:
+- Given:
+ - Rollout `foo` includes the `S3 Bucket Encryption at Rest` guardrail. Account `111111111111` is included in this rollout. Currently, this rollout is in `Preview` phase, scheduled to go to `Check` in 1 week, and enforce a week after that.
+ - Rollout `bar` also includes the `S3 Bucket Encryption at Rest` guardrail. Account `111111111111` is also included in this rollout. Currently, this rollout is in `Check` phase, scheduled to go to `Enforce` in 3 weeks.
+- As a result:
+ - For account `111111111111`, the `S3 Bucket Encryption at Rest` is currently in `Check` phase.
+ - There should be no warning or welcome notices from the `foo` rollout for the `111111111111` account, because it is already in the `Check` phase. It would have already been sent warnings and/or welcome notices from the `bar` rollout.
+ - Warnings and welcome for the `Enforce` phase will be sent to `111111111111` from the `foo` rollout, because `foo` rollout is scheduled to transition the account to `enforce` before `bar` will.
+
+
+The schedule is the same for all accounts in a rollout. Rollouts only move forward, from `draft` -> `preview` -> `check` -> `enforce`.
+
+You can manually move an account through the phases for a guardrail, or for a rollout (essentially, all guardrails in the rollout).
+ - Moving it "forward" does not change its schedule as it relates to future phases. For example, if you manually move an account from `preview` to `check` before the scheduled time, the owner will not receive any notifications to warn about moving the `check` phase, but it will then move to `enforce` phase along with the other accounts, according to the plan (unless it is manually moved).
+ - You cannot move an account backward before the current rollout state without removing it from the rollout. You can, however, move it backward as far as the "current" phase of the rollout if it is "ahead". For example, if the rollout is in `check`, you cannot move an included guardrail for that account back to `preview`. If you had manually moved it to enforce, you may move it back to `check`, however.
+
+
+## Starting, Stopping, and Pausing a Rollout
+
+The guardrails for a rollout are set when the rollout starts, and cannot be subsequently changed.
+
+Accounts can be attached after the rollout starts, and they will immediately proceed to the "current" phase of the rollout. They will not receive any missed notices, but they will receive the "welcome" message for the current phase if they are transitioned due to the rollout.
+
+Accounts can be detached from a rollout after the rollout starts.
+
+You may change the dates in the rollout after it has started.
+
+You can pause a rollout. While paused, no state transitions will occur and no notices will be sent. If you subsequently resume the rollout, any "missed" notices will not be sent, but accounts will be moved to whatever state the rollout dictates, and they will receive the "welcome" notice for that phase if they are transitioned due to the rollout.
+
+Likewise, you can pause a single account to "pin" it to its current phase. The behavior is the same as when the rollout is paused: While paused, no state transitions will occur, and no notices will be sent. If you subsequently resume the rollout, any "missed" notices will not be sent, but the account will be moved to whatever state the rollout dictates, and will receive the "welcome" notice for that phase if it is transitioned due to the rollout.
+
+A rollout is "complete" once all the accounts in it are at the final phase, or you choose to mark it "complete".
+
+Updating policies on a guardrail would be done via a new rollout. Either:
+ - Move the guardrail back to `preview` or `draft` and then deploy the change with a new rollout, or
+ - Create a new guardrail with the new policy settings and deploy it with a new rollout.
+
+Removing a guardrail "uninstalls it". You cannot delete a guardrail that is part of an active rollout.
+
+If you attempt to delete a guardrail or to edit a policy setting for a guardrail that is in `check` or `enforce` for any account, it will fail unless "forced". You must either:
+ - move the guardrail back to `preview` or `draft` for all accounts first or
+ - detach the guardrail from all accounts or
+ - resubmit the request with a 'force' flag
+
+
+
+
+
diff --git a/docs/concepts/index.md b/docs/concepts/index.md
deleted file mode 100644
index b30a8aad..00000000
--- a/docs/concepts/index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Concepts
----
-
-# Concepts
-
-Turbot Guardrails provides enterprise guardrails for infrastructure platforms, including Amazon Web Services, Microsoft Azure, and Google Cloud.
-
-Balancing agility with controls requires a clear and simple set of beliefs guiding our designs and trade-off decisions. This section outlines how Guardrails thinks about enterprise controls for infrastructure governance and outlines the beliefs, models and assumptions Turbot Guardrails has defined to create those guardrails - providing organizations with a working balance between agility and compliance.
-
-| Section | Description |
-| ---------------------------------------------------- | ------------------------------------------------------------------------------|
-| [Activities](concepts/activities) | Activity provides visibility into the changes that are occurring in your environment |
-| [Controls](concepts/controls) | Controls enforce policies |
-| [Guardrails](concepts/guardrails) | Standard guardrails provide a consistent set of controls and policies |
-| [Identity and Access Management (IAM)](concepts/iam) | Guardrails provides a flexible IAM model for authentication and authorization |
-| [Policies](concepts/policies) | Policies manage configuration settings |
-| [Policy Packs](concepts/policy-packs) | The new and improved way to group resources and policies |
-| [Processes](concepts/processes) | Processes perform work |
-| [Resources](concepts/resources) | Resources represent objects that are managed by Guardrails |
diff --git a/docs/concepts/resources/index.md b/docs/concepts/resources/index.md
deleted file mode 100644
index 1ce269c7..00000000
--- a/docs/concepts/resources/index.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Resources
-sidebar_label: Resources
----
-
-# Resources
-
-**Resources** represent objects that are managed by Guardrails. Typically, these are
-mapped to resources in the cloud service, such as an AWS S3 bucket, a GCP
-compute instance, or an Azure SQL database. Information about Guardrails resources
-is stored in the CMDB. [Policies](/guardrails/docs/concepts/policies) can be set to manage the
-configuration of resources (or sets of resources).
-
-| Concept | Definition |
-| --------------------------------------------------------- | -------------------------------------------------------------- |
-| [Hierarchy](concepts/resources/hierarchy) | Information on resource hierarchy in Guardrails |
-| [Types & Categories](concepts/resources/types-categories) | Information on properties and categorization of resource types |
-| [Discovery](concepts/resources/discovery) | Guardrails and resource discovery |
-
-
-
- AWS > Region
- AWS > Account
- AWS > S3 > Bucket
- Azure > SQL > Database
- GCP > Compute > Instance
-
-
diff --git a/docs/faq/aws-faq/index.md b/docs/connect/aws/aws-faq/index.md
similarity index 100%
rename from docs/faq/aws-faq/index.md
rename to docs/connect/aws/aws-faq/index.md
diff --git a/docs/connect/aws/aws-sidebar.json b/docs/connect/aws/aws-sidebar.json
new file mode 100644
index 00000000..67a134ca
--- /dev/null
+++ b/docs/connect/aws/aws-sidebar.json
@@ -0,0 +1,46 @@
+{
+ "type": "category",
+ "id": "aws",
+ "link": "connect/aws",
+ "items": [
+ {
+ "type": "category",
+ "id": "import-aws-account",
+ "link": "connect/aws/import-aws-account",
+ "items": ["connect/aws/import-aws-account/gov-cloud"]
+ },
+ "connect/aws/import-aws-organization",
+ {
+ "type": "category",
+ "id": "event-handlers",
+ "link": "connect/aws/event-handlers",
+ "items": ["connect/aws/event-handlers/poller"]
+ },
+ {
+ "type": "category",
+ "id": "global-event-handler",
+ "link": "connect/aws/global-event-handlers",
+ "items": [
+ "connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role",
+ "connect/aws/global-event-handlers/setup-with-custom-iam-role",
+ "connect/aws/global-event-handlers/migrate-to-global-event-handlers"
+ ]
+ },
+ "connect/aws/services",
+ {
+ "type": "category",
+ "id": "permissions",
+ "link": "connect/aws/permissions",
+ "items": ["connect/aws/permissions/user-mode"]
+ },
+ "connect/aws/security-hub",
+ "connect/aws/decommission",
+ {
+ "type": "category",
+ "id": "aws-faq",
+ "link": "connect/aws/aws-faq",
+ "items": ["connect/aws/guardrails-and-aws-scps"]
+ }
+
+ ]
+}
\ No newline at end of file
diff --git a/docs/guides/aws/decommission/index.md b/docs/connect/aws/decommission/index.md
similarity index 100%
rename from docs/guides/aws/decommission/index.md
rename to docs/connect/aws/decommission/index.md
diff --git a/docs/guides/aws/event-handlers/index.md b/docs/connect/aws/event-handlers/index.md
similarity index 100%
rename from docs/guides/aws/event-handlers/index.md
rename to docs/connect/aws/event-handlers/index.md
diff --git a/docs/guides/aws/event-handlers/poller/index.md b/docs/connect/aws/event-handlers/poller/index.md
similarity index 100%
rename from docs/guides/aws/event-handlers/poller/index.md
rename to docs/connect/aws/event-handlers/poller/index.md
diff --git a/docs/guides/aws/global-event-handlers/index.md b/docs/connect/aws/global-event-handlers/index.md
similarity index 100%
rename from docs/guides/aws/global-event-handlers/index.md
rename to docs/connect/aws/global-event-handlers/index.md
diff --git a/docs/guides/aws/global-event-handlers/migrate-to-global-event-handlers/disable-regional-event-handlers.png b/docs/connect/aws/global-event-handlers/migrate-to-global-event-handlers/disable-regional-event-handlers.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/migrate-to-global-event-handlers/disable-regional-event-handlers.png
rename to docs/connect/aws/global-event-handlers/migrate-to-global-event-handlers/disable-regional-event-handlers.png
diff --git a/docs/guides/aws/global-event-handlers/migrate-to-global-event-handlers/index.md b/docs/connect/aws/global-event-handlers/migrate-to-global-event-handlers/index.md
similarity index 100%
rename from docs/guides/aws/global-event-handlers/migrate-to-global-event-handlers/index.md
rename to docs/connect/aws/global-event-handlers/migrate-to-global-event-handlers/index.md
diff --git a/docs/guides/aws/global-event-handlers/setup-with-custom-iam-role/index.md b/docs/connect/aws/global-event-handlers/setup-with-custom-iam-role/index.md
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-custom-iam-role/index.md
rename to docs/connect/aws/global-event-handlers/setup-with-custom-iam-role/index.md
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/event-handler-global-controls.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/event-handler-global-controls.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/event-handler-global-controls.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/event-handler-global-controls.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-aws-turbot-service-roles.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-aws-turbot-service-roles.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-aws-turbot-service-roles.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-aws-turbot-service-roles.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-check-control-status.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-check-control-status.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-check-control-status.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-check-control-status.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-policy.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-policy.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-policy.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-policy.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-service-role-source-policy.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-service-role-source-policy.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-service-role-source-policy.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/geh-service-role-source-policy.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/gen-aws-turbot-event-handler-global-enabled.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/gen-aws-turbot-event-handler-global-enabled.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/gen-aws-turbot-event-handler-global-enabled.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/gen-aws-turbot-event-handler-global-enabled.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/guardrails-console-login.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/guardrails-console-login.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/guardrails-console-login.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/guardrails-console-login.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/index.md b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/index.md
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/index.md
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/index.md
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/select-value.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/select-value.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/select-value.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/select-value.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting-values.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting-values.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting-values.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting-values.png
diff --git a/docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting.png b/docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting.png
similarity index 100%
rename from docs/guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting.png
rename to docs/connect/aws/global-event-handlers/setup-with-turbot-managed-iam-role/validate-post-setting.png
diff --git a/docs/faq/guardrails-and-aws-scps/index.md b/docs/connect/aws/guardrails-and-aws-scps/index.md
similarity index 100%
rename from docs/faq/guardrails-and-aws-scps/index.md
rename to docs/connect/aws/guardrails-and-aws-scps/index.md
diff --git a/docs/faq/guardrails-and-aws-scps/policy_yaml.jpg b/docs/connect/aws/guardrails-and-aws-scps/policy_yaml.jpg
similarity index 100%
rename from docs/faq/guardrails-and-aws-scps/policy_yaml.jpg
rename to docs/connect/aws/guardrails-and-aws-scps/policy_yaml.jpg
diff --git a/docs/guides/aws/import-aws-account/gov-cloud.md b/docs/connect/aws/import-aws-account/gov-cloud.md
similarity index 100%
rename from docs/guides/aws/import-aws-account/gov-cloud.md
rename to docs/connect/aws/import-aws-account/gov-cloud.md
diff --git a/docs/guides/aws/import-aws-account/index.md b/docs/connect/aws/import-aws-account/index.md
similarity index 100%
rename from docs/guides/aws/import-aws-account/index.md
rename to docs/connect/aws/import-aws-account/index.md
diff --git a/docs/guides/aws/import-aws-organization/check-discovery-process.png b/docs/connect/aws/import-aws-organization/check-discovery-process.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/check-discovery-process.png
rename to docs/connect/aws/import-aws-organization/check-discovery-process.png
diff --git a/docs/guides/aws/import-aws-organization/choose-folder-to-import.png b/docs/connect/aws/import-aws-organization/choose-folder-to-import.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/choose-folder-to-import.png
rename to docs/connect/aws/import-aws-organization/choose-folder-to-import.png
diff --git a/docs/guides/aws/import-aws-organization/download-management-account-iam-role-cfn-template.png b/docs/connect/aws/import-aws-organization/download-management-account-iam-role-cfn-template.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/download-management-account-iam-role-cfn-template.png
rename to docs/connect/aws/import-aws-organization/download-management-account-iam-role-cfn-template.png
diff --git a/docs/guides/aws/import-aws-organization/download-member-account-iam-role-cfn-template.png b/docs/connect/aws/import-aws-organization/download-member-account-iam-role-cfn-template.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/download-member-account-iam-role-cfn-template.png
rename to docs/connect/aws/import-aws-organization/download-member-account-iam-role-cfn-template.png
diff --git a/docs/guides/aws/import-aws-organization/exception-list-with-connect.png b/docs/connect/aws/import-aws-organization/exception-list-with-connect.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/exception-list-with-connect.png
rename to docs/connect/aws/import-aws-organization/exception-list-with-connect.png
diff --git a/docs/guides/aws/import-aws-organization/index.md b/docs/connect/aws/import-aws-organization/index.md
similarity index 100%
rename from docs/guides/aws/import-aws-organization/index.md
rename to docs/connect/aws/import-aws-organization/index.md
diff --git a/docs/guides/aws/import-aws-organization/review-org-cmdb-discovery-controls.png b/docs/connect/aws/import-aws-organization/review-org-cmdb-discovery-controls.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/review-org-cmdb-discovery-controls.png
rename to docs/connect/aws/import-aws-organization/review-org-cmdb-discovery-controls.png
diff --git a/docs/guides/aws/import-aws-organization/select-aws-organization.png b/docs/connect/aws/import-aws-organization/select-aws-organization.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/select-aws-organization.png
rename to docs/connect/aws/import-aws-organization/select-aws-organization.png
diff --git a/docs/guides/aws/import-aws-organization/select-connect.png b/docs/connect/aws/import-aws-organization/select-connect.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/select-connect.png
rename to docs/connect/aws/import-aws-organization/select-connect.png
diff --git a/docs/guides/aws/import-aws-organization/setup-member-accounts-access.png b/docs/connect/aws/import-aws-organization/setup-member-accounts-access.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/setup-member-accounts-access.png
rename to docs/connect/aws/import-aws-organization/setup-member-accounts-access.png
diff --git a/docs/guides/aws/import-aws-organization/setup-organization-access.png b/docs/connect/aws/import-aws-organization/setup-organization-access.png
similarity index 100%
rename from docs/guides/aws/import-aws-organization/setup-organization-access.png
rename to docs/connect/aws/import-aws-organization/setup-organization-access.png
diff --git a/docs/guides/aws/index.md b/docs/connect/aws/index.md
similarity index 100%
rename from docs/guides/aws/index.md
rename to docs/connect/aws/index.md
diff --git a/docs/guides/aws/permissions/index.md b/docs/connect/aws/permissions/index.md
similarity index 100%
rename from docs/guides/aws/permissions/index.md
rename to docs/connect/aws/permissions/index.md
diff --git a/docs/guides/aws/permissions/user-mode/index.md b/docs/connect/aws/permissions/user-mode/index.md
similarity index 100%
rename from docs/guides/aws/permissions/user-mode/index.md
rename to docs/connect/aws/permissions/user-mode/index.md
diff --git a/docs/guides/aws/security-hub/index.md b/docs/connect/aws/security-hub/index.md
similarity index 100%
rename from docs/guides/aws/security-hub/index.md
rename to docs/connect/aws/security-hub/index.md
diff --git a/docs/guides/aws/services/index.md b/docs/connect/aws/services/index.md
similarity index 100%
rename from docs/guides/aws/services/index.md
rename to docs/connect/aws/services/index.md
diff --git a/docs/faq/azure-faq/index.md b/docs/connect/azure/azure-faq/index.md
similarity index 100%
rename from docs/faq/azure-faq/index.md
rename to docs/connect/azure/azure-faq/index.md
diff --git a/docs/connect/azure/azure-sidebar.json b/docs/connect/azure/azure-sidebar.json
new file mode 100644
index 00000000..09aac09c
--- /dev/null
+++ b/docs/connect/azure/azure-sidebar.json
@@ -0,0 +1,34 @@
+{
+ "type": "category",
+ "id": "azure",
+ "link": "connect/azure",
+ "items": [
+ {
+ "type": "category",
+ "id": "import",
+ "link": "connect/azure/import",
+ "items": [
+ "connect/azure/import/tenant",
+ "connect/azure/import/active-directory",
+ "connect/azure/import/subscription",
+ "connect/azure/import/skip-management-groups-and-subscriptions"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "real-time-events",
+ "link": "connect/azure/real-time-events",
+ "items": [
+ "connect/azure/real-time-events/ad-event-pollers",
+ "connect/azure/real-time-events/event-pollers",
+ "connect/azure/real-time-events/mgmt-event-pollers",
+ "connect/azure/real-time-events/event-handlers"
+ ]
+ },
+ "connect/azure/services",
+ "connect/azure/permissions",
+ "connect/azure/decommission",
+ "connect/azure/azure-faq"
+
+ ]
+}
\ No newline at end of file
diff --git a/docs/guides/azure/decommission/index.md b/docs/connect/azure/decommission/index.md
similarity index 100%
rename from docs/guides/azure/decommission/index.md
rename to docs/connect/azure/decommission/index.md
diff --git a/docs/guides/azure/import/active-directory/active-directory-tenant-details.png b/docs/connect/azure/import/active-directory/active-directory-tenant-details.png
similarity index 100%
rename from docs/guides/azure/import/active-directory/active-directory-tenant-details.png
rename to docs/connect/azure/import/active-directory/active-directory-tenant-details.png
diff --git a/docs/guides/azure/import/active-directory/index.md b/docs/connect/azure/import/active-directory/index.md
similarity index 100%
rename from docs/guides/azure/import/active-directory/index.md
rename to docs/connect/azure/import/active-directory/index.md
diff --git a/docs/guides/azure/import/active-directory/select-ms-entra-id.png b/docs/connect/azure/import/active-directory/select-ms-entra-id.png
similarity index 100%
rename from docs/guides/azure/import/active-directory/select-ms-entra-id.png
rename to docs/connect/azure/import/active-directory/select-ms-entra-id.png
diff --git a/docs/guides/azure/import/index.md b/docs/connect/azure/import/index.md
similarity index 100%
rename from docs/guides/azure/import/index.md
rename to docs/connect/azure/import/index.md
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/azure-portal-management-group.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/azure-portal-management-group.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/azure-portal-management-group.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/azure-portal-management-group.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/azure-portal-total-no-of-subcriptions.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/azure-portal-total-no-of-subcriptions.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/azure-portal-total-no-of-subcriptions.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/azure-portal-total-no-of-subcriptions.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/choose-folder-and-provide-cred-to-import.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/choose-folder-and-provide-cred-to-import.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/choose-folder-and-provide-cred-to-import.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/choose-folder-and-provide-cred-to-import.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/create-folder.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/create-folder.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/create-folder.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/create-folder.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/discovery-progress-page.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/discovery-progress-page.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/discovery-progress-page.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/discovery-progress-page.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/exclusion-list.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/exclusion-list.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/exclusion-list.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/exclusion-list.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/find-list-of-subscriptions-mgs-in-turbot.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/find-list-of-subscriptions-mgs-in-turbot.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/find-list-of-subscriptions-mgs-in-turbot.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/find-list-of-subscriptions-mgs-in-turbot.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/index.md b/docs/connect/azure/import/skip-management-groups-and-subscriptions/index.md
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/index.md
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/index.md
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/review-azure-cmdb-discovery-controls.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/review-azure-cmdb-discovery-controls.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/review-azure-cmdb-discovery-controls.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/review-azure-cmdb-discovery-controls.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/select-azure.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/select-azure.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/select-azure.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/select-azure.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/select-preview-and-connect.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/select-preview-and-connect.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/select-preview-and-connect.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/select-preview-and-connect.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/start-import.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/start-import.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/start-import.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/start-import.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/tenant-in-folder.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/tenant-in-folder.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/tenant-in-folder.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/tenant-in-folder.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/validate-exclusion-list.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/validate-exclusion-list.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/validate-exclusion-list.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/validate-exclusion-list.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/validate-folder-created.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/validate-folder-created.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/validate-folder-created.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/validate-folder-created.png
diff --git a/docs/guides/azure/import/skip-management-groups-and-subscriptions/validate-mgs-subscriptions-imported.png b/docs/connect/azure/import/skip-management-groups-and-subscriptions/validate-mgs-subscriptions-imported.png
similarity index 100%
rename from docs/guides/azure/import/skip-management-groups-and-subscriptions/validate-mgs-subscriptions-imported.png
rename to docs/connect/azure/import/skip-management-groups-and-subscriptions/validate-mgs-subscriptions-imported.png
diff --git a/docs/guides/azure/import/subscription/import-subscription1.png b/docs/connect/azure/import/subscription/import-subscription1.png
similarity index 100%
rename from docs/guides/azure/import/subscription/import-subscription1.png
rename to docs/connect/azure/import/subscription/import-subscription1.png
diff --git a/docs/guides/azure/import/subscription/import-subscription2.png b/docs/connect/azure/import/subscription/import-subscription2.png
similarity index 100%
rename from docs/guides/azure/import/subscription/import-subscription2.png
rename to docs/connect/azure/import/subscription/import-subscription2.png
diff --git a/docs/guides/azure/import/subscription/index.md b/docs/connect/azure/import/subscription/index.md
similarity index 100%
rename from docs/guides/azure/import/subscription/index.md
rename to docs/connect/azure/import/subscription/index.md
diff --git a/docs/guides/azure/import/tenant/index.md b/docs/connect/azure/import/tenant/index.md
similarity index 100%
rename from docs/guides/azure/import/tenant/index.md
rename to docs/connect/azure/import/tenant/index.md
diff --git a/docs/guides/azure/import/tenant/select-azure.png b/docs/connect/azure/import/tenant/select-azure.png
similarity index 100%
rename from docs/guides/azure/import/tenant/select-azure.png
rename to docs/connect/azure/import/tenant/select-azure.png
diff --git a/docs/guides/azure/import/tenant/tenant-details.png b/docs/connect/azure/import/tenant/tenant-details.png
similarity index 100%
rename from docs/guides/azure/import/tenant/tenant-details.png
rename to docs/connect/azure/import/tenant/tenant-details.png
diff --git a/docs/guides/azure/index.md b/docs/connect/azure/index.md
similarity index 100%
rename from docs/guides/azure/index.md
rename to docs/connect/azure/index.md
diff --git a/docs/guides/azure/permissions/index.md b/docs/connect/azure/permissions/index.md
similarity index 100%
rename from docs/guides/azure/permissions/index.md
rename to docs/connect/azure/permissions/index.md
diff --git a/docs/guides/azure/real-time-events/ad-event-pollers.md b/docs/connect/azure/real-time-events/ad-event-pollers.md
similarity index 100%
rename from docs/guides/azure/real-time-events/ad-event-pollers.md
rename to docs/connect/azure/real-time-events/ad-event-pollers.md
diff --git a/docs/guides/azure/real-time-events/event-handlers.md b/docs/connect/azure/real-time-events/event-handlers.md
similarity index 100%
rename from docs/guides/azure/real-time-events/event-handlers.md
rename to docs/connect/azure/real-time-events/event-handlers.md
diff --git a/docs/guides/azure/real-time-events/event-pollers.md b/docs/connect/azure/real-time-events/event-pollers.md
similarity index 100%
rename from docs/guides/azure/real-time-events/event-pollers.md
rename to docs/connect/azure/real-time-events/event-pollers.md
diff --git a/docs/guides/azure/real-time-events/index.md b/docs/connect/azure/real-time-events/index.md
similarity index 100%
rename from docs/guides/azure/real-time-events/index.md
rename to docs/connect/azure/real-time-events/index.md
diff --git a/docs/guides/azure/real-time-events/mgmt-event-pollers.md b/docs/connect/azure/real-time-events/mgmt-event-pollers.md
similarity index 100%
rename from docs/guides/azure/real-time-events/mgmt-event-pollers.md
rename to docs/connect/azure/real-time-events/mgmt-event-pollers.md
diff --git a/docs/guides/azure/services/index.md b/docs/connect/azure/services/index.md
similarity index 100%
rename from docs/guides/azure/services/index.md
rename to docs/connect/azure/services/index.md
diff --git a/docs/guides/gcp/authentication-methods/index.md b/docs/connect/gcp/authentication-methods/index.md
similarity index 100%
rename from docs/guides/gcp/authentication-methods/index.md
rename to docs/connect/gcp/authentication-methods/index.md
diff --git a/docs/guides/gcp/decommission/index.md b/docs/connect/gcp/decommission/index.md
similarity index 100%
rename from docs/guides/gcp/decommission/index.md
rename to docs/connect/gcp/decommission/index.md
diff --git a/docs/faq/gcp-faq/index.md b/docs/connect/gcp/gcp-faq/index.md
similarity index 100%
rename from docs/faq/gcp-faq/index.md
rename to docs/connect/gcp/gcp-faq/index.md
diff --git a/docs/connect/gcp/gcp-sidebar.json b/docs/connect/gcp/gcp-sidebar.json
new file mode 100644
index 00000000..7efb2e78
--- /dev/null
+++ b/docs/connect/gcp/gcp-sidebar.json
@@ -0,0 +1,31 @@
+{
+ "type": "category",
+ "id": "gcp",
+ "link": "connect/gcp",
+ "items": [
+ {
+ "type": "category",
+ "id": "import",
+ "link": "connect/gcp/import-gcp-project",
+ "items": ["connect/gcp/import-gcp-project/service-accounts"]
+ },
+ {
+ "type": "category",
+ "id": "import-org",
+ "link": "connect/gcp/import-gcp-organization",
+ "items": [
+ "connect/gcp/import-gcp-organization/self-hosted-workspace",
+ "connect/gcp/import-gcp-organization/saas-workspace"
+ ]
+ },
+ "connect/gcp/services",
+ "connect/gcp/permissions",
+ {
+ "type": "category",
+ "id": "real-time-events",
+ "link": "connect/gcp/real-time-events",
+ "items": ["connect/gcp/real-time-events/event-pollers"]
+ },
+ "connect/gcp/gcp-faq"
+ ]
+}
\ No newline at end of file
diff --git a/docs/guides/gcp/import-gcp-organization/index.md b/docs/connect/gcp/import-gcp-organization/index.md
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/index.md
rename to docs/connect/gcp/import-gcp-organization/index.md
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/add-parameter-value-in-console.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/add-parameter-value-in-console.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/add-parameter-value-in-console.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/add-parameter-value-in-console.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/check-discovery-process.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/check-discovery-process.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/check-discovery-process.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/check-discovery-process.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/choose-import-location.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/choose-import-location.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/choose-import-location.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/choose-import-location.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/connect.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/connect.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/connect.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/connect.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/create-paramater.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/create-paramater.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/create-paramater.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/create-paramater.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/create-secure-standard-string.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/create-secure-standard-string.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/create-secure-standard-string.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/create-secure-standard-string.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/enable-api.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/enable-api.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/enable-api.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/enable-api.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/exception-list-with-connect.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/exception-list-with-connect.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/exception-list-with-connect.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/exception-list-with-connect.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/gcp-label-creation.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/gcp-label-creation.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/gcp-label-creation.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/gcp-label-creation.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/gcp-org-details.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/gcp-org-details.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/gcp-org-details.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/gcp-org-details.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/generate-external-id-label-and-create.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/generate-external-id-label-and-create.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/generate-external-id-label-and-create.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/generate-external-id-label-and-create.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/generate-external-id-label.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/generate-external-id-label.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/generate-external-id-label.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/generate-external-id-label.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/generate-service-account-impersonation.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/generate-service-account-impersonation.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/generate-service-account-impersonation.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/generate-service-account-impersonation.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/get-gcp-org-id.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/get-gcp-org-id.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/get-gcp-org-id.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/get-gcp-org-id.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/index.md b/docs/connect/gcp/import-gcp-organization/saas-workspace/index.md
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/index.md
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/index.md
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/review-gcp-org-resources-imported.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/review-gcp-org-resources-imported.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/review-gcp-org-resources-imported.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/review-gcp-org-resources-imported.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/review-org-cmdb-discovery-controls.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/review-org-cmdb-discovery-controls.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/review-org-cmdb-discovery-controls.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/review-org-cmdb-discovery-controls.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/select-connect.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/select-connect.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/select-connect.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/select-connect.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/select-gcp.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/select-gcp.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/select-gcp.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/select-gcp.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/service-account-with-org-scope.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/service-account-with-org-scope.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/service-account-with-org-scope.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/service-account-with-org-scope.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/setup-impersonate.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/setup-impersonate.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/setup-impersonate.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/setup-impersonate.png
diff --git a/docs/guides/gcp/import-gcp-organization/saas-workspace/update-ted-stack-parameter.png b/docs/connect/gcp/import-gcp-organization/saas-workspace/update-ted-stack-parameter.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/saas-workspace/update-ted-stack-parameter.png
rename to docs/connect/gcp/import-gcp-organization/saas-workspace/update-ted-stack-parameter.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/add-parameter-value-in-console.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/add-parameter-value-in-console.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/add-parameter-value-in-console.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/add-parameter-value-in-console.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/check-discovery-process.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/check-discovery-process.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/check-discovery-process.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/check-discovery-process.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/choose-import-location.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/choose-import-location.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/choose-import-location.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/choose-import-location.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/connect.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/connect.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/connect.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/connect.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/create-paramater.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/create-paramater.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/create-paramater.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/create-paramater.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/create-secure-standard-string.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/create-secure-standard-string.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/create-secure-standard-string.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/create-secure-standard-string.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/enable-api.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/enable-api.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/enable-api.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/enable-api.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/exception-list-with-connect.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/exception-list-with-connect.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/exception-list-with-connect.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/exception-list-with-connect.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/gcp-label-creation.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/gcp-label-creation.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/gcp-label-creation.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/gcp-label-creation.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/gcp-org-details.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/gcp-org-details.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/gcp-org-details.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/gcp-org-details.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label-and-create.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label-and-create.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label-and-create.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label-and-create.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/generate-external-id-label.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/generate-service-account-impersonation.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/generate-service-account-impersonation.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/generate-service-account-impersonation.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/generate-service-account-impersonation.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/get-gcp-org-id.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/get-gcp-org-id.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/get-gcp-org-id.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/get-gcp-org-id.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/index.md b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/index.md
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/index.md
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/index.md
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/review-gcp-org-resources-imported.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/review-gcp-org-resources-imported.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/review-gcp-org-resources-imported.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/review-gcp-org-resources-imported.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/review-org-cmdb-discovery-controls.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/review-org-cmdb-discovery-controls.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/review-org-cmdb-discovery-controls.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/review-org-cmdb-discovery-controls.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/select-connect.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/select-connect.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/select-connect.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/select-connect.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/select-gcp.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/select-gcp.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/select-gcp.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/select-gcp.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/service-account-with-org-scope.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/service-account-with-org-scope.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/service-account-with-org-scope.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/service-account-with-org-scope.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/setup-impersonate.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/setup-impersonate.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/setup-impersonate.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/setup-impersonate.png
diff --git a/docs/guides/gcp/import-gcp-organization/self-hosted-workspace/update-ted-stack-parameter.png b/docs/connect/gcp/import-gcp-organization/self-hosted-workspace/update-ted-stack-parameter.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-organization/self-hosted-workspace/update-ted-stack-parameter.png
rename to docs/connect/gcp/import-gcp-organization/self-hosted-workspace/update-ted-stack-parameter.png
diff --git a/docs/guides/gcp/import-gcp-project/cred-file.png b/docs/connect/gcp/import-gcp-project/cred-file.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-project/cred-file.png
rename to docs/connect/gcp/import-gcp-project/cred-file.png
diff --git a/docs/guides/gcp/import-gcp-project/import-gcp-project.png b/docs/connect/gcp/import-gcp-project/import-gcp-project.png
similarity index 100%
rename from docs/guides/gcp/import-gcp-project/import-gcp-project.png
rename to docs/connect/gcp/import-gcp-project/import-gcp-project.png
diff --git a/docs/guides/gcp/import-gcp-project/index.md b/docs/connect/gcp/import-gcp-project/index.md
similarity index 100%
rename from docs/guides/gcp/import-gcp-project/index.md
rename to docs/connect/gcp/import-gcp-project/index.md
diff --git a/docs/guides/gcp/import-gcp-project/service-accounts.md b/docs/connect/gcp/import-gcp-project/service-accounts.md
similarity index 100%
rename from docs/guides/gcp/import-gcp-project/service-accounts.md
rename to docs/connect/gcp/import-gcp-project/service-accounts.md
diff --git a/docs/guides/gcp/index.md b/docs/connect/gcp/index.md
similarity index 100%
rename from docs/guides/gcp/index.md
rename to docs/connect/gcp/index.md
diff --git a/docs/guides/gcp/permissions/index.md b/docs/connect/gcp/permissions/index.md
similarity index 100%
rename from docs/guides/gcp/permissions/index.md
rename to docs/connect/gcp/permissions/index.md
diff --git a/docs/guides/gcp/real-time-events/event-pollers/index.md b/docs/connect/gcp/real-time-events/event-pollers/index.md
similarity index 100%
rename from docs/guides/gcp/real-time-events/event-pollers/index.md
rename to docs/connect/gcp/real-time-events/event-pollers/index.md
diff --git a/docs/guides/gcp/real-time-events/index.md b/docs/connect/gcp/real-time-events/index.md
similarity index 100%
rename from docs/guides/gcp/real-time-events/index.md
rename to docs/connect/gcp/real-time-events/index.md
diff --git a/docs/guides/gcp/remove-gcp-project/index.md b/docs/connect/gcp/remove-gcp-project/index.md
similarity index 100%
rename from docs/guides/gcp/remove-gcp-project/index.md
rename to docs/connect/gcp/remove-gcp-project/index.md
diff --git a/docs/guides/gcp/services/index.md b/docs/connect/gcp/services/index.md
similarity index 100%
rename from docs/guides/gcp/services/index.md
rename to docs/connect/gcp/services/index.md
diff --git a/docs/connect/github/github-sidebar.json b/docs/connect/github/github-sidebar.json
new file mode 100644
index 00000000..7b389704
--- /dev/null
+++ b/docs/connect/github/github-sidebar.json
@@ -0,0 +1,10 @@
+{
+ "type": "category",
+ "id": "github",
+ "link": "connect/github",
+ "items": [
+ "connect/github/import-organization",
+ "connect/github/real-time-events",
+ "connect/github/remove-organization"
+ ]
+}
\ No newline at end of file
diff --git a/docs/guides/github/import-organization/allow-fine-grained-personal-access-tokens.png b/docs/connect/github/import-organization/allow-fine-grained-personal-access-tokens.png
similarity index 100%
rename from docs/guides/github/import-organization/allow-fine-grained-personal-access-tokens.png
rename to docs/connect/github/import-organization/allow-fine-grained-personal-access-tokens.png
diff --git a/docs/guides/github/import-organization/associate-org-permission.png b/docs/connect/github/import-organization/associate-org-permission.png
similarity index 100%
rename from docs/guides/github/import-organization/associate-org-permission.png
rename to docs/connect/github/import-organization/associate-org-permission.png
diff --git a/docs/guides/github/import-organization/associated-permissions-in-pat.png b/docs/connect/github/import-organization/associated-permissions-in-pat.png
similarity index 100%
rename from docs/guides/github/import-organization/associated-permissions-in-pat.png
rename to docs/connect/github/import-organization/associated-permissions-in-pat.png
diff --git a/docs/guides/github/import-organization/choose-location.png b/docs/connect/github/import-organization/choose-location.png
similarity index 100%
rename from docs/guides/github/import-organization/choose-location.png
rename to docs/connect/github/import-organization/choose-location.png
diff --git a/docs/guides/github/import-organization/connect-github-card.png b/docs/connect/github/import-organization/connect-github-card.png
similarity index 100%
rename from docs/guides/github/import-organization/connect-github-card.png
rename to docs/connect/github/import-organization/connect-github-card.png
diff --git a/docs/guides/github/import-organization/connect.png b/docs/connect/github/import-organization/connect.png
similarity index 100%
rename from docs/guides/github/import-organization/connect.png
rename to docs/connect/github/import-organization/connect.png
diff --git a/docs/guides/github/import-organization/copy-personal-token.png b/docs/connect/github/import-organization/copy-personal-token.png
similarity index 100%
rename from docs/guides/github/import-organization/copy-personal-token.png
rename to docs/connect/github/import-organization/copy-personal-token.png
diff --git a/docs/guides/github/import-organization/create-personal-token.png b/docs/connect/github/import-organization/create-personal-token.png
similarity index 100%
rename from docs/guides/github/import-organization/create-personal-token.png
rename to docs/connect/github/import-organization/create-personal-token.png
diff --git a/docs/guides/github/import-organization/edit-personal-token.png b/docs/connect/github/import-organization/edit-personal-token.png
similarity index 100%
rename from docs/guides/github/import-organization/edit-personal-token.png
rename to docs/connect/github/import-organization/edit-personal-token.png
diff --git a/docs/guides/github/import-organization/get-org-url.png b/docs/connect/github/import-organization/get-org-url.png
similarity index 100%
rename from docs/guides/github/import-organization/get-org-url.png
rename to docs/connect/github/import-organization/get-org-url.png
diff --git a/docs/guides/github/import-organization/guardrails-console-login copy.png b/docs/connect/github/import-organization/guardrails-console-login copy.png
similarity index 100%
rename from docs/guides/github/import-organization/guardrails-console-login copy.png
rename to docs/connect/github/import-organization/guardrails-console-login copy.png
diff --git a/docs/guides/github/import-organization/guardrails-console-login.png b/docs/connect/github/import-organization/guardrails-console-login.png
similarity index 100%
rename from docs/guides/github/import-organization/guardrails-console-login.png
rename to docs/connect/github/import-organization/guardrails-console-login.png
diff --git a/docs/guides/github/import-organization/index.md b/docs/connect/github/import-organization/index.md
similarity index 100%
rename from docs/guides/github/import-organization/index.md
rename to docs/connect/github/import-organization/index.md
diff --git a/docs/guides/github/import-organization/organization-settings.png b/docs/connect/github/import-organization/organization-settings.png
similarity index 100%
rename from docs/guides/github/import-organization/organization-settings.png
rename to docs/connect/github/import-organization/organization-settings.png
diff --git a/docs/guides/github/import-organization/personal-token-with-no-permission.png b/docs/connect/github/import-organization/personal-token-with-no-permission.png
similarity index 100%
rename from docs/guides/github/import-organization/personal-token-with-no-permission.png
rename to docs/connect/github/import-organization/personal-token-with-no-permission.png
diff --git a/docs/guides/github/import-organization/personal-token.png b/docs/connect/github/import-organization/personal-token.png
similarity index 100%
rename from docs/guides/github/import-organization/personal-token.png
rename to docs/connect/github/import-organization/personal-token.png
diff --git a/docs/guides/github/import-organization/select-active-tokens.png b/docs/connect/github/import-organization/select-active-tokens.png
similarity index 100%
rename from docs/guides/github/import-organization/select-active-tokens.png
rename to docs/connect/github/import-organization/select-active-tokens.png
diff --git a/docs/guides/github/import-organization/select-connect-card.png b/docs/connect/github/import-organization/select-connect-card.png
similarity index 100%
rename from docs/guides/github/import-organization/select-connect-card.png
rename to docs/connect/github/import-organization/select-connect-card.png
diff --git a/docs/guides/github/import-organization/verify-github-controls.png b/docs/connect/github/import-organization/verify-github-controls.png
similarity index 100%
rename from docs/guides/github/import-organization/verify-github-controls.png
rename to docs/connect/github/import-organization/verify-github-controls.png
diff --git a/docs/guides/github/index.md b/docs/connect/github/index.md
similarity index 100%
rename from docs/guides/github/index.md
rename to docs/connect/github/index.md
diff --git a/docs/guides/github/real-time-events/control-configured-ok.png b/docs/connect/github/real-time-events/control-configured-ok.png
similarity index 100%
rename from docs/guides/github/real-time-events/control-configured-ok.png
rename to docs/connect/github/real-time-events/control-configured-ok.png
diff --git a/docs/guides/github/real-time-events/create-event-handler.png b/docs/connect/github/real-time-events/create-event-handler.png
similarity index 100%
rename from docs/guides/github/real-time-events/create-event-handler.png
rename to docs/connect/github/real-time-events/create-event-handler.png
diff --git a/docs/guides/github/real-time-events/create-policy-setting.png b/docs/connect/github/real-time-events/create-policy-setting.png
similarity index 100%
rename from docs/guides/github/real-time-events/create-policy-setting.png
rename to docs/connect/github/real-time-events/create-policy-setting.png
diff --git a/docs/guides/github/real-time-events/guardrails-console-login.png b/docs/connect/github/real-time-events/guardrails-console-login.png
similarity index 100%
rename from docs/guides/github/real-time-events/guardrails-console-login.png
rename to docs/connect/github/real-time-events/guardrails-console-login.png
diff --git a/docs/guides/github/real-time-events/index.md b/docs/connect/github/real-time-events/index.md
similarity index 100%
rename from docs/guides/github/real-time-events/index.md
rename to docs/connect/github/real-time-events/index.md
diff --git a/docs/guides/github/real-time-events/organization-event-handlers-control-status.png b/docs/connect/github/real-time-events/organization-event-handlers-control-status.png
similarity index 100%
rename from docs/guides/github/real-time-events/organization-event-handlers-control-status.png
rename to docs/connect/github/real-time-events/organization-event-handlers-control-status.png
diff --git a/docs/guides/github/real-time-events/repository-cmdb-controls.png b/docs/connect/github/real-time-events/repository-cmdb-controls.png
similarity index 100%
rename from docs/guides/github/real-time-events/repository-cmdb-controls.png
rename to docs/connect/github/real-time-events/repository-cmdb-controls.png
diff --git a/docs/guides/github/real-time-events/validate-github-org-webhook.png b/docs/connect/github/real-time-events/validate-github-org-webhook.png
similarity index 100%
rename from docs/guides/github/real-time-events/validate-github-org-webhook.png
rename to docs/connect/github/real-time-events/validate-github-org-webhook.png
diff --git a/docs/guides/github/remove-organization/current-setting-enforce-enabled.png b/docs/connect/github/remove-organization/current-setting-enforce-enabled.png
similarity index 100%
rename from docs/guides/github/remove-organization/current-setting-enforce-enabled.png
rename to docs/connect/github/remove-organization/current-setting-enforce-enabled.png
diff --git a/docs/guides/github/remove-organization/delete-github-config-pat-policy.png b/docs/connect/github/remove-organization/delete-github-config-pat-policy.png
similarity index 100%
rename from docs/guides/github/remove-organization/delete-github-config-pat-policy.png
rename to docs/connect/github/remove-organization/delete-github-config-pat-policy.png
diff --git a/docs/guides/github/remove-organization/delete-organization.png b/docs/connect/github/remove-organization/delete-organization.png
similarity index 100%
rename from docs/guides/github/remove-organization/delete-organization.png
rename to docs/connect/github/remove-organization/delete-organization.png
diff --git a/docs/guides/github/remove-organization/enforce-disabled.png b/docs/connect/github/remove-organization/enforce-disabled.png
similarity index 100%
rename from docs/guides/github/remove-organization/enforce-disabled.png
rename to docs/connect/github/remove-organization/enforce-disabled.png
diff --git a/docs/guides/github/remove-organization/guardrails-console-login copy.png b/docs/connect/github/remove-organization/guardrails-console-login copy.png
similarity index 100%
rename from docs/guides/github/remove-organization/guardrails-console-login copy.png
rename to docs/connect/github/remove-organization/guardrails-console-login copy.png
diff --git a/docs/guides/github/remove-organization/guardrails-console-login.png b/docs/connect/github/remove-organization/guardrails-console-login.png
similarity index 100%
rename from docs/guides/github/remove-organization/guardrails-console-login.png
rename to docs/connect/github/remove-organization/guardrails-console-login.png
diff --git a/docs/guides/github/remove-organization/index.md b/docs/connect/github/remove-organization/index.md
similarity index 100%
rename from docs/guides/github/remove-organization/index.md
rename to docs/connect/github/remove-organization/index.md
diff --git a/docs/guides/github/remove-organization/locate-organization.png b/docs/connect/github/remove-organization/locate-organization.png
similarity index 100%
rename from docs/guides/github/remove-organization/locate-organization.png
rename to docs/connect/github/remove-organization/locate-organization.png
diff --git a/docs/guides/github/remove-organization/remove-from-turbot.png b/docs/connect/github/remove-organization/remove-from-turbot.png
similarity index 100%
rename from docs/guides/github/remove-organization/remove-from-turbot.png
rename to docs/connect/github/remove-organization/remove-from-turbot.png
diff --git a/docs/guides/github/remove-organization/removed-webhooks.png b/docs/connect/github/remove-organization/removed-webhooks.png
similarity index 100%
rename from docs/guides/github/remove-organization/removed-webhooks.png
rename to docs/connect/github/remove-organization/removed-webhooks.png
diff --git a/docs/guides/index.md b/docs/connect/index.md
similarity index 97%
rename from docs/guides/index.md
rename to docs/connect/index.md
index dab8a76c..15e2728c 100644
--- a/docs/guides/index.md
+++ b/docs/connect/index.md
@@ -1,5 +1,5 @@
---
-title: Guides
+title: Connecting Your Cloud
---
# Guides
diff --git a/docs/guides/kubernetes/configure-queries/index.md b/docs/connect/kubernetes/configure-queries/index.md
similarity index 100%
rename from docs/guides/kubernetes/configure-queries/index.md
rename to docs/connect/kubernetes/configure-queries/index.md
diff --git a/docs/guides/kubernetes/decommission/index.md b/docs/connect/kubernetes/decommission/index.md
similarity index 100%
rename from docs/guides/kubernetes/decommission/index.md
rename to docs/connect/kubernetes/decommission/index.md
diff --git a/docs/guides/kubernetes/import-kubernetes-cluster/index.md b/docs/connect/kubernetes/import-kubernetes-cluster/index.md
similarity index 100%
rename from docs/guides/kubernetes/import-kubernetes-cluster/index.md
rename to docs/connect/kubernetes/import-kubernetes-cluster/index.md
diff --git a/docs/guides/kubernetes/index.md b/docs/connect/kubernetes/index.md
similarity index 100%
rename from docs/guides/kubernetes/index.md
rename to docs/connect/kubernetes/index.md
diff --git a/docs/guides/servicenow/discovery-servicenow-custom-tables/business-rule-policy.png b/docs/connect/servicenow/discovery-servicenow-custom-tables/business-rule-policy.png
similarity index 100%
rename from docs/guides/servicenow/discovery-servicenow-custom-tables/business-rule-policy.png
rename to docs/connect/servicenow/discovery-servicenow-custom-tables/business-rule-policy.png
diff --git a/docs/guides/servicenow/discovery-servicenow-custom-tables/index copy.md b/docs/connect/servicenow/discovery-servicenow-custom-tables/index copy.md
similarity index 100%
rename from docs/guides/servicenow/discovery-servicenow-custom-tables/index copy.md
rename to docs/connect/servicenow/discovery-servicenow-custom-tables/index copy.md
diff --git a/docs/guides/servicenow/discovery-servicenow-custom-tables/index.md b/docs/connect/servicenow/discovery-servicenow-custom-tables/index.md
similarity index 100%
rename from docs/guides/servicenow/discovery-servicenow-custom-tables/index.md
rename to docs/connect/servicenow/discovery-servicenow-custom-tables/index.md
diff --git a/docs/guides/servicenow/discovery-servicenow-custom-tables/policy-setting.png b/docs/connect/servicenow/discovery-servicenow-custom-tables/policy-setting.png
similarity index 100%
rename from docs/guides/servicenow/discovery-servicenow-custom-tables/policy-setting.png
rename to docs/connect/servicenow/discovery-servicenow-custom-tables/policy-setting.png
diff --git a/docs/guides/servicenow/guardrails-to-servicenow-sync/index.md b/docs/connect/servicenow/guardrails-to-servicenow-sync/index.md
similarity index 100%
rename from docs/guides/servicenow/guardrails-to-servicenow-sync/index.md
rename to docs/connect/servicenow/guardrails-to-servicenow-sync/index.md
diff --git a/docs/guides/servicenow/import-servicenow-instance/index copy.md b/docs/connect/servicenow/import-servicenow-instance/index copy.md
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/index copy.md
rename to docs/connect/servicenow/import-servicenow-instance/index copy.md
diff --git a/docs/guides/servicenow/import-servicenow-instance/index.md b/docs/connect/servicenow/import-servicenow-instance/index.md
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/index.md
rename to docs/connect/servicenow/import-servicenow-instance/index.md
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-2.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-2.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-2.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-2.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-3.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-3.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-3.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-3.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-4.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-4.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-4.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope-4.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-application-scope.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import copy.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import copy.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import copy.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import copy.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import-filled.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import-filled.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import-filled.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import-filled.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-instance-import.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-2.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-2.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-2.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-2.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-3.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-3.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-3.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app-3.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-oauth-app.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-2.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-2.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-2.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-2.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-3.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-3.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-3.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-3.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-4.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-4.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-4.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-4.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-5.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-5.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-5.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account-5.png
diff --git a/docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account.png b/docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account.png
similarity index 100%
rename from docs/guides/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account.png
rename to docs/connect/servicenow/import-servicenow-instance/turbot-guardrails-servicenow-system-account.png
diff --git a/docs/guides/servicenow/index.md b/docs/connect/servicenow/index.md
similarity index 100%
rename from docs/guides/servicenow/index.md
rename to docs/connect/servicenow/index.md
diff --git a/docs/guides/servicenow/servicenow-to-guardrails-sync/image.png b/docs/connect/servicenow/servicenow-to-guardrails-sync/image.png
similarity index 100%
rename from docs/guides/servicenow/servicenow-to-guardrails-sync/image.png
rename to docs/connect/servicenow/servicenow-to-guardrails-sync/image.png
diff --git a/docs/guides/servicenow/servicenow-to-guardrails-sync/index.md b/docs/connect/servicenow/servicenow-to-guardrails-sync/index.md
similarity index 100%
rename from docs/guides/servicenow/servicenow-to-guardrails-sync/index.md
rename to docs/connect/servicenow/servicenow-to-guardrails-sync/index.md
diff --git a/docs/guides/servicenow/servicenow-to-guardrails-sync/servicenow-turbot-guardrails-table-sync-policy.png b/docs/connect/servicenow/servicenow-to-guardrails-sync/servicenow-turbot-guardrails-table-sync-policy.png
similarity index 100%
rename from docs/guides/servicenow/servicenow-to-guardrails-sync/servicenow-turbot-guardrails-table-sync-policy.png
rename to docs/connect/servicenow/servicenow-to-guardrails-sync/servicenow-turbot-guardrails-table-sync-policy.png
diff --git a/docs/guides/servicenow/servicenow-to-guardrails-sync/turbot-guardrails-servicenow-cmdb-ci-appl-records-in-turbot.jpg b/docs/connect/servicenow/servicenow-to-guardrails-sync/turbot-guardrails-servicenow-cmdb-ci-appl-records-in-turbot.jpg
similarity index 100%
rename from docs/guides/servicenow/servicenow-to-guardrails-sync/turbot-guardrails-servicenow-cmdb-ci-appl-records-in-turbot.jpg
rename to docs/connect/servicenow/servicenow-to-guardrails-sync/turbot-guardrails-servicenow-cmdb-ci-appl-records-in-turbot.jpg
diff --git a/docs/getting-started/7-minute-labs/graphql/graphiql.png b/docs/getting-started/7-minute-labs/graphql/graphiql.png
deleted file mode 100644
index 69f5d738..00000000
Binary files a/docs/getting-started/7-minute-labs/graphql/graphiql.png and /dev/null differ
diff --git a/docs/getting-started/7-minute-labs/graphql/index.md b/docs/getting-started/7-minute-labs/graphql/index.md
deleted file mode 100644
index dcd504cf..00000000
--- a/docs/getting-started/7-minute-labs/graphql/index.md
+++ /dev/null
@@ -1,353 +0,0 @@
----
-title: GraphQL in 7 minutes
-template: Documentation
-nav:
- title: GraphQL
----
-
-# GraphQL in 7 minutes
-
-| Goal | Query Turbot Guardrails using GraphQL and learn how to explore the GraphQL API. |
-| ---- |---------------------------------------------------------------------------------|
-| Time | 7 minutes |
-
-## Overview
-
-[GraphQL](https://graphql.org/) is the native query language for the Turbot Guardrails API.
-
-In this exercise, you will explore the Turbot Guardrails GraphQL API via the GraphiQL
-interface built into the Turbot Guardrails Console.
-
-By the end of this lab, you will be able to query the Turbot Guardrails API with GraphQL,
-filter and page through results, and leverage the basic features of the GraphiQL
-editor.
-
-## Open GraphiQL for your Turbot Guardrails Workspace
-
-GraphiQL is a built-in tool to explore, build and run GraphQL queries in Turbot Guardrails.
-
-To open the explorer, login to your Turbot Guardrails Workspace and click on **Developers**
-in the top right corner. 
-
-## Run your first GraphQL query
-
-Copy & paste this query into GraphiQL and click run:
-
-```graphql
-{
- resources {
- items {
- title
- }
- }
-}
-```
-
-The JSON results will match your requested format:
-
-```javascript
-{
- "data": {
- "resources": {
- "items": [
- {
- "title": "my first resource"
- },
- {
- "title": "my second resource"
- }
- ]
- }
- }
-}
-```
-
-## Expand your query, observing autocomplete capabilities
-
-Edit the query (resist the urge to copy & paste!) to request extra `turbot`
-metadata about the resources:
-
-```graphql
-{
- resources {
- items {
- title
- // highlight-start
- turbot {
- id
- createTimestamp
- }
- // highlight-end
- }
- }
-}
-```
-
-While you are editing the query above, you'll see autocompletion options
-appearing in the editor. Use this to try adding other fields to the results.
-
-## Discover inline documentation
-
-In addition to autocomplete, GraphiQL comes with extensive inline documentation.
-Click the `< Docs` link in the top right hand corner to start exploring.
-
-Search for the `resources` query in the documentation, you'll see it produces a
-list of the resource type `[resource]`.
-
-Clicking through to the resource type, you can see all the available fields.
-
-## Use filters to target your query
-
-Add a filter to the resources query to target the results. In this case, we'll
-restrict results to the Turbot Guardrails Profile resource type:
-
-```graphql
-{
- resources(filter:"resourceType:profile") { // highlight-line
- items {
- turbot {
- id
- createTimestamp
- title
- }
- }
- }
-}
-```
-
-Find resources created in the last 6 hours:
-
-```graphql
-{
- resources(filter:"createTimestamp:>=T-6h") { // highlight-line
- items {
- turbot {
- id
- createTimestamp
- title
- }
-
- }
- }
-}
-
-```
-
-## Paging through results
-
-Get the first page of results, including the `next` token. Notice the filter
-support for sorting and limiting results.
-
-```graphql
-{
- resources(filter:"resourceType:profile sort:title limit:3") { // highlight-line
- items {
- turbot {
- id
- createTimestamp
- title
- }
- }
- // highlight-start
- paging {
- previous
- next
- }
- // highlight-end
- }
-}
-```
-
-The result includes `paging` metadata that can be used in the next request:
-
-```json
-{
- "data": {
- "resources": {
- "items": [
- {
- "turbot": {
- "id": "162723451277834",
- "createTimestamp": "2019-06-19T10:33:40.387Z",
- "title": "Batman"
- }
- },
- {
- "turbot": {
- "id": "162723451277834",
- "createTimestamp": "2019-06-19T10:33:40.387Z",
- "title": "Danger Mouse"
- }
- },
- {
- "turbot": {
- "id": "162674901433086",
- "createTimestamp": "2019-06-18T21:23:28.429Z",
- "title": "Superman"
- }
- }
- ],
- "paging": {
- "previous": null
- "next": "eyJzb3J0IjpbeyJ0ZXh0IjoidGl0bGUifSx7InRleHQiOiJpZCIsIm9wZXJhdG9yIjoiLSJ9XSwid2hlcmUiOlt7InBpdm90IjoidGl0bGUiLCJvcGVyYXRvciI6Ij4iLCJ2YWx1ZSI6IkNodWNrIEdhbWJsZSJ9LHsicGl2b3QiOiJpZCIsIm9wZXJhdG9yIjoiPCIsInZhbHVlIjoiMTY1MDQyODYzMjU1MTk2In1dLCJtb2RlIjoibmV4dCJ9" // highlight-line
- }
- }
- }
-}
-```
-
-Query the second page of results by including the `paging` parameter. You have
-reached the end of the results set when `next` is returned as null.
-
-```graphql
-{
- resources(filter:"resourceType:profile sort:title limit:3" paging:"eyJzb3J0IjpbeyJ0ZXh0IjoidGl0bGUifSx7InRleHQiOiJpZCIsIm9wZXJhdG9yIjoiLSJ9XSwid2hlcmUiOlt7InBpdm90IjoidGl0bGUiLCJvcGVyYXRvciI6Ij4iLCJ2YWx1ZSI6IkNodWNrIEdhbWJsZSJ9LHsicGl2b3QiOiJpZCIsIm9wZXJhdG9yIjoiPCIsInZhbHVlIjoiMTY1MDQyODYzMjU1MTk2In1dLCJtb2RlIjoibmV4dCJ9") { // highlight-line
- items {
- turbot {
- id
- createTimestamp
- title
- }
- }
- paging {
- previous
- next
- }
- }
-}
-```
-
-The final page of results will have a `previous` token, but `next` is `null`:
-
-```json
-{
- "data": {
- "resources": {
- "items": [
- {
- "turbot": {
- "id": "164235079971230",
- "createTimestamp": "2019-07-06T12:37:00.283Z",
- "title": "Wonder Woman"
- }
- }
- ],
- "paging": {
- "previous": "eyJzb3J0IjpbeyJ0ZXh0IjoidGl0bGUifSx7InRleHQiOiJpZCIsIm9wZXJhdG9yIjoiLSJ9XSwid2hlcmUiOlt7InBpdm90IjoidGl0bGUiLCJvcGVyYXRvciI6IjwiLCJ2YWx1ZSI6IlJ1cGVzaCBQYXRpbCJ9LHsicGl2b3QiOiJpZCIsIm9wZXJhdG9yIjoiPiIsInZhbHVlIjoiMTYzMTQ1NDk2MDAyNTUxIn1dLCJtb2RlIjoicHJldmlvdXMifQ==", // highlight-line
- "next": null // highlight-line
- }
- }
- }
-}
-```
-
-## Mutations
-
-Mutations allow modifications to existing Turbot resource metadata using
-GraphQL.
-
-It is important to first start with a query to ensure the correct resource is
-being acted upon. Consider an example of updating an existing mod in Turbot
-using a GraphQL mutation.
-
-Start with the query of all installed mods to get a list of the names and
-versions.
-
-```graphql
-query InstalledMods {
- resources(
- filter: "resource:'tmod:@turbot/turbot#/' resourceType:tmod:@turbot/turbot#/resource/types/mod resourceTypeLevel:self sort:title limit:200"
- ) {
- items {
- akas
- version: get(path: "version")
- }
- }
-}
-```
-
-An example response looks like the following:
-
-```json
-{
- "data": {
- "resources": {
- "items": [
- {
- "akas": ["tmod:@turbot/aws"],
- "version": "5.2.0"
- },
- {
- "akas": ["tmod:@turbot/aws-acm"],
- "version": "5.2.2"
- },
- {
- "akas": ["tmod:@turbot/aws-amplify"],
- "version": "5.0.1"
- },
- {
- "akas": ["tmod:@turbot/aws-apigateway"],
- "version": "5.1.0"
- },
- {
- "akas": ["tmod:@turbot/aws-appstream"],
- "version": "5.0.0-beta.4"
- },
- {
- "akas": ["tmod:@turbot/aws-athena"],
- "version": "5.1.1"
- }
- ]
- }
- }
-}
-```
-
-Suppose the `tmod:@turbot/aws` mod needs to be updated. This can be done by
-using the following GraphQL mutation.
-
-```graphql
-mutation installMod {
- installMod(
- input: {
- parent: "tmod:@turbot/turbot#/" # AKA or ID for the turbot product
- org: "turbot" # Name of the organization to which mod belongs
- mod: "aws" # Name of the mod
- version: "5.3.0" # Desired version of mod
- }
- ) {
- turbot {
- id
- }
- data
- }
-}
-```
-
-The as with other GraphQL queries, the response will be json.
-
-```json
-{
- "data": {
- "installMod": {
- "turbot": {
- "id": "177146224838314"
- },
- "data": null
- }
- }
-}
-```
-
-The `id` returned is the Turbot Id for the mod resource.
-
-Mutations can also be used to create, change, or delete policy settings, update
-local user passwords, as well as creating various Turbot resources such as a
-policy pack.
-
-## Further Reading
-
-- [Turbot GraphQL API Reference](reference/graphql)
-- [Turbot Filter Language Reference](reference/filter)
-- [Turbot Guardrails GraphQL Examples in Samples Repo](https://github.com/turbot/guardrails-samples/tree/main/queries)
-- [Introduction to GraphQL](https://graphql.org/learn/)
diff --git a/docs/getting-started/getting-started-aws/prepare-account/index2.md b/docs/getting-started/getting-started-aws/prepare-account/index2.md
new file mode 100644
index 00000000..5f3eabfa
--- /dev/null
+++ b/docs/getting-started/getting-started-aws/prepare-account/index2.md
@@ -0,0 +1,248 @@
+---
+title: Prepare an AWS Account for Import to Guardrails
+sidebar_label: Prepare the AWS Account
+---
+
+# Prepare an AWS Account for Import to Guardrails
+
+In this guide, you will prepare an AWS account to be imported into Guardrails by deploying an IAM access role using a CloudFormation template.
+
+This is the first guide in the *Getting started with AWS* series.
+
+## Prerequisites
+
+- Access to the Turbot Guardrails console with admin privilege.
+
+- An AWS Account to import into Guardrails.
+
+> [!NOTE]
+> While Guardrails does not need admin access to your AWS account, you will need elevated access to create the cross account roles necessary to import the account in readonly mode.
+
+## Step 1: Login to Guardrails
+
+
+
+
+ Login to your Guardrails console and select the CONNECT option from the home page.
+ 
+
+
+## Step 2: Download the CloudFormation template
+
+Guardrails needs an IAM role that grants permission to discover [resources](/guardrails/docs/reference/glossary#resource) in your account and to monitor changes via event handlers. The CloudFormation template downloaded in this step has the minimum permissions necessary to create that role.
+
+
+
+ Select AWS Account from the left navigation and then click the blue Download CloudFormation Template button to download the CloudFormation template you will use to create the required IAM role in your AWS account.
+ 
+
+
+> [!IMPORTANT]
+> Leave this browser tab open while we do the next steps in a different tab. Closing and reopening this page will cause a new random ExternalID to be generated.
+
+## Step 3: Create the stack
+
+
+
+
+ Open a new tab and login to your AWS account. Navigate to the CloudFormation service and create a stack with new resources.
+ 
+
+
+
+
+
+## Step 4: Upload the template
+
+
+
+
+ On the Create Stack page, select Upload a template file and then click the Choose file button.
+ 
+
+
+
+
+
+ Use the file dialog to find and upload the file you downloaded in step 2, then select the Next button.
+ 
+
+
+## Step 5: Launch the stack
+
+
+
+
+ In the Stack Name field, enter guardrails-import
and then scroll down the page.
+ 
+
+
+
+
+
+ Review the rest of the default values (no changes should be needed), and then select the Next button at the bottom of the page.
+ 
+
+
+
+
+
+ On the next page of the stack wizard, scroll to the bottom, enable the acknowledgement checkbox and then select the Next button.
+ 
+
+
+## Step 6: Verify the stack
+
+
+
+
+ Wait for the stack to complete and for the status of the stack to change to CREATE_COMPLETE.
+ 
+
+
+## Step 7: Review stack outputs
+
+
+
+
+ Select the Outputs tab and copy the ARN of the Guardrails IAM role.
+ 
+
+
+## Step 8: Review
+
+In this guide, you've learned how to deploy an AWS role that grants minimal permissions to Guardrails using the AWS CloudFormation service.
+
+## Next Steps
+
+In the [next guide](/guardrails/docs/getting-started/getting-started-aws/connect-an-account) you will use the IAM role you just created to import an AWS account into Guardrails.
+
+## Troubleshooting
+
+If you run into issues following this guide, jump in the `#guardrails` channel in the [Turbot Community Slack](https://turbot.com/community/join), or [open a support ticket](https://support.turbot.com/hc/en-us/requests/new).
+
+## Progress tracker
+- [x] **Prepare an AWS Account for Import to Guardrails**
+- [ ] Connect an AWS Account to Guardrails
+- [ ] Observe AWS Resource Activity
+- [ ] Enable Your First Policy Pack
+- [ ] Review Account-Wide Governance
+- [ ] Create a Static Exception to a Guardrails Policy
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Enable Automatic Enforcement
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/getting-started/getting-started-aws/prepare-account/index3.md b/docs/getting-started/getting-started-aws/prepare-account/index3.md
new file mode 100644
index 00000000..e65b82d7
--- /dev/null
+++ b/docs/getting-started/getting-started-aws/prepare-account/index3.md
@@ -0,0 +1,264 @@
+---
+title: Prepare an AWS Account for Import to Guardrails
+sidebar_label: Prepare the AWS Account
+---
+
+# Prepare an AWS Account for Import to Guardrails
+
+In this guide, you will prepare an AWS account to be imported into Guardrails by deploying an IAM access role using a CloudFormation template.
+
+This is the first guide in the *Getting started with AWS* series.
+
+## Prerequisites
+
+- Access to the Turbot Guardrails console with admin privilege.
+
+- An AWS Account to import into Guardrails.
+
+> [!NOTE]
+> While Guardrails does not need admin access to your AWS account, you will need elevated access to create the cross account roles necessary to import the account in readonly mode.
+
+## Step 1: Login to Guardrails
+
+
+
+ Login to your Guardrails console and select the **CONNECT** option from the home page.
+
+
+ Show me
+ 
+
+
+## Step 2: Download the CloudFormation template
+
+Guardrails needs an IAM role that grants permission to discover [resources](/guardrails/docs/reference/glossary#resource) in your account and to monitor changes via event handlers. The CloudFormation template downloaded in this step has the minimum permissions necessary to create that role.
+
+
+Select **AWS Account** from the left navigation and then click the blue **Download CloudFormation Template** button to download the CloudFormation template you will use to create the required IAM role in your AWS account.
+
+
+ Show me
+ 
+
+
+> [!IMPORTANT]
+> Leave this browser tab open while we do the next steps in a different tab. Closing and reopening this page will cause a new random ExternalID to be generated.
+
+## Step 3: Create the stack
+
+
+
+Open a new tab and login to your AWS account. Navigate to the CloudFormation service and create a stack with new resources.
+
+
+ Show me
+ 
+
+
+
+
+
+## Step 4: Upload the template
+
+
+
+On the **Create Stack** page, select **Upload a template file** and then click the **Choose file** button.
+
+
+ Show me
+ 
+
+
+
+Use the file dialog to find and upload the file you downloaded in step 2, then select the **Next** button.
+
+
+ Show me
+ 
+
+
+## Step 5: Launch the stack
+
+
+In the Stack Name field, enter `guardrails-import` and then scroll down the page.
+
+
+ Show me
+ 
+
+
+
+
+Review the rest of the default values (no changes should be needed), and then select the **Next** button at the bottom of the page:
+
+
+ Show me
+ 
+
+
+
+On the next page of the stack wizard, scroll to the bottom, enable the acknowledgement checkbox and then the **Next** button.
+
+
+ Show me
+ 
+
+
+## Step 6: Verify the stack
+
+
+Wait for the stack to complete and for the status of the stack to change to **CREATE_COMPLETE**.
+
+
+ Show me
+ 
+
+
+## Step 7: Review stack outputs
+
+
+
+Select the **Outputs** tab and copy the ARN of the Guardrails IAM role.
+
+
+ Show me
+ 
+
+
+## Step 8: Review
+
+In this guide, you've learned how to deploy an AWS role that grants minimal permissions to Guardrails using the AWS CloudFormation service.
+
+## Next Steps
+
+In the [next guide](/guardrails/docs/getting-started/getting-started-aws/connect-an-account) you will use the IAM role you just created to import an AWS account into Guardrails.
+
+## Troubleshooting
+
+If you run into issues following this guide, jump in the `#guardrails` channel in the [Turbot Community Slack](https://turbot.com/community/join), or [open a support ticket](https://support.turbot.com/hc/en-us/requests/new).
+
+## Progress tracker
+- [x] **Prepare an AWS Account for Import to Guardrails**
+- [ ] Connect an AWS Account to Guardrails
+- [ ] Observe AWS Resource Activity
+- [ ] Enable Your First Policy Pack
+- [ ] Review Account-Wide Governance
+- [ ] Create a Static Exception to a Guardrails Policy
+- [ ] Create a Calculated Exception to a Guardrails Policy
+- [ ] Send an Alert to Email
+- [ ] Apply a Quick Action
+- [ ] Enable Automatic Enforcement
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/guides/aws/aws-sidebar.json b/docs/guides/aws/aws-sidebar.json
deleted file mode 100644
index 6b621aba..00000000
--- a/docs/guides/aws/aws-sidebar.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "type": "category",
- "id": "aws",
- "link": "guides/aws",
- "items": [
- {
- "type": "category",
- "id": "import-aws-account",
- "link": "guides/aws/import-aws-account",
- "items": ["guides/aws/import-aws-account/gov-cloud"]
- },
- "guides/aws/import-aws-organization",
- {
- "type": "category",
- "id": "event-handlers",
- "link": "guides/aws/event-handlers",
- "items": ["guides/aws/event-handlers/poller"]
- },
- {
- "type": "category",
- "id": "global-event-handler",
- "link": "guides/aws/global-event-handlers",
- "items": [
- "guides/aws/global-event-handlers/setup-with-turbot-managed-iam-role",
- "guides/aws/global-event-handlers/setup-with-custom-iam-role",
- "guides/aws/global-event-handlers/migrate-to-global-event-handlers"
- ]
- },
- "guides/aws/services",
- {
- "type": "category",
- "id": "permissions",
- "link": "guides/aws/permissions",
- "items": ["guides/aws/permissions/user-mode"]
- },
- "guides/aws/security-hub",
- "guides/aws/decommission"
- ]
-}
\ No newline at end of file
diff --git a/docs/guides/azure/azure-sidebar.json b/docs/guides/azure/azure-sidebar.json
deleted file mode 100644
index bda4befb..00000000
--- a/docs/guides/azure/azure-sidebar.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "type": "category",
- "id": "azure",
- "link": "guides/azure",
- "items": [
- {
- "type": "category",
- "id": "import",
- "link": "guides/azure/import",
- "items": [
- "guides/azure/import/tenant",
- "guides/azure/import/active-directory",
- "guides/azure/import/subscription",
- "guides/azure/import/skip-management-groups-and-subscriptions"
- ]
- },
- {
- "type": "category",
- "id": "real-time-events",
- "link": "guides/azure/real-time-events",
- "items": [
- "guides/azure/real-time-events/ad-event-pollers",
- "guides/azure/real-time-events/event-pollers",
- "guides/azure/real-time-events/mgmt-event-pollers",
- "guides/azure/real-time-events/event-handlers"
- ]
- },
- "guides/azure/services",
- "guides/azure/permissions",
- "guides/azure/decommission"
- ]
-}
\ No newline at end of file
diff --git a/docs/guides/gcp/gcp-sidebar.json b/docs/guides/gcp/gcp-sidebar.json
deleted file mode 100644
index 65357e11..00000000
--- a/docs/guides/gcp/gcp-sidebar.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "type": "category",
- "id": "gcp",
- "link": "guides/gcp",
- "items": [
- {
- "type": "category",
- "id": "import",
- "link": "guides/gcp/import-gcp-project",
- "items": ["guides/gcp/import-gcp-project/service-accounts"]
- },
- {
- "type": "category",
- "id": "import-org",
- "link": "guides/gcp/import-gcp-organization",
- "items": [
- "guides/gcp/import-gcp-organization/self-hosted-workspace",
- "guides/gcp/import-gcp-organization/saas-workspace"
- ]
- },
- "guides/gcp/services",
- "guides/gcp/permissions",
- {
- "type": "category",
- "id": "real-time-events",
- "link": "guides/gcp/real-time-events",
- "items": ["guides/gcp/real-time-events/event-pollers"]
- }
- ]
-}
\ No newline at end of file
diff --git a/docs/guides/github/github-sidebar.json b/docs/guides/github/github-sidebar.json
deleted file mode 100644
index 80a49139..00000000
--- a/docs/guides/github/github-sidebar.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "type": "category",
- "id": "github",
- "link": "guides/github",
- "items": [
- "guides/github/import-organization",
- "guides/github/real-time-events",
- "guides/github/remove-organization"
- ]
-}
\ No newline at end of file
diff --git a/docs/guides/using-guardrails/graphql/index.md b/docs/guides/using-guardrails/graphql/index.md
deleted file mode 100644
index dcaacc10..00000000
--- a/docs/guides/using-guardrails/graphql/index.md
+++ /dev/null
@@ -1,325 +0,0 @@
----
-title: GraphQL
-sidebar_label: GraphQL
----
-
-# GraphQL Tips and Best Practices
-
-GraphQL allows for complex queries against the Turbot Guardrails API. Find the
-[GraphQL reference page](reference/graphql) for more information. If you are new
-to GraphQL, check out our [GraphQL 7 minute lab](7-minute-labs/graphql).
-
-## GraphQL best practices
-
-GraphQL queries and mutation have two parts: the query itself and variables.
-
-While it is possible to inline variables into the query, it is best practice to
-keep the query distinct from the variables. Dealing with templates to inject
-variables into a query is messy, especially when GraphQL can do that kind of
-merge for you.
-
-### Bad Query
-
-```graphql
-query Profile {
- resource(id: "joe") {
- data
- metadata
- trunk {
- title
- }
- turbot {
- akas
- id
- tags
- }
- }
-}
-```
-
-Here the date is placed directly inline, making the query less flexible.
-
-### Good Query
-
-Use instead a query with variable input:
-
-```graphql
-query Profile($id: ID!) {
- resource(id: $id) {
- data
- metadata
- trunk {
- title
- }
- turbot {
- akas
- id
- tags
- }
- }
-}
-```
-
-And for this particular query type, you can use variables as follows:
-
-```json
-{
- "id": "joe"
-}
-```
-
-### Expensive Queries
-
-Some queries can become expensive in larger environments. For example,
-metadata.stats.total queries can be expensive in large environments. As an
-alternative method for checking for presence, one might put `limit:1` in the
-[query filter](reference/filter) and replace
-
-```graphql
-{
- metadata {
- stats {
- total
- }
- }
-}
-```
-
-block with
-
-```graphql
-items {
- ...
-}
-```
-
-The advantage of `limit:1` is that Guardrails only needs to grab a single row
-instead of getting all rows to generate the `total`.
-
-## GraphQL and Permission Grants
-
-Administrators can query for all active grants in a Guardrails environment, create
-and activate grants, as well as remove grants all via the GraphQL API.
-
-### Get All Active Grants
-
-To get a straight list of all the controls, you can use the following GraphQL
-query without any variables.
-
-```graphql
-query GetListOfActiveGrants {
- activeGrants {
- items {
- grant {
- roleName
- identity {
- akas
- }
- level {
- title
- parentUri
- }
- }
- resource {
- akas
- }
- turbot {
- id
- }
- }
- }
-}
-```
-
-This will return a list of entries that could be used by Calculated Policies or
-consumed by some other application that can manipulate JSON output.
-
-### Get All Active Grants For A Specific User(s)
-
-You will use the above query but added to this query, we now have introduced a
-variable called `$filter` which will allow us to specify which users we are
-interested in.
-
-```graphql
-query GetListOfActiveGrants($filter: [String!]) {
- activeGrants(filter: $filter) {
- items {
- grant {
- roleName
- identity {
- akas
- }
- level {
- title
- parentUri
- }
- }
- resource {
- akas
- }
- turbot {
- id
- }
- }
- }
-}
-```
-
-If we want to return the results for a single user. We can use that users email
-address which is unique in Guardrails. For example, we want to see all _active_
-grants for user `omero@turbot.com`, we can use the following input:
-
-```json
-{
- "filter": ["profile:omero@turbot.com"]
-}
-```
-
-If we would like to additional users, for example `bob@turbot.com`, you can
-modify the variable as follows:
-
-```json
-{
- "filter": ["profile:omero@turbot.com,bob@turbot.com"]
-}
-```
-
-#### Get Individual Grant
-
-To get a specific grant, you will have to determine the ID of that grant, which
-can be found by listing all the grants and using the `turbot.id` property.
-
-```graphql
-query ActiveGrant($id: ID!) {
- activeGrant(id: $id) {
- validFromTimestamp
- validToTimestamp
- grant {
- identity {
- akas
- }
- level {
- title
- parent
- }
- }
- }
-}
-```
-
-Here, we would like to list the grant that has the the specific id:
-`190591611773680`
-
-```json
-{
- "id": 190591611773680
-}
-```
-
-### Creating Grants
-
-To create grants, one can use the GraphQL mutation `createGrant`. **NOTE** Any
-new grant that you create will have to activated as all grants are created but
-are by default inactive as a safety feature.
-
-```graphql
-mutation CreateGrant($input: CreateGrantInput!) {
- createGrant(input: $input) {
- turbot {
- id
- }
- }
-}
-```
-
-Example input variable for creating grants:
-
-```json
-{
- "input": {
- "type": "tmod:@turbot/aws#/permission/types/aws",
- "level": "tmod:@turbot/turbot-iam#/permission/levels/operator",
- "resource": "tmod:@turbot/turbot#/",
- "identitySearch": {
- "directory": "226714953374521",
- "type": "USER",
- "identity": "eee@jf.turbot.local"
- }
- }
-}
-```
-
-Take note of `turbot.id` as this will be used to activate the grant using the
-activate grant mutation.
-
-Further details on input parameters:
-
-#### type
-
-For AWS grant use the type: tmod:@turbot/aws#/permission/types/aws For GCP grant
-use the type: tmod:@turbot/gcp#/permission/types/gcp For Azure grant use the
-type: tmod:@turbot/azure#/permission/types/azure For Guardrails grant use the type:
-tmod:@turbot/turbot-iam#/permission/types/turbot
-
-#### level
-
-For level user: tmod:@turbot/turbot-iam#/permission/levels/user For level
-operator: tmod:@turbot/turbot-iam#/permission/levels/operator For level admin:
-tmod:@turbot/turbot-iam#/permission/levels/admin For level metadata:
-tmod:@turbot/turbot-iam#/permission/levels/metadata For level owner:
-tmod:@turbot/turbot-iam#/permission/levels/owner For level readonly:
-tmod:@turbot/turbot-iam#/permission/levels/readonly For level superuser:
-tmod:@turbot/turbot-iam#/permission/levels/superuser
-
-#### resource
-
-This is the resource that you want to attach to. You can find the AKA of a
-resource using the Guardrails UI.
-
-For an AWS account the resource AKA is: arn:aws::: For a GCP
-account the resource AKA is:
-gcp://cloudresourcemanager.googleapis.com/projects/ For an Azure
-account the resource AKA is: azure:///subscriptions/ At the
-Turbot level the AKA is: tmod:@turbot/turbot#/
-
-#### identitySearch.directory
-
-This holds the details of the Directory where the Users Profile exists
-
-#### identitySearch.type
-
-This is either `GROUP` or `USER`
-
-#### identitySearch.identity
-
-This is usually the User's email address
-
-### Activate Grants
-
-You can activate grants using the mutation:
-
-```graphql
-mutation ActivateGrant($input: ActivateGrantInput!) {
- activateGrant(input: $input) {
- turbot {
- id
- }
- }
-}
-```
-
-The id of the grant is given when creating the grant. Use this id with the
-property `input.grant`. You will also need to configure at what resource you
-want to activate the grant. This is the same as the `resource` that was used
-when creating the grant.
-
-An example input is as follows
-
-```json
-{
- "input": {
- "grant": "225901139222587",
- "resource": "tmod:@turbot/turbot#/"
- }
-}
-```
diff --git a/docs/guides/using-guardrails/index.md b/docs/guides/using-guardrails/index.md
deleted file mode 100644
index 2dd76510..00000000
--- a/docs/guides/using-guardrails/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Using Guardrails
----
-
-# Using Guardrails
-
-This section provides how-to guides for common tasks.
-
-| Section | Description
-| - | -
-| [AI Tools](guides/using-guardrails/ai-tools) | Learn how to use different AI integration tools and prompts
-| [Console](guides/console) | Navigate the Guardrails Console user interface
-| [GraphQL](guides/graphql) | Tips and Tricks for GraphQL
-| [IAM](guides/iam) | Manage directories, users, and permissions
-| [Stacks](guides/using-guardrails/stacks) | Manage resource configurations using OpenTofu, an open-source implementation of Terraform
-| [Notifications](guides/using-guardrails/notifications) | Manage real-time alerts to be sent about events that occur in your cloud infrastructure
-| [Scheduling](guides/using-guardrails/scheduling) | Manage resource start and stop using custom tags
-| [Nunjucks](guides/nunjucks) | Tips and tricks for using Nunjucks, including troubleshooting
-| [Quick Actions](guides/quick-actions) | Configuration options for Quick Actions
-| [Searching and Filtering](guides/searching-filtering) | Getting started with Filters in Guardrails
-| [Troubleshooting](/guardrails/docs/guides/using-guardrails/troubleshooting) | Learn how to troubleshoot and resolve common issues when using Guardrails.
diff --git a/docs/guides/using-guardrails/stacks/stack-sidebar.json b/docs/guides/using-guardrails/stacks/stack-sidebar.json
deleted file mode 100644
index a7192388..00000000
--- a/docs/guides/using-guardrails/stacks/stack-sidebar.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "type": "category",
- "id": "stacks",
- "link": "guides/using-guardrails/stacks",
- "items": [
- "guides/using-guardrails/stacks/deploy",
- "guides/using-guardrails/stacks/destroy",
- "guides/using-guardrails/stacks/import"
- ]
-}
\ No newline at end of file
diff --git a/docs/guides/using-guardrails/troubleshooting/index.md b/docs/guides/using-guardrails/troubleshooting/index.md
deleted file mode 100644
index f9d740c5..00000000
--- a/docs/guides/using-guardrails/troubleshooting/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Troubleshooting"
-sidebar_label: "Troubleshooting"
----
-
-## Troubleshooting
-
-The following guides will assist with the self-resolution of common problems. If the issue cannot be resolved, the instructions include details on gathering additional information to escalate the matter to Guardrails Support.
-
-- [Access Control Logs](/guardrails/docs/guides/using-guardrails/troubleshooting/access-control-logs)
-- [Fix Invalid Controls](/guardrails/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls)
-- [Resolve Calculated Policy Errors](/guardrails/docs/guides/using-guardrails/troubleshooting/fix-calc-policy-evaluation-errors)
-- [Run Controls Using Scripts](/guardrails/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts)
\ No newline at end of file
diff --git a/docs/guides/hosting-guardrails/FAQ/index.md b/docs/hosting/FAQ/index.md
similarity index 99%
rename from docs/guides/hosting-guardrails/FAQ/index.md
rename to docs/hosting/FAQ/index.md
index 227983f8..7fbc28ff 100644
--- a/docs/guides/hosting-guardrails/FAQ/index.md
+++ b/docs/hosting/FAQ/index.md
@@ -1,5 +1,5 @@
---
-title: "FAQs"
+title: "Hosting FAQs"
template: Documentation
nav:
order: 80
@@ -446,7 +446,7 @@ be done via the Turbot Service Catalog portfolio.
`Workspace Usage`.
7. Click the `Turbot > Workspace > Usage` option.
-
+
8. On the **Control Type** page, click the **Controls** tab under the control
type name. Click the `Turbot > Workspace > Usage` control.
diff --git a/docs/guides/hosting-guardrails/FAQ/workspace-usage.png b/docs/hosting/FAQ/workspace-usage.png
similarity index 100%
rename from docs/guides/hosting-guardrails/FAQ/workspace-usage.png
rename to docs/hosting/FAQ/workspace-usage.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-api-gateway.png b/docs/hosting/architecture/architecture-api-gateway.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-api-gateway.png
rename to docs/hosting/architecture/architecture-api-gateway.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-event-handling.png b/docs/hosting/architecture/architecture-event-handling.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-event-handling.png
rename to docs/hosting/architecture/architecture-event-handling.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-event-monitor.png b/docs/hosting/architecture/architecture-event-monitor.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-event-monitor.png
rename to docs/hosting/architecture/architecture-event-monitor.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-hosted.png b/docs/hosting/architecture/architecture-hosted.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-hosted.png
rename to docs/hosting/architecture/architecture-hosted.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-networking.png b/docs/hosting/architecture/architecture-networking.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-networking.png
rename to docs/hosting/architecture/architecture-networking.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-ooda-loop.png b/docs/hosting/architecture/architecture-ooda-loop.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-ooda-loop.png
rename to docs/hosting/architecture/architecture-ooda-loop.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-saas.png b/docs/hosting/architecture/architecture-saas.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-saas.png
rename to docs/hosting/architecture/architecture-saas.png
diff --git a/docs/guides/hosting-guardrails/architecture/architecture-versioning.png b/docs/hosting/architecture/architecture-versioning.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/architecture-versioning.png
rename to docs/hosting/architecture/architecture-versioning.png
diff --git a/docs/guides/hosting-guardrails/architecture/index.md b/docs/hosting/architecture/index.md
similarity index 90%
rename from docs/guides/hosting-guardrails/architecture/index.md
rename to docs/hosting/architecture/index.md
index e68e8763..69dffc0c 100644
--- a/docs/guides/hosting-guardrails/architecture/index.md
+++ b/docs/hosting/architecture/index.md
@@ -11,7 +11,7 @@ Turbot Guardrails is a comprehensive governance platform that automates the disc
Its architecture is centered around a core event loop called the **OODA loop**:
-
+
* **Observe:** Monitor changes across your organization's cloud service providers.
* **Orient:** Record all governed resources in the Guardrails CMDB, enriching them with metadata for context.
@@ -20,16 +20,16 @@ Its architecture is centered around a core event loop called the **OODA loop**:
Guardrails continuously monitors real-time change events occurring at the cloud service providers without hindering the agility of application teams. This real-time monitoring enables Guardrails to identify configuration errors stemming from both human actions and automated processes, including intentional misconfigurations by individuals with elevated privileges.
-
+
## Deployment Options
Organizations have two primary options for deploying Turbot Guardrails:
1. **Turbot Guardrails SaaS:** This option leverages the software-as-a-service offering of Turbot Guardrails.
-
+
2. **Turbot Guardrails Enterprise:** This option allows organizations to deploy Turbot Guardrails within their own AWS account and VPC.
-
+
## Guardrails Hosted Deployment Architecture
@@ -47,7 +47,7 @@ Key aspects of the deployment architecture include:
Turbot Guardrails Enterprise is engineered for secure deployment across diverse enterprise VPC configurations. This adaptability ranges from a simple public subnet with an internet gateway (IGW) to a multi-AZ, three-tier VPC (database, application, web) operating in private network space and utilizing centralized outbound network connectivity (through a transit gateway or proxy).
-
+
The most common enterprise network topology typically requires the following network configurations:
@@ -58,11 +58,11 @@ The most common enterprise network topology typically requires the following net
## Real-time Event Architecture
-
+
In a private VPC deployment, Guardrails utilizes the AWS API Gateway service to receive external events from cloud service providers. The API gateway is configured to accept only properly signed events and does not expose any data externally.
-
+
Key characteristics of the API gateway configuration:
@@ -85,7 +85,7 @@ Security Measures:
## Application Architecture
-
+
The logical components of the architecture are deployed and managed independently to maintain separation of concerns and provide flexibility in deployment scenarios. The application layer comprises four key layers:
diff --git a/docs/guides/hosting-guardrails/architecture/logical-architecture.png b/docs/hosting/architecture/logical-architecture.png
similarity index 100%
rename from docs/guides/hosting-guardrails/architecture/logical-architecture.png
rename to docs/hosting/architecture/logical-architecture.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/architecture-options/index.md b/docs/hosting/disaster-recovery/architecture-options/index.md
similarity index 92%
rename from docs/guides/hosting-guardrails/disaster-recovery/architecture-options/index.md
rename to docs/hosting/disaster-recovery/architecture-options/index.md
index 9ce0ec5b..9b1a58f8 100644
--- a/docs/guides/hosting-guardrails/disaster-recovery/architecture-options/index.md
+++ b/docs/hosting/disaster-recovery/architecture-options/index.md
@@ -58,7 +58,7 @@ This deployment option is appropriate for non-production and development workspa
This is the lowest cost infrastructure deployment option available.
-
+
This deployment uses one primary RDS instance without a failover configuration. Recovery can be performed from RDS point-in-time backups.
@@ -68,7 +68,7 @@ This deployment uses one primary RDS instance without a failover configuration.
This deployment option is appropriate for all production usage. It is the most cost-effective deployment option for production use cases and has the capability to achieve 4hr RPO/RTO in all circumstances except the loss of an entire AWS Region.
-
+
The changes in this deployment vs the **Tier 1 DR** architecture are:
@@ -83,7 +83,7 @@ The changes in this deployment vs the **Tier 1 DR** architecture are:
This deployment option is appropriate when regulatory requirements demand that a multi-region solution be implemented, or when requirements drive less than a 4hr RTO/RPO. It has the benefit of being resilient to the loss of an entire AWS Region.
-
+
The key difference between this deployment is that a second Turbot Guardrails deployment is created in the standby region. The compute cluster will be set to be dormant, and no inbound events will be received by the cluster. On declaration of a disaster, DNS will be changed to send events to this region, while the database is recovered from a cross region RDS snapshot. Once the DB is recovered, the workspace is enabled, and events will start processing from the queue.
@@ -97,6 +97,6 @@ The **Tier 4** deployment option should be considered for any organization with
In normal day to day operation, both environments consume cloud events and maintain independent CMDB databases. This pattern results in both doubling the infrastructure and per control usage costs for Guardrails if employed.
-
+
Care must be made in this configuration to ensure that policy packs and account onboarding/offboarding is done across both environments in tandem, using the Guardrails Terraform provider to maintain consistency between the deployments. Custom scripting may be necessary to periodically check to ensure both environments are identical in configuration, to meet your organizations DR requirements.
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-1.png b/docs/hosting/disaster-recovery/architecture-options/tier-1.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-1.png
rename to docs/hosting/disaster-recovery/architecture-options/tier-1.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-2.png b/docs/hosting/disaster-recovery/architecture-options/tier-2.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-2.png
rename to docs/hosting/disaster-recovery/architecture-options/tier-2.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-3.png b/docs/hosting/disaster-recovery/architecture-options/tier-3.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-3.png
rename to docs/hosting/disaster-recovery/architecture-options/tier-3.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-4.png b/docs/hosting/disaster-recovery/architecture-options/tier-4.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/architecture-options/tier-4.png
rename to docs/hosting/disaster-recovery/architecture-options/tier-4.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade-storage-optimization/index.md b/docs/hosting/disaster-recovery/database-upgrade-storage-optimization/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade-storage-optimization/index.md
rename to docs/hosting/disaster-recovery/database-upgrade-storage-optimization/index.md
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/ec2-connect-bastion-host.png b/docs/hosting/disaster-recovery/database-upgrade/ec2-connect-bastion-host.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/ec2-connect-bastion-host.png
rename to docs/hosting/disaster-recovery/database-upgrade/ec2-connect-bastion-host.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/index.md b/docs/hosting/disaster-recovery/database-upgrade/index.md
similarity index 90%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/index.md
rename to docs/hosting/disaster-recovery/database-upgrade/index.md
index 5b0b09fa..da6a140d 100644
--- a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/index.md
+++ b/docs/hosting/disaster-recovery/database-upgrade/index.md
@@ -38,19 +38,19 @@ The activities are performed in the Turbot Guardrails hosting AWS account.
Select the origin(source) database instance.
-
+
Navigate to the `Configurations` tab and select the **DB instance parameter group**.
-
+
Select **Edit**.
-
+
Set `rds.logical_replication` to **1**. Select **Save Changes**.
-
+
### Pause Events
@@ -65,7 +65,7 @@ Set `rds.logical_replication` to **1**. Select **Save Changes**.
### Reboot DB Instance
-
+
> [!WARNING]
> During the database reboot, users will experience a brief service interruption lasting approximately 1 minutes or less. Please plan this maintenance window accordingly.
@@ -80,12 +80,12 @@ Deploy a new TED instance to create a new database that will serve as the target
Navigate to AWS Service Catalog console and deploy a new TED. Follow the instruction provided in [Install Turbot Guardrails Enterprise Database (TED)](/guardrails/docs/guides/hosting-guardrails/installation/install-ted) product.
-
+
For example, if your original source database is named `turbot-einstein`, name the new one as `turbot-einstein-green` (using the `-green` suffix). This suffix helps identify the new instance during the upgrade process. Set the Version parameter to 1.45.0 or higher.
-
+
### In case of **DB engine upgrade**
@@ -95,7 +95,7 @@ If performing a database version upgrade e.g. migrating to PostgreSQL v16.x, use
> [!IMPORTANT]
> This guide assumes you are not using read replicas. For environments with read replicas enabled, additional steps may be required. Please contact Turbot Support for assistance.
-
+
### In case of **Storage Optimization**
@@ -103,11 +103,11 @@ If performing a database version upgrade e.g. migrating to PostgreSQL v16.x, use
Set the allocated storage to match the current disk usage using the `Allocated Storage in GB` parameter (e.g., if 210 GB out of 500 GB is used, set it to 210 GB) and define the `Maximum Allocated Storage limit in GB` to a suitable value, both located under the `Database - Advanced - Storage` section; use the `FreeStorageSpace` metric to determine the size.
-
+
Set the encryption by configuring the `Custom Hive Key` parameter to use the original KMS key under the `Advanced - Infrastructure` section. This should be the Key ID, typically formatted as: `1111233-abcd-4444-2322-123456789012`.
-
+
Keep all other values unchanged.
@@ -121,15 +121,15 @@ Set the master password for both the DB instances via the AWS console.
Select the `source` DB instance and choose **Modify**.
-
+
Provide the master password
-
+
Select **Modify DB Instance** and apply the changes.
-
+
Apply the same changes to the `target` DB.
@@ -148,7 +148,7 @@ Create a Bastion using the [CloudFormation Template](https://github.com/turbot/g
Connect to the newly created Bastion Host
-
+
## Step 5: Install PostgreSQL Client
@@ -202,7 +202,7 @@ export SOURCE=
export TARGET=
export PGPASSWORD=
```
-
+
## Step 8: Create Publisher and Replication Slot in Source DB Instance
@@ -470,11 +470,11 @@ After proper validation of data consistencies, it's time to interchange the DB n
Rename the original (source) instance by appending -blue to its name e.g. from `turbot-einstein` to `turbot-einstein-blue`.
-
+
Rename the new target instance by removing the -green suffix e.g. from `turbot-einstein-green` to `turbot-einstein`.
-
+
At this stage the workspace is now pointing to the new target DB with the earlier used RDS DB instance endpoint.
@@ -491,13 +491,13 @@ It's important to update the original TED stack e.g. (`ted-einstein`) with param
Refer the parameters used in [Step 2: Provision New Database Instance](#in-case-of-db-engine-upgrade)
-
+
### Execute `green<>blue` Deployment
This will reset the master password along with other applicable parameters.
-
+
## Step 16: Run Smoke Tests
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-db-engine-upgrade.png b/docs/hosting/disaster-recovery/database-upgrade/rds-db-engine-upgrade.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-db-engine-upgrade.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-db-engine-upgrade.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-endpoint.png b/docs/hosting/disaster-recovery/database-upgrade/rds-endpoint.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-endpoint.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-endpoint.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-new-reboot.png b/docs/hosting/disaster-recovery/database-upgrade/rds-new-reboot.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-new-reboot.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-new-reboot.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-parameter-group-edit.png b/docs/hosting/disaster-recovery/database-upgrade/rds-parameter-group-edit.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-parameter-group-edit.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-parameter-group-edit.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-rename-new-instance-remove-green.png b/docs/hosting/disaster-recovery/database-upgrade/rds-rename-new-instance-remove-green.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-rename-new-instance-remove-green.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-rename-new-instance-remove-green.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-rename-original-instance-append-blue.png b/docs/hosting/disaster-recovery/database-upgrade/rds-rename-original-instance-append-blue.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-rename-original-instance-append-blue.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-rename-original-instance-append-blue.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-dbinstance-parameter-group.png b/docs/hosting/disaster-recovery/database-upgrade/rds-select-dbinstance-parameter-group.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-dbinstance-parameter-group.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-select-dbinstance-parameter-group.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-modify-dbinstance-new.png b/docs/hosting/disaster-recovery/database-upgrade/rds-select-modify-dbinstance-new.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-modify-dbinstance-new.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-select-modify-dbinstance-new.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-modify-dbinstance.png b/docs/hosting/disaster-recovery/database-upgrade/rds-select-modify-dbinstance.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-modify-dbinstance.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-select-modify-dbinstance.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-modify.png b/docs/hosting/disaster-recovery/database-upgrade/rds-select-modify.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-modify.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-select-modify.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-source-database.png b/docs/hosting/disaster-recovery/database-upgrade/rds-select-source-database.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-select-source-database.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-select-source-database.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-set-logical-replication-group.png b/docs/hosting/disaster-recovery/database-upgrade/rds-set-logical-replication-group.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-set-logical-replication-group.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-set-logical-replication-group.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-update-master-password-new.png b/docs/hosting/disaster-recovery/database-upgrade/rds-update-master-password-new.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-update-master-password-new.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-update-master-password-new.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-update-master-password.png b/docs/hosting/disaster-recovery/database-upgrade/rds-update-master-password.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/rds-update-master-password.png
rename to docs/hosting/disaster-recovery/database-upgrade/rds-update-master-password.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-blue-green-deployment.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-blue-green-deployment.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-blue-green-deployment.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-blue-green-deployment.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-launch-product-ted.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-launch-product-ted.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-launch-product-ted.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-launch-product-ted.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-naming-version.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-naming-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-naming-version.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-naming-version.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-rename-blue.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-rename-blue.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-rename-blue.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-rename-blue.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-set-encryption.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-set-encryption.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-set-encryption.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-set-encryption.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-storage-allocation-new.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-storage-allocation-new.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-storage-allocation-new.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-storage-allocation-new.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-storage-allocation.png b/docs/hosting/disaster-recovery/database-upgrade/service-catalog-storage-allocation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/database-upgrade/service-catalog-storage-allocation.png
rename to docs/hosting/disaster-recovery/database-upgrade/service-catalog-storage-allocation.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/restore-workspace/dr-testing-original.md b/docs/hosting/disaster-recovery/dr-testing/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/restore-workspace/dr-testing-original.md
rename to docs/hosting/disaster-recovery/dr-testing/index.md
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/hive-restore/index.md b/docs/hosting/disaster-recovery/hive-restore/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/hive-restore/index.md
rename to docs/hosting/disaster-recovery/hive-restore/index.md
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/index.md b/docs/hosting/disaster-recovery/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/index.md
rename to docs/hosting/disaster-recovery/index.md
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/add-domain-name-old.png b/docs/hosting/disaster-recovery/multi-region-deployment/add-domain-name-old.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/add-domain-name-old.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/add-domain-name-old.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/add-domain-name.png b/docs/hosting/disaster-recovery/multi-region-deployment/add-domain-name.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/add-domain-name.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/add-domain-name.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/configure-api-mappings.png b/docs/hosting/disaster-recovery/multi-region-deployment/configure-api-mappings.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/configure-api-mappings.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/configure-api-mappings.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/enable-crossregion-replication-details.png b/docs/hosting/disaster-recovery/multi-region-deployment/enable-crossregion-replication-details.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/enable-crossregion-replication-details.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/enable-crossregion-replication-details.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/enable-crossregion-replication.png b/docs/hosting/disaster-recovery/multi-region-deployment/enable-crossregion-replication.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/enable-crossregion-replication.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/enable-crossregion-replication.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/index-original.md b/docs/hosting/disaster-recovery/multi-region-deployment/index-original.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/index-original.md
rename to docs/hosting/disaster-recovery/multi-region-deployment/index-original.md
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/index.md b/docs/hosting/disaster-recovery/multi-region-deployment/index.md
similarity index 93%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/index.md
rename to docs/hosting/disaster-recovery/multi-region-deployment/index.md
index 51e2b350..b57a0ce0 100644
--- a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/index.md
+++ b/docs/hosting/disaster-recovery/multi-region-deployment/index.md
@@ -36,7 +36,7 @@ The **Tier 3** architecture enhances resilience by deploying a standby environme
### Architecture
-
+
### Prerequisites
@@ -118,14 +118,14 @@ The primary and DR regions share identical configuration settings except for a f
5. Enable cross-region replication, select DR region, set retention, and select the KMS key.
6. Save and verify replication under the **Replicated** tab.
-
+
7. Destination Region: Select the 'DR region'.
8. Replicated backup retention period: Choose the appropriate retention period in days.
9. AWS KMS Key: Select the encryption key used for the Turbot database in the DR region. Typically, this follows the format `turbot_databasename` (e.g. turbot-babbage).
10. Validate the KMS Key ID: Navigate to the KMS service in the DR region to confirm the correct key.
-
+
Select **Save** and navigate to the `Replicated` tab and verify that the database is listed under `Replicated backups`.
@@ -154,12 +154,12 @@ To ensure seamless failover in the DR region, you need to configure the `API Gat
Select **Add domain name** to finalize the setup.
-
+
9. Once created, navigate to the `Custom domain name` settings and open the `API mappings` tab.
10. Click on **Configure API mappings**, then select **Add new mapping**.
-
+
11. Configure API mappings for `turbot-api` and in `Stage` choose `turbot`.
12. Apply changes by selecting **Save**
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/manage-crossregion-replication.png b/docs/hosting/disaster-recovery/multi-region-deployment/manage-crossregion-replication.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/manage-crossregion-replication.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/manage-crossregion-replication.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/tier-3.png b/docs/hosting/disaster-recovery/multi-region-deployment/tier-3.png
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-deployment/tier-3.png
rename to docs/hosting/disaster-recovery/multi-region-deployment/tier-3.png
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-failover/index-original.md b/docs/hosting/disaster-recovery/multi-region-failover/index-original.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-failover/index-original.md
rename to docs/hosting/disaster-recovery/multi-region-failover/index-original.md
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/multi-region-failover/index.md b/docs/hosting/disaster-recovery/multi-region-failover/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/multi-region-failover/index.md
rename to docs/hosting/disaster-recovery/multi-region-failover/index.md
diff --git a/docs/hosting/disaster-recovery/restore-workspace/dr-testing-original.md b/docs/hosting/disaster-recovery/restore-workspace/dr-testing-original.md
new file mode 100644
index 00000000..92269201
--- /dev/null
+++ b/docs/hosting/disaster-recovery/restore-workspace/dr-testing-original.md
@@ -0,0 +1,144 @@
+---
+title: "DR Testing"
+sidebar_label: "DR Testing"
+---
+
+# Disaster Recovery - Workspace Restoration
+
+An essential part of maintaining Turbot Guardrails is testing disaster recovery. This
+document covers the process for restoring a destroyed workspace. Restoration
+should be tested on at least yearly, ideally twice a year. The goal is to have
+Guardrails Application Admins familiar with the process of restoration and the tools
+involved. The scenario described below is for a brand new workspace. The DB
+schema size will be very small and the time to restore is only a few minutes.
+The same backup/restore process can be used to discover RTO for full-sized
+production workspaces.
+
+Losing and restoring a workspace is just one of possible disaster recovery
+scenarios. As a part of enterprise disaster readiness, please evaluate other
+scenarios.
+
+## Target Audience
+
+**Guardrails Application Operators**: Administrators should have experience in AWS
+cloud infrastructure management and the Guardrails installation process. Prior
+experience with database recovery & restoration processes is very helpful.
+
+## Process Overview
+
+1. **Build New Workspace**: Build a completely new workspace instead of breaking
+ an existing one. Finish the workspace initial setup then take a manual
+ database snapshot or wait for the automated backups to trigger. A current RDS
+ backup is required for the testing process.
+
+2. **Drop the workspace**: Initiate the disaster by destroying the Workspace
+ Cloudformation stack.
+
+3. **Restore Workspace**: Extract the workspace from the backup then restore it.
+ The restore involves creating a temporary database, restore a single
+ workspace to the actual database. Drop the temp database after the successful
+ restore exercise.
+
+4. **Validate Restoration**: Log back into the workspace then verify that
+ restoration was successful.
+
+## Setup - Build New Workspace
+
+In the setup phase, create a workspace and install the baseline mods. After mod
+installation then import an account with Event Pollers. While the directions are
+for an AWS Account, the same process of mod installation and cloud account
+import holds true for Azure and GCP too.
+
+This process assumes that Route53 is used for DNS. Customers with manually
+configured DNS will need to keep track of their configuration.
+
+1. Pick or install a TE version in the workspace that is dedicated for this
+ test. As we will flush the ECS containers just after the restore, this can
+ cause brief outages for all workspaces utilizing the designated TE version.
+2. If there are more than one workspace running on TE version, then make sure to
+ pause the events from processing. Please refer to the
+ [instructions](enterprise/FAQ/pause-events) on how to pause the events from
+ processing.
+3. Navigate to the alpha region of the AWS Master account of Guardrails
+ Installation.
+4. Create a workspace using the steps outlined
+ [here](enterprise/installation/workspace-manager#create-a-workspace). Save
+ the copy of the parameters used to create the workspace. These will be needed
+ again in the restoration step.
+5. Save the credentials from the Cloud Formation Stack's output section.
+6. Note down the Turbot ID of the workspace Turbot Root(tmod:@turbot/turbot#/).
+7. Install the following basic AWS mods which support AWS account import and
+ Event Polling.
+
+- aws
+- aws-iam
+- aws-kms
+- aws-s3
+
+8. Create a Folder under the Turbot Root. Let us call it "AWS" and import an AWS
+ account under it.
+9. Make sure there are no controls/policies in `tbd` state.
+10. Capture a few screenshots of the workspace and some stats like the number of
+ resources, active controls etc. This information will be used later to
+ verify the restoration process. We expect to see the same stats after the
+ restore is done.
+11. Wait for the "Restore to point in time" backup to be available or take a
+ manual backup if needed.
+
+## Disaster - Drop the Workspace
+
+1. Drop the workspace by deleting the Workspace Cloud Formation stack created
+ above. DO NOT DELETE A PRODUCTION WORKSPACE Cloudformation Stack.
+2. Force delete the workspace if needed.
+3. You should no longer to able to access the workspace URL or login to the
+ workspace at this point.
+
+## Restore - Get the Workspace Back
+
+We will recreate a workspace. This will create a DB schema in the database. Our
+aim is to restore this (almost) empty schema with the data from backup.
+
+1. Time how long the restore activities take in further steps as these help you
+ determine your Recovery Time Objective (RTO).
+2. Recreate the workspace using the Workspace CloudFormation
+ [template](enterprise/installation/workspace-manager#sample-workspace-manager-cloudformation-template).
+ Use the same parameter values as the original workspace.
+3. Navigate to RDS, restore the database from the snapshot or by using the
+ "Restore to point in time". Make sure the configurations of the restored
+ database match those of the original database.
+4. Once the temp DB is created from the snapshot, note the endpoint.
+5. Launch a
+ [Turbot Bastion Host](https://github.com/turbot/guardrails-samples/tree/main/enterprise_installation/turbot_bastion_host).
+6. Run the
+ [migration script](https://github.com/turbot/guardrails-samples/tree/main/guardrails_utilities/turbot_schema_migration)
+ which will copy the DB schema from the restored database to the actual
+ database.
+
+```shell
+nohup ./migration.sh &
+
+example: nohup ./migration.sh panda turbot-panda.abcxyzabcxyz.us-east-1.rds.amazonaws.com turbot-babbage.abcxyzabcxyz.us-east-1.rds.amazonaws.com &
+```
+
+6. Wait for the pg_dump and pg_restore process in `migration.sh` to complete.
+7. Flush the ECS containers of the DR TE version
+8. Navigate to the ECS console, select the cluster and open the `Tasks` sub tab.
+9. Search for the TE version to list all the tasks related to the TE version.
+10. Stop these tasks.
+11. Clear the workspace from Redis: Log back into the bastion host and execute
+ the below.
+
+```shell
+export REDISHOST=master.turbot-babbage-cache-cluster.abcxyz.use1.cache.amazonaws.com
+redis-cli -h $REDISHOST --tls -p 6379 -a KEYS "*" | xargs redis-cli -h $REDISHOST --tls -p 6379 -a DEL
+
+example: redis-cli -h $REDISHOST --tls -p 6379 -a mysecurepassword KEYS "panda*" | xargs redis-cli -h $REDISHOST --tls -p 6379 -a mysecurepassword DEL
+```
+
+## Validate - Everything is All Right
+
+1. You should be able to login to the workspace with the old credentials.
+2. Verify the number of resources and controls in the account.
+3. Creating an S3 bucket and verify that it appears in the Guardrails console.
+4. Verify that controls run properly. All controls on the bucket should be in
+ `ok` or `skipped. Investigate any errors.
diff --git a/docs/guides/hosting-guardrails/disaster-recovery/restore-workspace/index.md b/docs/hosting/disaster-recovery/restore-workspace/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/disaster-recovery/restore-workspace/index.md
rename to docs/hosting/disaster-recovery/restore-workspace/index.md
diff --git a/docs/guides/hosting-guardrails/index.md b/docs/hosting/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/index.md
rename to docs/hosting/index.md
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/aws-console.png b/docs/hosting/installation/delete-te/aws-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/aws-console.png
rename to docs/hosting/installation/delete-te/aws-console.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/cfn-te-delete-complete.png b/docs/hosting/installation/delete-te/cfn-te-delete-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/cfn-te-delete-complete.png
rename to docs/hosting/installation/delete-te/cfn-te-delete-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/cfn-te-stack-delete-progress.png b/docs/hosting/installation/delete-te/cfn-te-stack-delete-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/cfn-te-stack-delete-progress.png
rename to docs/hosting/installation/delete-te/cfn-te-stack-delete-progress.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/index.md b/docs/hosting/installation/delete-te/index.md
similarity index 74%
rename from docs/guides/hosting-guardrails/installation/delete-te/index.md
rename to docs/hosting/installation/delete-te/index.md
index bcc638a7..ce700060 100644
--- a/docs/guides/hosting-guardrails/installation/delete-te/index.md
+++ b/docs/hosting/installation/delete-te/index.md
@@ -24,39 +24,39 @@ Deleting old [Turbot Guardrails Enterprise (TE)](/guardrails/docs/reference/glos
Open the AWS Console and navigate to the Service Catalog service in the region where TE is deployed.
-
+
## Step 2: Navigate Provisioned Products
Choose **Provisioned Products** from the left navigation menu.
-
+
## Step 3: View Provisioned Products
Change the **Access Filter** in AWS Service Catalog from **User** to **Account** to view all TE provisioned products across the entire account.
-
+
## Step 4: Select Provisioned Product
Select the TE provisioned product from the list to be deleted.
-
+
## Step 5: Delete the TE Version
Select **Actions** and choose **Terminate**.
-
+
To confirm termination, type `terminate` in the confirmation field and ensure the `Ignore errors (optional)` checkbox remains unchecked.
-
+
When the dialog box shows `Service Catalog is terminating TE` select **Close** and allow the process to continue.
-
+
> [!NOTE] Deletion can take an extended period of time (15 plus minutes).
@@ -66,21 +66,21 @@ You have initiated the deletion of the TE version. This triggers deletion of sev
Select the TE Provisioned Product, select the **Outputs** tab, and use the **CloudFormationStackARN** **Value** link to navigate to the CloudFormation stack and monitor the deletion progress.
-
+
The TE CloudFormation stack status should change to `DELETE_IN_PROGRESS` indicating the delete process is in progress.
-
+
## Step 7: Review
- [ ] The TE CloudFormation stack status should change to `DELETE_COMPLETE` indicating the deletion completed successfully.
-
+
- [ ] The TE Provisioned Product should no longer appear in the list, and a **Success** message stating `Service Catalog successfully terminated TE` is displayed.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-access-filter.png b/docs/hosting/installation/delete-te/service-catalog-access-filter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-access-filter.png
rename to docs/hosting/installation/delete-te/service-catalog-access-filter.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-navigate-cfn.png b/docs/hosting/installation/delete-te/service-catalog-navigate-cfn.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-navigate-cfn.png
rename to docs/hosting/installation/delete-te/service-catalog-navigate-cfn.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-provisioned-products.png b/docs/hosting/installation/delete-te/service-catalog-provisioned-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-provisioned-products.png
rename to docs/hosting/installation/delete-te/service-catalog-provisioned-products.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-select-provisioned-product-te.png b/docs/hosting/installation/delete-te/service-catalog-select-provisioned-product-te.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-select-provisioned-product-te.png
rename to docs/hosting/installation/delete-te/service-catalog-select-provisioned-product-te.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-terminate-success.png b/docs/hosting/installation/delete-te/service-catalog-terminate-success.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-terminate-success.png
rename to docs/hosting/installation/delete-te/service-catalog-terminate-success.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-terminate-te-confirm-action.png b/docs/hosting/installation/delete-te/service-catalog-terminate-te-confirm-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-terminate-te-confirm-action.png
rename to docs/hosting/installation/delete-te/service-catalog-terminate-te-confirm-action.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-terminate-te-provisioned-product.png b/docs/hosting/installation/delete-te/service-catalog-terminate-te-provisioned-product.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-terminate-te-provisioned-product.png
rename to docs/hosting/installation/delete-te/service-catalog-terminate-te-provisioned-product.png
diff --git a/docs/guides/hosting-guardrails/installation/delete-te/service-catalog-termination-close-action.png b/docs/hosting/installation/delete-te/service-catalog-termination-close-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/delete-te/service-catalog-termination-close-action.png
rename to docs/hosting/installation/delete-te/service-catalog-termination-close-action.png
diff --git a/docs/guides/hosting-guardrails/installation/index.md b/docs/hosting/installation/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/index.md
rename to docs/hosting/installation/index.md
diff --git a/docs/guides/hosting-guardrails/installation/install-te/aws-service-catalog-console.png b/docs/hosting/installation/install-te/aws-service-catalog-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/aws-service-catalog-console.png
rename to docs/hosting/installation/install-te/aws-service-catalog-console.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/cfn-install-te-update-complete.png b/docs/hosting/installation/install-te/cfn-install-te-update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/cfn-install-te-update-complete.png
rename to docs/hosting/installation/install-te/cfn-install-te-update-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/cfn-install-te-update-progress.png b/docs/hosting/installation/install-te/cfn-install-te-update-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/cfn-install-te-update-progress.png
rename to docs/hosting/installation/install-te/cfn-install-te-update-progress.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/index.md b/docs/hosting/installation/install-te/index.md
similarity index 75%
rename from docs/guides/hosting-guardrails/installation/install-te/index.md
rename to docs/hosting/installation/install-te/index.md
index b7ffac1b..4494779f 100644
--- a/docs/guides/hosting-guardrails/installation/install-te/index.md
+++ b/docs/hosting/installation/install-te/index.md
@@ -23,23 +23,23 @@ TE is application layer of a Turbot Guardrails Enterprise deployment. Relies on
Open the AWS Console and navigate to the Service Catalog service in the region to deploy TE.
-
+
## Step 2: Navigate to Products
Select the **Products** section from the left navigation menu.
-
+
Select **Turbot Guardrails Enterprise** from the products list, select **Launch Product**.
-
+
## Step 3: Find Version
Sort the Product versions section by `Created time` (descending) to see the latest available version.
-
+
## Step 4: Name Provisioned Product
@@ -48,19 +48,19 @@ Select the desired TE version under **Product Versions**., then name the provisi
> [!NOTE]
> When selecting a name for the provisioned product, it is common practice to start with “te” and include the version number (e.g., te-5-45-1).
-
+
## Step 5: Verify Parameters
The parameters for the TE product are derived from settings chosen earlier during the TEF install, so it is rare that any of the existing parameter values need to be modified. Unless directed to by Turbot support you may safely scroll to the bottom of the parameter list.
-
+
## Step 6: Launch Product
Select **Launch product**.
-
+
## Step 7: Monitor Installation
@@ -68,21 +68,21 @@ You have initiated the installation of the new TE version. This triggers an upda
Select the TE Provisioned Product, click the **Outputs** tab, and use the **CloudFormationStackARN** **Value** link to navigate to CloudFormation and monitor the install progress.
-
+
The TE CloudFormation stack status should would be `CREATE_IN_PROGRESS` indicating the install process is in progress.
-
+
## Step 8: Review
- [ ] The TE CloudFormation stack status should change to `CREATE_COMPLETE` indicating the installation completed successfully.
-
+
- [ ] The TE `Provisioned product` status should change to `Available`.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-find-te-product-versions.png b/docs/hosting/installation/install-te/service-catalog-find-te-product-versions.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-find-te-product-versions.png
rename to docs/hosting/installation/install-te/service-catalog-find-te-product-versions.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-install-te-navigate-to-cfn.png b/docs/hosting/installation/install-te/service-catalog-install-te-navigate-to-cfn.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-install-te-navigate-to-cfn.png
rename to docs/hosting/installation/install-te/service-catalog-install-te-navigate-to-cfn.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-launch-product-te.png b/docs/hosting/installation/install-te/service-catalog-launch-product-te.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-launch-product-te.png
rename to docs/hosting/installation/install-te/service-catalog-launch-product-te.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-name-provisioned-product.png b/docs/hosting/installation/install-te/service-catalog-name-provisioned-product.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-name-provisioned-product.png
rename to docs/hosting/installation/install-te/service-catalog-name-provisioned-product.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-products.png b/docs/hosting/installation/install-te/service-catalog-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-products.png
rename to docs/hosting/installation/install-te/service-catalog-products.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-te-install-complete.png b/docs/hosting/installation/install-te/service-catalog-te-install-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-te-install-complete.png
rename to docs/hosting/installation/install-te/service-catalog-te-install-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-te-launch-product-action.png b/docs/hosting/installation/install-te/service-catalog-te-launch-product-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-te-launch-product-action.png
rename to docs/hosting/installation/install-te/service-catalog-te-launch-product-action.png
diff --git a/docs/guides/hosting-guardrails/installation/install-te/service-catalog-te-verify-parameters.png b/docs/hosting/installation/install-te/service-catalog-te-verify-parameters.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-te/service-catalog-te-verify-parameters.png
rename to docs/hosting/installation/install-te/service-catalog-te-verify-parameters.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/aws-service-catalog-console.png b/docs/hosting/installation/install-ted/aws-service-catalog-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/aws-service-catalog-console.png
rename to docs/hosting/installation/install-ted/aws-service-catalog-console.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/cfn-ted-create-complete.png b/docs/hosting/installation/install-ted/cfn-ted-create-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/cfn-ted-create-complete.png
rename to docs/hosting/installation/install-ted/cfn-ted-create-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/cfn-ted-create-progress.png b/docs/hosting/installation/install-ted/cfn-ted-create-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/cfn-ted-create-progress.png
rename to docs/hosting/installation/install-ted/cfn-ted-create-progress.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/index.md b/docs/hosting/installation/install-ted/index.md
similarity index 72%
rename from docs/guides/hosting-guardrails/installation/install-ted/index.md
rename to docs/hosting/installation/install-ted/index.md
index ed0bf505..b2f80526 100644
--- a/docs/guides/hosting-guardrails/installation/install-ted/index.md
+++ b/docs/hosting/installation/install-ted/index.md
@@ -23,37 +23,37 @@ TED is the database layer of a Turbot Guardrails Enterprise deployment. Creates
Open the AWS Console and navigate to the Service Catalog service in the region where you wish to install TEF.
-
+
## Step 2: Navigate to Products
Select the **Products** section from the left navigation menu.
-
+
## Step 3: Launch Product
Select **Turbot Guardrails Enterprise Foundation** from the products list, select **Launch Product**.
-
+
## Step 4: Name Provisioned Product
Select a Name for the provisioned project. Typically, this will be "ted".
-
+
## Step 5: Find Version
Sort the Product versions section by **Created time** (descending) to see the latest available version.
-
+
## Step 6: Select Version
Select the desired TED version under **Product Versions**. Usually, you will want the latest version.
-
+
## Step 7: Hive Configuration
@@ -61,7 +61,7 @@ Enter the **Database Hive Name**
Select the **Primary Region**. This is where the primary Database currently resides. If set to empty, Turbot Guardrails will use the Alpha region set by TEF as the database's primary region.
-
+
## Step 7: Database Configuration
@@ -69,7 +69,7 @@ Choose an **Instance Type for DB**. The correct RDS instance type depends on man
Leave the **Primary endpoint** blank because this is the first region being installed. This is field is only needed when adding a replica in an additional region.
-
+
## Step 8: Configure Database - Advanced - High Availability
@@ -77,37 +77,37 @@ Select **Multi-AZ Failover Enabled** settings. If true, and this region includes
Select **Enable Read Replica for this region**. If true, create a read replica for the hive in this region. In production, it's recommended to have a read replica instance in each region where Turbot Guardrails is running (including the region where the primary instance resides).
-
+
## Step 9: Configure Database - Advanced - Engine
Select **DB Engine** as `Postgres` and **DB Engine Parameter Group Family** as postgres15. Then, choose the supported **DB Engine Version** and **Read Replica DB Engine Version** from the dropdown list, and decide whether to enable **Allow major version upgrade** for RDS.
-
+
## Step 10: Configure Database - Advanced - Storage
Select the desired **Storage Type** based on your requirements. If unsure, GP3 is a reliable starting option. If you choose IO1, you'll need to specify the Provisioned IOPS (only applicable to the IO1 type). [Amazon documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-iops) for valid values and rations.
-
+
## Step 11: Configure Database - Advanced - Encryption
In the **Use AWS KMS DB Encryption** field, select either aws/rds to use the predefined AWS KMS key for RDS, or Hive CMK to create a customer-managed key specific to the hive (which is typically more secure and recommended). Similarly select the **Encryption method for Redis**.
-
+
## Step 12: Configure Database - Advanced - Authentication
The **Master User Name for DB** defaults to "master", leave the **MasterPassword** field blank if running TED for the first time, and later update it directly on the database if needed, then update the TED stack with the custom password; alternatively, you can choose to **Use AWS IAM for DB Access**, which is recommended as it eliminates the need to store or rotate secrets.
-
+
## Step 13: Configure Database - Advanced - Backup & Snapshots
It is recommended to enable **Deletion Protection** to protect database resources from deletion, by explicitly setting it to false. You may also set the Backup Retention Period to specify how many days automated backups will be retained, and choose whether to **Delete Automated Backups** when the primary instance is deleted (the recommended value is false).
-
+
## Step 14: Configure Database - Advanced - Logging
@@ -115,19 +115,19 @@ Select the **Type of Statements to be Logged** and set the **Minimum Duration fo
Enable or Disable **Performance Insights** for your database instances and set the **Maximum Concurrent Connections** along with the Alarm and Critical Alarm **Threshold for maximum number of concurrent connections**.
-
+
## Step 15: Configure Cache
Choose to **Use Elasticache** and select the desired values for **ElastiCache Version**, **Cache Node Type** and the **Cache Number Of Nodes**.
-
+
## Step 16: Configure Advanced - Foundation Parameters and Overrides
The Foundation Parameters allow the TED stack to use SSM parameters defined in the TEF stack. You should only change these values if you did not use the default Resource Name Prefix (turbot) in the TEF stack.
-
+
The Foundation Overrides allow you to override values defined in the TEF stack. You will likely want to leave these blank.
@@ -138,13 +138,13 @@ Select a **Resource Name Prefix** which will be added to all Turbot Guardrails r
> [!NOTE]
> It is HIGHLY RECOMMENDED that you use the default prefix! The TEF Stack will export the parameters that you have select to an SSM parameter, and they will use this prefix. Using the default will greatly simplify TE deployments and upgrades.
-
+
## Step 18: Launch Product
Select **Launch product**.
-
+
## Step 19: Monitor Installation
@@ -152,17 +152,17 @@ You have initiated the installation of the new TED version. This triggers an upd
The TED stack should be in the **CREATE_IN_PROGRESS** status.
-
+
## Step 20: Review
- [ ] The TEF CloudFormation stack status should change to `CREATE_COMPLETE` indicating the installation completed successfully.
-
+
- [ ] The TE `Provisioned product` status should change to `Available`.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-find-ted-product-versions.png b/docs/hosting/installation/install-ted/service-catalog-find-ted-product-versions.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-find-ted-product-versions.png
rename to docs/hosting/installation/install-ted/service-catalog-find-ted-product-versions.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-launch-product-ted.png b/docs/hosting/installation/install-ted/service-catalog-launch-product-ted.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-launch-product-ted.png
rename to docs/hosting/installation/install-ted/service-catalog-launch-product-ted.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-name-provisioned-product.png b/docs/hosting/installation/install-ted/service-catalog-name-provisioned-product.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-name-provisioned-product.png
rename to docs/hosting/installation/install-ted/service-catalog-name-provisioned-product.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-products.png b/docs/hosting/installation/install-ted/service-catalog-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-products.png
rename to docs/hosting/installation/install-ted/service-catalog-products.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-select-ted-version.png b/docs/hosting/installation/install-ted/service-catalog-select-ted-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-select-ted-version.png
rename to docs/hosting/installation/install-ted/service-catalog-select-ted-version.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-create-complete.png b/docs/hosting/installation/install-ted/service-catalog-ted-create-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-create-complete.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-create-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-launch-product-action.png b/docs/hosting/installation/install-ted/service-catalog-ted-launch-product-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-launch-product-action.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-launch-product-action.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-adavanced-foundation-parameters.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-adavanced-foundation-parameters.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-adavanced-foundation-parameters.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-adavanced-foundation-parameters.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-advanced-infrastructure.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-advanced-infrastructure.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-advanced-infrastructure.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-advanced-infrastructure.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-cache.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-cache.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-cache.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-cache.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-authentication.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-authentication.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-authentication.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-authentication.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-backup-snapshot.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-backup-snapshot.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-backup-snapshot.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-backup-snapshot.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-encryption.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-encryption.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-encryption.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-encryption.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-engine.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-engine.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-engine.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-engine.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-high-availability.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-high-availability.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-high-availability.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-high-availability.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-logging.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-logging.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-logging.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-logging.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-storage.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-storage.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-advanced-storage.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-advanced-storage.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-configuration.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-configuration.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-database-configuration.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-database-configuration.png
diff --git a/docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-hive-configuration.png b/docs/hosting/installation/install-ted/service-catalog-ted-parameter-hive-configuration.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-ted/service-catalog-ted-parameter-hive-configuration.png
rename to docs/hosting/installation/install-ted/service-catalog-ted-parameter-hive-configuration.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/index.md b/docs/hosting/installation/install-tef/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/index.md
rename to docs/hosting/installation/install-tef/index.md
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/aws-service-catalog-console.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/aws-service-catalog-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/aws-service-catalog-console.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/aws-service-catalog-console.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection-activated.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection-activated.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection-activated.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection-activated.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-edit-termination-protection.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-tef.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-tef.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-tef.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-stack-tef.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-tef-create-complete.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-tef-create-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/cfn-tef-create-complete.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/cfn-tef-create-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/index.md b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/index.md
similarity index 74%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/index.md
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/index.md
index c388eb07..a8c020b7 100644
--- a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/index.md
+++ b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/index.md
@@ -27,37 +27,37 @@ The TEF CloudFormation stack creates and manages the networking and compute comp
Open the AWS Console and navigate to the Service Catalog service in the region where you wish to install TEF.
-
+
## Step 2: Navigate to Products
Select the **Products** section from the left navigation menu.
-
+
## Step 3: Launch Product
Select **Turbot Guardrails Enterprise Foundation** from the products list, select **Launch Product**.
-
+
## Step 4: Name Provisioned Product
Select a Name for the provisioned project. Typically, this will be `tef`.
-
+
## Step 5: Find Version
Sort the Product versions section by **Created time** (descending) to see the latest available version.
-
+
## Step 6: Select Version
Select the desired TEF version under **Product Versions**. Usually, you will want the latest version.
-
+
## Step 7: Configure Installation
@@ -80,7 +80,7 @@ The required parameters for this installation option are as below
> [!IMPORTANT]
> Enter the desired **NAT Gateway High Availability** configuration. For a production deployment, you should choose **Multi-AZ**.
-
+
> [!NOTE]
> Each region must be given a different **Region Code** identifier, allowing the stacks to be automatically coordinated for peering etc. Select "alpha" as the **Region Code** for this first region.
@@ -97,14 +97,14 @@ The Turbot Guardrails Enterprise Foundation setup can use your existing VPC to h
Enter the VPC ID in `VPC`, comma separated list of subnet IDs in` Load Balancer Subnets`, `Application (Turbot Guardrails) Subnets` and in `Database Subnets` fields.
-
+
> [!CAUTION]
> Turbot Guardrails requires outbound https to the Internet from the load balancer and application (Turbot Guardrails) subnets. This can be routed through your proxy if desired. If using a proxy, you must also create VPC endpoints to allow fargate to access ECR API, CloudWatch Logs, ECR DKR and S3 AWS services.
Make appropriate changes for any predefined values for `Load Balancer`, `Proxy`, `Security Groups`, else you can leave then with the default provided values and proceed to `Advanced - ECS EC2 configuration` section.
-
+
## Step 10: Advanced - ECS EC2 Configuration
@@ -113,7 +113,7 @@ By default, support is provided for the `Instance Type for EC2 ECS host` and `AM
> [!NOTE]
> You can choose between `Standard Instances` (powered by Intel/AMD processors with the AMD64 architecture) or `Graviton Instances` (powered by AWS Graviton processors using the ARM64 architecture).
-
+
> [!CAUTION]
> For `Graviton Instances`, ensure that your TE version is at least `5.47.x`.
@@ -125,7 +125,7 @@ You can modify the rest of the parameters as needed, or leave them at their defa
Select **Launch product**.
-
+
## Step 12: Monitor Installation
@@ -133,7 +133,7 @@ You have initiated the installation of the new TEF version. This triggers an upd
The TEF provisioned product should be in the **Under Change** status.
-
+
## Step 13: Enable Termination Protection
@@ -142,29 +142,29 @@ The TEF provisioned product should be in the **Under Change** status.
Select the TEF Provisioned Product, select **Outputs** tab, and use the `CloudFormationStackARN` **Value** link to navigate to the respective CloudFormation stack.
-
+
Select the TEF stack. The description of the correct stack should say **Turbot Guardrails Enterprise Foundation <version>**.
-
+
Select **Edit termination protection** from **Stack actions** dropdown menu.
-
+
Choose `Termination protection` as **Activated** and select **Save**.
-
+
## Step 14: Review
- [ ] The TEF CloudFormation stack status should change to `CREATE_COMPLETE` indicating the installation completed successfully.
-
+
- [ ] The TE `Provisioned product` status should change to `Succeeded`.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-find-tef-product-versions.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-find-tef-product-versions.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-find-tef-product-versions.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-find-tef-product-versions.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-install-ref-navigate-to-cfn.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-install-ref-navigate-to-cfn.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-install-ref-navigate-to-cfn.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-install-ref-navigate-to-cfn.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-install-tef-navigate-to-cfn.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-install-tef-navigate-to-cfn.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-install-tef-navigate-to-cfn.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-install-tef-navigate-to-cfn.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-launch-product-tef.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-launch-product-tef.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-launch-product-tef.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-launch-product-tef.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-name-provisioned-product.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-name-provisioned-product.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-name-provisioned-product.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-name-provisioned-product.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-products.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-products.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-products.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-select-tef-version.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-select-tef-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-select-tef-version.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-select-tef-version.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-default-parameter-sections.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-ecs-host-parameter.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-ecs-host-parameter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-ecs-host-parameter.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-ecs-host-parameter.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-launch-product-action.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-launch-product-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-launch-product-action.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-launch-product-action.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-advanced-scaling.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-advanced-scaling.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-advanced-scaling.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-advanced-scaling.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-release-phase.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-release-phase.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-release-phase.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-release-phase.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation-old.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation-old.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation-old.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation-old.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-installation.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-logging.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-logging.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-logging.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-logging.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-create-in-stack.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-create-in-stack.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-create-in-stack.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-create-in-stack.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-existing-vpc.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-existing-vpc.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-existing-vpc.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-existing-vpc.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-load-balancer.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-load-balancer.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-load-balancer.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-load-balancer.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-predefined.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-predefined.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-predefined.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-predefined.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-proxy.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-proxy.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-proxy.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-proxy.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-security-groups.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-security-groups.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-security-groups.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-network-security-groups.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-succeeded.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-succeeded.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-succeeded.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-succeeded.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-under-change.png b/docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-under-change.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-under-change.png
rename to docs/hosting/installation/install-tef/install-tef-into-existing-vpc/service-catalog-tef-under-change.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/aws-service-catalog-console.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/aws-service-catalog-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/aws-service-catalog-console.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/aws-service-catalog-console.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection-activated.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection-activated.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection-activated.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection-activated.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-stack-edit-termination-protection.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-stack-tef.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-stack-tef.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-stack-tef.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-stack-tef.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-tef-create-complete.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-tef-create-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/cfn-tef-create-complete.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/cfn-tef-create-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/index.md b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/index.md
similarity index 74%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/index.md
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/index.md
index 43cdcb2d..e3bd308e 100644
--- a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/index.md
+++ b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/index.md
@@ -25,37 +25,37 @@ The TEF CloudFormation stack creates and manages the networking and compute comp
Open the AWS Console and navigate to the Service Catalog service in the region where you wish to install TEF.
-
+
## Step 2: Navigate to Products
Select the **Products** section from the left navigation menu.
-
+
## Step 3: Launch Product
Select **Turbot Guardrails Enterprise Foundation** from the products list, select **Launch Product**.
-
+
## Step 4: Name Provisioned Product
Select a Name for the provisioned project. Typically, this will be `tef`.
-
+
## Step 5: Find Version
Sort the Product versions section by **Created time** (descending) to see the latest available version.
-
+
## Step 6: Select Version
Select the desired TEF version under **Product Versions**. Usually, you will want the latest version.
-
+
## Step 7: Configure Installation
@@ -75,7 +75,7 @@ The required parameters for this installation option are as below
> [!IMPORTANT]
> **Manager DNS records in Route 53** It is highly recommended that you allow Turbot to manage DNS records in Route53. If you choose not to do so, you must manually update DNS records every time you install a new version in your workspaces.
-
+
> [!NOTE]
> Each region must be given a different **Region Code** identifier, allowing the stacks to be automatically coordinated for peering etc. Select "alpha" as the **Region Code** for this first region.
@@ -86,7 +86,7 @@ Proceed to `Logging` section leaving the `Turbot Guardrails License Key` field b
Select the desired values for `Turbot Handler Log Retention Days`, `Audit Trail Log Retention Days`, `Turbot Guardrails Process Log Objects Retention Days`, and `Turbot Guardrails Mod Installation Data Retention Days`, or leave them all at their default values.
-
+
## Step 9: Configure Network with New VPC - Created in this Stack
@@ -97,11 +97,11 @@ The Turbot Guardrails Enterprise Foundation setup can create the VPC to host Tur
> Any subnet with an empty CIDR will NOT be created. For each subnet type, there are 3 possible subnets that corresponds to 3 different availability zones. If you wish to create a 2 AZ network, only enter CIDRs for subnets #1 and #2.
> Enter the desired **NAT Gateway High Availability** configuration. For a production deployment, you should choose **Multi-AZ**.
-
+
Keep rest of the parameters for `Load Balancer`, `Proxy`, `Security Groups` at their default values and proceed to `Advanced - ECS EC2 configuration` section.
-
+
## Step 10: Advanced - ECS EC2 Configuration
@@ -110,7 +110,7 @@ By default, support is provided for the `Instance Type for EC2 ECS host` and `AM
> [!NOTE]
> You can choose between `Standard Instances` (powered by Intel/AMD processors with the AMD64 architecture) or `Graviton Instances` (powered by AWS Graviton processors using the ARM64 architecture).
-
+
> [!CAUTION]
> For `Graviton Instances`, ensure that your TE version is at least `5.47.x`.
@@ -122,7 +122,7 @@ You can modify the rest of the parameters as needed, or leave them at their defa
Select **Launch product**.
-
+
## Step 12: Monitor Installation
@@ -130,7 +130,7 @@ You have initiated the installation of the new TEF version. This triggers an upd
The TEF provisioned product should be in the **Under Change** status.
-
+
## Step 13: Enable Termination Protection
@@ -139,29 +139,29 @@ The TEF provisioned product should be in the **Under Change** status.
Select the TEF Provisioned Product, select **Outputs** tab, and use the `CloudFormationStackARN` **Value** link to navigate to the respective CloudFormation stack.
-
+
Select the TEF stack. The description of the correct stack should say **Turbot Guardrails Enterprise Foundation <version>**.
-
+
Select **Edit termination protection** from **Stack actions** dropdown menu.
-
+
Choose `Termination protection` as **Activated** and select **Save**.
-
+
## Step 14: Review
- [ ] The TEF CloudFormation stack status should change to `CREATE_COMPLETE` indicating the installation completed successfully.
-
+
- [ ] The TE `Provisioned product` status should change to `Succeeded`.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-find-tef-product-versions.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-find-tef-product-versions.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-find-tef-product-versions.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-find-tef-product-versions.png
diff --git a/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-install-tef-navigate-to-cfn.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-install-tef-navigate-to-cfn.png
new file mode 100644
index 00000000..29ee05e5
Binary files /dev/null and b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-install-tef-navigate-to-cfn.png differ
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-launch-product-tef.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-launch-product-tef.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-launch-product-tef.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-launch-product-tef.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-name-provisioned-product.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-name-provisioned-product.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-name-provisioned-product.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-name-provisioned-product.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-products.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-products.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-products.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-select-tef-version.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-select-tef-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-select-tef-version.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-select-tef-version.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections-netowrk-opt-b.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-default-parameter-sections.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-ecs-host-parameter.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-ecs-host-parameter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-ecs-host-parameter.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-ecs-host-parameter.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-launch-product-action.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-launch-product-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-launch-product-action.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-launch-product-action.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-advanced-scaling.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-advanced-scaling.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-advanced-scaling.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-advanced-scaling.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-release-phase.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-release-phase.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-release-phase.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-release-phase.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-deployment-resource-name-prefix.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation-old.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation-old.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation-old.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation-old.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-installation.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-logging.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-logging.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-logging.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-logging.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-create-in-stack.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-create-in-stack.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-create-in-stack.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-create-in-stack.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-existing-vpc.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-existing-vpc.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-existing-vpc.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-existing-vpc.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-load-balancer.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-load-balancer.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-load-balancer.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-load-balancer.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-predefined.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-predefined.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-predefined.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-predefined.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-proxy.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-proxy.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-proxy.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-proxy.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-security-groups.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-security-groups.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-security-groups.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-network-security-groups.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-parameter-scaling-target-cpu-utilisation.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-succeeded.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-succeeded.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-succeeded.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-succeeded.png
diff --git a/docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-under-change.png b/docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-under-change.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-under-change.png
rename to docs/hosting/installation/install-tef/install-tef-into-new-vpc/service-catalog-tef-under-change.png
diff --git a/docs/guides/hosting-guardrails/installation/post-installation/create-te-critical-alarms/index.md b/docs/hosting/installation/post-installation/create-te-critical-alarms/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/post-installation/create-te-critical-alarms/index.md
rename to docs/hosting/installation/post-installation/create-te-critical-alarms/index.md
diff --git a/docs/guides/hosting-guardrails/installation/post-installation/create-ted-critical-alarms/index.md b/docs/hosting/installation/post-installation/create-ted-critical-alarms/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/post-installation/create-ted-critical-alarms/index.md
rename to docs/hosting/installation/post-installation/create-ted-critical-alarms/index.md
diff --git a/docs/guides/hosting-guardrails/installation/post-installation/index.md b/docs/hosting/installation/post-installation/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/post-installation/index.md
rename to docs/hosting/installation/post-installation/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/admin-permissions/index.md b/docs/hosting/installation/pre-installation/admin-permissions/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/admin-permissions/index.md
rename to docs/hosting/installation/pre-installation/admin-permissions/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/checklist/index.md b/docs/hosting/installation/pre-installation/checklist/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/checklist/index.md
rename to docs/hosting/installation/pre-installation/checklist/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/cost-estimate/index.md b/docs/hosting/installation/pre-installation/cost-estimate/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/cost-estimate/index.md
rename to docs/hosting/installation/pre-installation/cost-estimate/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/external-role/index.md b/docs/hosting/installation/pre-installation/external-role/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/external-role/index.md
rename to docs/hosting/installation/pre-installation/external-role/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/aws-console-service-catalog.png b/docs/hosting/installation/pre-installation/import-portfolio/aws-console-service-catalog.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/aws-console-service-catalog.png
rename to docs/hosting/installation/pre-installation/import-portfolio/aws-console-service-catalog.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/index.md b/docs/hosting/installation/pre-installation/import-portfolio/index.md
similarity index 84%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/index.md
rename to docs/hosting/installation/pre-installation/import-portfolio/index.md
index 845982c0..842fc6c7 100644
--- a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/index.md
+++ b/docs/hosting/installation/pre-installation/import-portfolio/index.md
@@ -20,43 +20,43 @@ Portfolios provide a collection of products that can be installed and configured
Open the AWS Console and navigate to the Service Catalog service in the region where you wish to import the portfolio.
-
+
## Step 2: Navigate to Portfolios
Select the **Portfolios** section from the left navigation menu.
-
+
Select the **Imported** tab, from **Actions** dropdown, choose **Import portfolio**
-
+
## Step 3: Import Portfolio
Select **AWS account**, enter the **Portfolio ID** and select **Import**. This will import the portfolio into the region where you plan to install. Region wise [Portfolio links](/guardrails/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio#turbot-guardrails-portfolio) are provided below.
-
+
The portfolio should be now visible under **Imported portfolios**.
-
+
## Step 4: Grant Access
Choose the imported portfolio, navigate to the **Access** tab, and select **Grant access**.
-
+
Select **IAM Principal** and choose the appropriate **Roles** to grant access to the portfolio in Service Catalog, enabling users to deploy the products. Finally, select **Grant access**.
-
+
## Step 5: Review
Once the portfolio is imported and access has been granted, you can view and provision Turbot Guardrails products from the Service Catalog **Product** List.
-
+
## Turbot Guardrails Portfolio
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-grant-access-action.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-grant-access-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-grant-access-action.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-grant-access-action.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-import-complete.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-import-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-import-complete.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-import-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-import-portfolio.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-import-portfolio.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-import-portfolio.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-import-portfolio.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-navigate-access.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-navigate-access.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-navigate-access.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-navigate-access.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-products-verify.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-products-verify.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-products-verify.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-products-verify.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-select-import-portfolio.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-select-import-portfolio.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-select-import-portfolio.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-select-import-portfolio.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-select-portfolio.png b/docs/hosting/installation/pre-installation/import-portfolio/service-catalog-select-portfolio.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/import-portfolio/service-catalog-select-portfolio.png
rename to docs/hosting/installation/pre-installation/import-portfolio/service-catalog-select-portfolio.png
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/index.md b/docs/hosting/installation/pre-installation/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/index.md
rename to docs/hosting/installation/pre-installation/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/networking/index.md b/docs/hosting/installation/pre-installation/networking/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/networking/index.md
rename to docs/hosting/installation/pre-installation/networking/index.md
diff --git a/docs/guides/hosting-guardrails/installation/pre-installation/service-catalog/index.md b/docs/hosting/installation/pre-installation/service-catalog/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/pre-installation/service-catalog/index.md
rename to docs/hosting/installation/pre-installation/service-catalog/index.md
diff --git a/docs/guides/hosting-guardrails/installation/te-installation/index.md b/docs/hosting/installation/te-installation/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/te-installation/index.md
rename to docs/hosting/installation/te-installation/index.md
diff --git a/docs/guides/hosting-guardrails/installation/ted-installation/index.md b/docs/hosting/installation/ted-installation/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/ted-installation/index.md
rename to docs/hosting/installation/ted-installation/index.md
diff --git a/docs/guides/hosting-guardrails/installation/tef-installation/index.md b/docs/hosting/installation/tef-installation/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/tef-installation/index.md
rename to docs/hosting/installation/tef-installation/index.md
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-console.png b/docs/hosting/installation/workspace-login/cloudformation-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-console.png
rename to docs/hosting/installation/workspace-login/cloudformation-console.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-created-stack.png b/docs/hosting/installation/workspace-login/cloudformation-created-stack.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-created-stack.png
rename to docs/hosting/installation/workspace-login/cloudformation-created-stack.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-workspace-credentials.png b/docs/hosting/installation/workspace-login/cloudformation-workspace-credentials.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-workspace-credentials.png
rename to docs/hosting/installation/workspace-login/cloudformation-workspace-credentials.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-workspace-url.png b/docs/hosting/installation/workspace-login/cloudformation-workspace-url.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/cloudformation-workspace-url.png
rename to docs/hosting/installation/workspace-login/cloudformation-workspace-url.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/delete-access-key-delete-action.png b/docs/hosting/installation/workspace-login/delete-access-key-delete-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/delete-access-key-delete-action.png
rename to docs/hosting/installation/workspace-login/delete-access-key-delete-action.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/delete-access-key.png b/docs/hosting/installation/workspace-login/delete-access-key.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/delete-access-key.png
rename to docs/hosting/installation/workspace-login/delete-access-key.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/guardrails-console-initial-admin-login.png b/docs/hosting/installation/workspace-login/guardrails-console-initial-admin-login.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/guardrails-console-initial-admin-login.png
rename to docs/hosting/installation/workspace-login/guardrails-console-initial-admin-login.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/index.md b/docs/hosting/installation/workspace-login/index.md
similarity index 74%
rename from docs/guides/hosting-guardrails/installation/workspace-login/index.md
rename to docs/hosting/installation/workspace-login/index.md
index b196efbc..c8985757 100644
--- a/docs/guides/hosting-guardrails/installation/workspace-login/index.md
+++ b/docs/hosting/installation/workspace-login/index.md
@@ -25,13 +25,13 @@ its own set of mods, and its own web console endpoint. Workspaces will use the [
In the AWS Console, navigate to the CloudFormation service in the alpha region.
-
+
## Step 2: Find Workspace Stack
While CloudFormation `Stacks`, search for the stack name and select the stack.
-
+
## Step 3: Access Initial Credentials
@@ -39,11 +39,11 @@ During the Workspace creation, the Workspace Manager generates the initial Turbo
`Console URL` available in the `WorkspaceUrl` **Outputs** variable. Use this `WorkspaceUrl` link to access the web console.
-
+
`Admin Credentials` is displayed in the `WorkspaceManagerOutput` variable in the stack outputs.
-
+
> [!WARNING]
> The username, password, and keys will appear in plain text in the CloudFormation stack output variables. If you re-run the stack, the stack output variables will be overwritten, so it’s important to secure this information immediately after stack creation.
@@ -52,41 +52,41 @@ During the Workspace creation, the Workspace Manager generates the initial Turbo
Login using the generated admin credentials.
-
+
## Step 5: Rotate Initial Password
After successful login to Guardrails console, select to **Profile** in right top corner.
-
+
While in **Turbot Admin** profile, select **Reset Password** to initiate rotate `Password`.
-
+
Guardrails generates an automatic complex password, and when you confirm the rotation by selecting **OK**, the new credentials will be applied.
-
+
## Step 6: Deactivate Access Key
The initial admin login access key created during the workspace creation process remains active. First, `deactivate` the access key.
-
+
Confirm by selecting **Deactivate**.
-
+
## Step 7: Delete Access Key
Once the access key is deactivated, check access key status is shown as `INACTIVE`, select **`X`** to delete.
-
+
Confirm deletion by selecting **Delete** button.
-
+
> [!NOTE]
> New access keys can be created if necessary.
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/workspace-deactivate-access-key-confirm.png b/docs/hosting/installation/workspace-login/workspace-deactivate-access-key-confirm.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/workspace-deactivate-access-key-confirm.png
rename to docs/hosting/installation/workspace-login/workspace-deactivate-access-key-confirm.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/workspace-deactivate-access-key.png b/docs/hosting/installation/workspace-login/workspace-deactivate-access-key.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/workspace-deactivate-access-key.png
rename to docs/hosting/installation/workspace-login/workspace-deactivate-access-key.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/workspace-login.png b/docs/hosting/installation/workspace-login/workspace-login.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/workspace-login.png
rename to docs/hosting/installation/workspace-login/workspace-login.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/workspace-password-rotation-action.png b/docs/hosting/installation/workspace-login/workspace-password-rotation-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/workspace-password-rotation-action.png
rename to docs/hosting/installation/workspace-login/workspace-password-rotation-action.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-login/workspace-password-rotation.png b/docs/hosting/installation/workspace-login/workspace-password-rotation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-login/workspace-password-rotation.png
rename to docs/hosting/installation/workspace-login/workspace-password-rotation.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-console.png b/docs/hosting/installation/workspace-manager/cloudformation-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-console.png
rename to docs/hosting/installation/workspace-manager/cloudformation-console.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-creation-complete.png b/docs/hosting/installation/workspace-manager/cloudformation-creation-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-creation-complete.png
rename to docs/hosting/installation/workspace-manager/cloudformation-creation-complete.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-creation-in-progress.png b/docs/hosting/installation/workspace-manager/cloudformation-creation-in-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-creation-in-progress.png
rename to docs/hosting/installation/workspace-manager/cloudformation-creation-in-progress.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-enable-termination-protection.png b/docs/hosting/installation/workspace-manager/cloudformation-enable-termination-protection.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-enable-termination-protection.png
rename to docs/hosting/installation/workspace-manager/cloudformation-enable-termination-protection.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-submit.png b/docs/hosting/installation/workspace-manager/cloudformation-submit.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-submit.png
rename to docs/hosting/installation/workspace-manager/cloudformation-submit.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-update-parameters.png b/docs/hosting/installation/workspace-manager/cloudformation-update-parameters.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-update-parameters.png
rename to docs/hosting/installation/workspace-manager/cloudformation-update-parameters.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-upload-template.png b/docs/hosting/installation/workspace-manager/cloudformation-upload-template.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-upload-template.png
rename to docs/hosting/installation/workspace-manager/cloudformation-upload-template.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-workspace-credentials.png b/docs/hosting/installation/workspace-manager/cloudformation-workspace-credentials.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-workspace-credentials.png
rename to docs/hosting/installation/workspace-manager/cloudformation-workspace-credentials.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-workspace-url.png b/docs/hosting/installation/workspace-manager/cloudformation-workspace-url.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/cloudformation-workspace-url.png
rename to docs/hosting/installation/workspace-manager/cloudformation-workspace-url.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/github-guardrails-samples-workspace-template-download.png b/docs/hosting/installation/workspace-manager/github-guardrails-samples-workspace-template-download.png
similarity index 100%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/github-guardrails-samples-workspace-template-download.png
rename to docs/hosting/installation/workspace-manager/github-guardrails-samples-workspace-template-download.png
diff --git a/docs/guides/hosting-guardrails/installation/workspace-manager/index.md b/docs/hosting/installation/workspace-manager/index.md
similarity index 88%
rename from docs/guides/hosting-guardrails/installation/workspace-manager/index.md
rename to docs/hosting/installation/workspace-manager/index.md
index 599414a9..ba8aaf4d 100644
--- a/docs/guides/hosting-guardrails/installation/workspace-manager/index.md
+++ b/docs/hosting/installation/workspace-manager/index.md
@@ -25,7 +25,7 @@ which is implemented as a CloudFormation custom resource.
In the AWS Console, navigate to the CloudFormation service in the alpha region.
-
+
## Step 2: Download CloudFormation Template
@@ -38,14 +38,14 @@ This template is available at Guardrails sample repo.
Download the template.
-
+
## Step 3: Create New Stack
Create a new stack, using the **Choose existing template** option by uploading the template file in **Choose file**, provide the [Sample Workspace Manager CloudFormation Template](#sample-workspace-manager-cloudformation-template) previously downloaded.
-
+
## Step 4: Enter Parameters
@@ -60,19 +60,19 @@ Enter the appropriate parameters and select **Next**
| FoundationStackOutputPrefix | This must match the resource prefix that you specified in the Turbot Guardrails Enterprise Foundation stack so that this stack can use exported outputs from the TEF stack. |
| Alternate URL | Provide an alternate URL for the workspace, leave blank if not required. |
-
+
## Step 5: Enable Termination Protection
Turbot recommends enabling **Termination Protection** on the Workspace Manager CloudFormation stack. This can be done at creation by expanding the **Stack creation options** and enabling Termination Protection. This can also be configured post CloudFormation stack deployment. Select the stack while viewing the CloudFormation service in the AWS console, click **Stack actions** in the top right, then click **Edit termination protection**. Set this to `Activated` and select **Save**.
-
+
## Step 6: Complete Stack Creation
Click on **Submit** and wait for the stack creation to complete.
-
+
## Step 7: Login New Workspace
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-console-login.png b/docs/hosting/monitoring/check-mod-health/guardrails-console-login.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-console-login.png
rename to docs/hosting/monitoring/check-mod-health/guardrails-console-login.png
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-mod-health.png b/docs/hosting/monitoring/check-mod-health/guardrails-mod-health.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-mod-health.png
rename to docs/hosting/monitoring/check-mod-health/guardrails-mod-health.png
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-mod-overview.png b/docs/hosting/monitoring/check-mod-health/guardrails-mod-overview.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-mod-overview.png
rename to docs/hosting/monitoring/check-mod-health/guardrails-mod-overview.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-navigate-admin-panel.png b/docs/hosting/monitoring/check-mod-health/guardrails-navigate-admin-panel.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-navigate-admin-panel.png
rename to docs/hosting/monitoring/check-mod-health/guardrails-navigate-admin-panel.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-navigate-mods.png b/docs/hosting/monitoring/check-mod-health/guardrails-navigate-mods.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-navigate-mods.png
rename to docs/hosting/monitoring/check-mod-health/guardrails-navigate-mods.png
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-select-mod.png b/docs/hosting/monitoring/check-mod-health/guardrails-select-mod.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-select-mod.png
rename to docs/hosting/monitoring/check-mod-health/guardrails-select-mod.png
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/index.md b/docs/hosting/monitoring/check-mod-health/index.md
similarity index 83%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/index.md
rename to docs/hosting/monitoring/check-mod-health/index.md
index a6d7ebf9..51f24744 100644
--- a/docs/guides/hosting-guardrails/monitoring/check-mod-health/index.md
+++ b/docs/hosting/monitoring/check-mod-health/index.md
@@ -19,19 +19,19 @@ A [Mod](https://turbot.com/guardrails/docs/reference/glossary#mod) in Guardrails
Log into the Guardrails console with provided local credentials or by using any SAML based login.
-
+
## Step 2: Navigate to Mods
Select **Admin** from the top right corner. Choose **Mods**.
-
+
## Step 3: Select Mod
From the mods list, select the desired mod—for example, the `azure-iam` mod.
-
+
## Step 3: Check Mod Health
@@ -40,11 +40,11 @@ In the **Overview** tab of the mod page, a healthy Mod is indicated by an OK sta
> [!NOTE]
> The health of a mod is determined by its **Installed Control Types**. If any installed control type is in an error state, the mod will be marked as unhealthy and display an **Error** status.
-
+
Alternatively, click on the message to navigate to the Mod Health control and verify its status.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/aws-console-cloudwatch.png b/docs/hosting/monitoring/diagnose-control-error/aws-console-cloudwatch.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/aws-console-cloudwatch.png
rename to docs/hosting/monitoring/diagnose-control-error/aws-console-cloudwatch.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-log-groups-select.png b/docs/hosting/monitoring/diagnose-control-error/cloudwatch-log-groups-select.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-log-groups-select.png
rename to docs/hosting/monitoring/diagnose-control-error/cloudwatch-log-groups-select.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-loggroups-error-details.png b/docs/hosting/monitoring/diagnose-control-error/cloudwatch-loggroups-error-details.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-loggroups-error-details.png
rename to docs/hosting/monitoring/diagnose-control-error/cloudwatch-loggroups-error-details.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-loggroups-search-with-errorid.png b/docs/hosting/monitoring/diagnose-control-error/cloudwatch-loggroups-search-with-errorid.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-loggroups-search-with-errorid.png
rename to docs/hosting/monitoring/diagnose-control-error/cloudwatch-loggroups-search-with-errorid.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-navigate-log-groups.png b/docs/hosting/monitoring/diagnose-control-error/cloudwatch-navigate-log-groups.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-navigate-log-groups.png
rename to docs/hosting/monitoring/diagnose-control-error/cloudwatch-navigate-log-groups.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-select-search-all-log-streams.png b/docs/hosting/monitoring/diagnose-control-error/cloudwatch-select-search-all-log-streams.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/cloudwatch-select-search-all-log-streams.png
rename to docs/hosting/monitoring/diagnose-control-error/cloudwatch-select-search-all-log-streams.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-console-login.png b/docs/hosting/monitoring/diagnose-control-error/guardrails-console-login.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-console-login.png
rename to docs/hosting/monitoring/diagnose-control-error/guardrails-console-login.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-control-error.png b/docs/hosting/monitoring/diagnose-control-error/guardrails-control-error.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-control-error.png
rename to docs/hosting/monitoring/diagnose-control-error/guardrails-control-error.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-expand-error-message.png b/docs/hosting/monitoring/diagnose-control-error/guardrails-expand-error-message.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-expand-error-message.png
rename to docs/hosting/monitoring/diagnose-control-error/guardrails-expand-error-message.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-level-filter.png b/docs/hosting/monitoring/diagnose-control-error/guardrails-level-filter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/guardrails-level-filter.png
rename to docs/hosting/monitoring/diagnose-control-error/guardrails-level-filter.png
diff --git a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/index.md b/docs/hosting/monitoring/diagnose-control-error/index.md
similarity index 65%
rename from docs/guides/hosting-guardrails/monitoring/diagnose-control-error/index.md
rename to docs/hosting/monitoring/diagnose-control-error/index.md
index bc91e592..de035abc 100644
--- a/docs/guides/hosting-guardrails/monitoring/diagnose-control-error/index.md
+++ b/docs/hosting/monitoring/diagnose-control-error/index.md
@@ -19,23 +19,23 @@ When diagnosing error messages in the Guardrails console, control logs typically
Log into the Guardrails console.
-
+
## Step 2: Navigate To Control Error
Navigate to the control in an error state to be investigated. Select **VIEW LOG**.
-
+
## Step 3: View Logs
Select **Debug and above** from the **Level** filter.
-
+
Select the **Internal Error** message to expand it.
-
+
Upon expanding the error, there isn't enough detailed information to determine the root cause, requiring further investigation in the AWS CloudWatch log groups.
@@ -43,25 +43,25 @@ Upon expanding the error, there isn't enough detailed information to determine t
Open the AWS Console and navigate to the CloudWatch service in the region where Guardrails is deployed.
-
+
## Step 5: Navigate to Log Groups
Choose **Log Groups** from the left navigation menu.
-
+
## Step 6: Search Log Group
Search for log groups with a key word based on the workspace version received from [Step 3](#step-3-view-logs), this will render list of matching Log group names with the prefix `/aws/lambda/turbot_` followed by the workspace version
-
+
## Step 7: Select Log Group
Select the worker log group as indicated in the type field from the error log in the Guardrails console. E.g. select `/aws/lambda/turbot_5_47_2_rc_1_worker`. Choose **Search all log steams**.
-
+
## Step 8: Search Error
@@ -70,13 +70,13 @@ Search using the `errorId` from [Step 3](#step-3-view-logs) from the Guardrails
> [!NOTE]
> Ensure to provide the errorId in double quotes e.g. "3423432-dfdsf-3e331-fgdfgd234234"
-
+
## Step 8: Find Error Details
Collapse the search result to view the full error details.
-
+
After reviewing the detailed error message, use the information to identify the root cause and take the necessary corrective actions.
diff --git a/docs/guides/hosting-guardrails/monitoring/index.md b/docs/hosting/monitoring/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/index.md
rename to docs/hosting/monitoring/index.md
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/aws-console-cloudwatch.png b/docs/hosting/monitoring/investigate-event-flood/aws-console-cloudwatch.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/aws-console-cloudwatch.png
rename to docs/hosting/monitoring/investigate-event-flood/aws-console-cloudwatch.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-dashboard-events-queue-backlog.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-dashboard-events-queue-backlog.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-dashboard-events-queue-backlog.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-dashboard-events-queue-backlog.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-dashboard-select.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-dashboard-select.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-dashboard-select.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-dashboard-select.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights-event.source.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights-event.source.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights-event.source.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights-event.source.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights-events-by-account.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights-events-by-account.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights-events-by-account.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights-events-by-account.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights-source-breakdown.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights-source-breakdown.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights-source-breakdown.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights-source-breakdown.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-log-insights.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-log-insights.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-select-te-dashboard.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-select-te-dashboard.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-select-te-dashboard.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-select-te-dashboard.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-view-messages-by-workspace.png b/docs/hosting/monitoring/investigate-event-flood/cloudwatch-view-messages-by-workspace.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/cloudwatch-view-messages-by-workspace.png
rename to docs/hosting/monitoring/investigate-event-flood/cloudwatch-view-messages-by-workspace.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/index.md b/docs/hosting/monitoring/investigate-event-flood/index.md
similarity index 79%
rename from docs/guides/hosting-guardrails/monitoring/investigate-event-flood/index.md
rename to docs/hosting/monitoring/investigate-event-flood/index.md
index 481a118c..9ecbe6bb 100644
--- a/docs/guides/hosting-guardrails/monitoring/investigate-event-flood/index.md
+++ b/docs/hosting/monitoring/investigate-event-flood/index.md
@@ -21,32 +21,32 @@ The best way to identify an event flood is by checking the **Events Queue Backlo
Open the AWS Console and navigate to the CloudWatch service in the region where Guardrails is deployed.
-
+
## Step 2: Navigate to Dashboards
Choose **Dashboards** from the left navigation menu.
-
+
## Step 3: Select Dashboard
In **Custom dashboards**, select the Turbot Guardrails Enterprise (TE) CloudWatch dashboard, which is typically named after the TE version in use.
-
+
## Step 4: View Events Queue
Select the desired duration from the time range option in the top-right corner, and check the **Events Queue Backlog** graph in the TE CloudWatch dashboard for spikes indicating a event flood state.
-
+
## Step 5: Identify Noisy Tenant
Scroll down in the same dashboard page to the **Activities** section, use the **View All Messages By Workspace** widget to filter and identify the noisy tenant causing the issues.
The number of messages received by the top tenant over a specified duration, along with the difference between the top three tenants, can be a strong indicator of an event flood.
-
+
## Step 6: Analyze Log Insights
@@ -55,7 +55,7 @@ With the workspace identified from the above step, navigate to **CloudWatch > Lo
> [!IMPORTANT]
> Longer durations will increase the log group size and query time, which may result in higher billing costs for CloudWatch.
-
+
> [!NOTE]
> You can select multiple TE version log groups if required.
@@ -71,7 +71,7 @@ fields @timestamp, @message
| stats count() as Count by data.msgObj.meta.tenantId as Tenant, data.msgObj.payload.account as AccountId
| sort Count desc | limit 5
```
-
+
## Step 8: External Messages by Source for a Tenant
@@ -85,7 +85,7 @@ fields @timestamp, @message
| sort Count desc | limit 5
```
-
+
## Step 9: External Messages by Event Name
@@ -99,7 +99,7 @@ fields @timestamp, @message
| sort Count desc | limit 5
```
-
+
## Step 10: Measures To Fix Event Flood
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-console-home.png b/docs/hosting/monitoring/investigate-lambda-invocation/aws-console-home.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-console-home.png
rename to docs/hosting/monitoring/investigate-lambda-invocation/aws-console-home.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-dashboard-select.png b/docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-dashboard-select.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-dashboard-select.png
rename to docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-dashboard-select.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-invocations-resolved.png b/docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-invocations-resolved.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-invocations-resolved.png
rename to docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-invocations-resolved.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-invocations-spike.png b/docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-invocations-spike.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-invocations-spike.png
rename to docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-invocations-spike.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-select-invocations.png b/docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-select-invocations.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/aws-lambda-select-invocations.png
rename to docs/hosting/monitoring/investigate-lambda-invocation/aws-lambda-select-invocations.png
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/index.md b/docs/hosting/monitoring/investigate-lambda-invocation/index.md
similarity index 82%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/index.md
rename to docs/hosting/monitoring/investigate-lambda-invocation/index.md
index f8185e58..7ab62eb0 100644
--- a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/index.md
+++ b/docs/hosting/monitoring/investigate-lambda-invocation/index.md
@@ -22,25 +22,25 @@ When durations exceed defined thresholds, they *increase costs* and may indicate
Open the AWS Console and navigate to the **Lambda** service in the region where Guardrails is deployed.
-
+
## Step 2: Navigate to Dashboards
From the left navigation menu, select **Dashboards**.
-
+
## Step 3: View Lambda Invocations
In **Account-level metrics**, select **Invocations** and set the desired date range.
-
+
## Step 4: Identify Invocation Spikes
Analyze the graph for spikes in invocation counts over the selected time range. In this example, a spike is observed starting from `01/29/2025`.
-
+
## Step 5: Investigate and Resolve Spike
@@ -59,7 +59,7 @@ Once identified, apply necessary fixes as recommended by Turbot support.
- [ ] Ensure that the Lambda invocation spike stabilizes and returns to normal levels.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/lambda-select-invocations.png b/docs/hosting/monitoring/investigate-lambda-invocation/lambda-select-invocations.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/investigate-lambda-invocation/lambda-select-invocations.png
rename to docs/hosting/monitoring/investigate-lambda-invocation/lambda-select-invocations.png
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/index.md b/docs/hosting/monitoring/monitoring-alarms/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/index.md
rename to docs/hosting/monitoring/monitoring-alarms/index.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/elb-5xx-errors.md b/docs/hosting/monitoring/monitoring-alarms/te/elb-5xx-errors.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/elb-5xx-errors.md
rename to docs/hosting/monitoring/monitoring-alarms/te/elb-5xx-errors.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/events-queue-backlog.md b/docs/hosting/monitoring/monitoring-alarms/te/events-queue-backlog.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/events-queue-backlog.md
rename to docs/hosting/monitoring/monitoring-alarms/te/events-queue-backlog.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/index.md b/docs/hosting/monitoring/monitoring-alarms/te/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/index.md
rename to docs/hosting/monitoring/monitoring-alarms/te/index.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/turbot-response-time.md b/docs/hosting/monitoring/monitoring-alarms/te/turbot-response-time.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/turbot-response-time.md
rename to docs/hosting/monitoring/monitoring-alarms/te/turbot-response-time.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/worker-lambda-duration.md b/docs/hosting/monitoring/monitoring-alarms/te/worker-lambda-duration.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/te/worker-lambda-duration.md
rename to docs/hosting/monitoring/monitoring-alarms/te/worker-lambda-duration.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/cpu-utilization.md b/docs/hosting/monitoring/monitoring-alarms/ted/cpu-utilization.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/cpu-utilization.md
rename to docs/hosting/monitoring/monitoring-alarms/ted/cpu-utilization.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/db-connections.md b/docs/hosting/monitoring/monitoring-alarms/ted/db-connections.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/db-connections.md
rename to docs/hosting/monitoring/monitoring-alarms/ted/db-connections.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/free-storage-space.md b/docs/hosting/monitoring/monitoring-alarms/ted/free-storage-space.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/free-storage-space.md
rename to docs/hosting/monitoring/monitoring-alarms/ted/free-storage-space.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/freeable-memory.md b/docs/hosting/monitoring/monitoring-alarms/ted/freeable-memory.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/freeable-memory.md
rename to docs/hosting/monitoring/monitoring-alarms/ted/freeable-memory.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/index.md b/docs/hosting/monitoring/monitoring-alarms/ted/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/index.md
rename to docs/hosting/monitoring/monitoring-alarms/ted/index.md
diff --git a/docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/queue-depth.md b/docs/hosting/monitoring/monitoring-alarms/ted/queue-depth.md
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/monitoring-alarms/ted/queue-depth.md
rename to docs/hosting/monitoring/monitoring-alarms/ted/queue-depth.md
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/filter-policy-error-invalid-state.png b/docs/hosting/monitoring/workspace-health-check/filter-policy-error-invalid-state.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/filter-policy-error-invalid-state.png
rename to docs/hosting/monitoring/workspace-health-check/filter-policy-error-invalid-state.png
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-console-login.png b/docs/hosting/monitoring/workspace-health-check/guardrails-console-login.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-console-login.png
rename to docs/hosting/monitoring/workspace-health-check/guardrails-console-login.png
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-filter-error-invalid.png b/docs/hosting/monitoring/workspace-health-check/guardrails-filter-error-invalid.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-filter-error-invalid.png
rename to docs/hosting/monitoring/workspace-health-check/guardrails-filter-error-invalid.png
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-navigate-to-reports.png b/docs/hosting/monitoring/workspace-health-check/guardrails-navigate-to-reports.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-navigate-to-reports.png
rename to docs/hosting/monitoring/workspace-health-check/guardrails-navigate-to-reports.png
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-policy-values-by-state.png b/docs/hosting/monitoring/workspace-health-check/guardrails-policy-values-by-state.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-policy-values-by-state.png
rename to docs/hosting/monitoring/workspace-health-check/guardrails-policy-values-by-state.png
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-select-controls-alerts.png b/docs/hosting/monitoring/workspace-health-check/guardrails-select-controls-alerts.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/guardrails-select-controls-alerts.png
rename to docs/hosting/monitoring/workspace-health-check/guardrails-select-controls-alerts.png
diff --git a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/index.md b/docs/hosting/monitoring/workspace-health-check/index.md
similarity index 69%
rename from docs/guides/hosting-guardrails/monitoring/workspace-health-check/index.md
rename to docs/hosting/monitoring/workspace-health-check/index.md
index 249c09ca..67dac88d 100644
--- a/docs/guides/hosting-guardrails/monitoring/workspace-health-check/index.md
+++ b/docs/hosting/monitoring/workspace-health-check/index.md
@@ -19,33 +19,33 @@ An ideal workspace should be quick and responsive. It should employ necessary co
Log into the Guardrails console.
-
+
## Step 2: Navigate to Reports
Choose **Reports** from the top navigation menu.
-
+
## Step 3: View Control Alerts
Under Controls, select **Alerts by Control Type**.
-
+
Select **Invalid** and **Error** From **State** filter dropdown.
-
+
## Step 3: View Policy Alerts
In **Reports**, scroll down to `Policies` section, select **Policy Values by State** option.
-
+
Select **Invalid** and **Error** From **State** filter dropdown.
-
+
## Step 4: Resolving Errors and Optimizing Controls
diff --git a/docs/guides/hosting-guardrails/physical-architecture.png b/docs/hosting/physical-architecture.png
similarity index 100%
rename from docs/guides/hosting-guardrails/physical-architecture.png
rename to docs/hosting/physical-architecture.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/aws-rds-service-console.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/aws-rds-service-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/aws-rds-service-console.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/aws-rds-service-console.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/cfn-update-failed.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/cfn-update-failed.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/cfn-update-failed.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/cfn-update-failed.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/index.md b/docs/hosting/troubleshooting/database-instance-not-in-available-state/index.md
similarity index 73%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/index.md
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/index.md
index 1879d9b7..dd3e946d 100644
--- a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/index.md
+++ b/docs/hosting/troubleshooting/database-instance-not-in-available-state/index.md
@@ -20,7 +20,7 @@ When working with the [TED (Turbot Enterprise Database)](/guardrails/docs/refere
During execution of the [TED update](/guardrails/docs/runbooks/enterprise-install/update-ted#update-turbot-guardrails-enterprise-database-ted), check if the provisioned product in the Service Catalog changes to a `Tainted` status.
-
+
@@ -29,12 +29,12 @@ During execution of the [TED update](/guardrails/docs/runbooks/enterprise-instal
In the selected provisioned product, select the **Events** tab, in `UPDATE_PROVISIONED_PRODUCT` section select **View details**.
-
+
Select **View more in CloudFormation** to navigate to CloudFormation stack. This will display **Error Message** as
`Database instance is not in available state. (Service: Rds, Status Code: 400, Request ID: 3f4bddc5-e656-4ebe-8efe-3b9bdcfac026)`
-
+
> [!NOTE]
> The most common reason for this issue is that the database is in a state where modifications are not allowed, such as `Backing-up`. Attempting to make changes during this time will result in an error.
@@ -43,11 +43,11 @@ Select **View more in CloudFormation** to navigate to CloudFormation stack. This
- [ ] Open the AWS Console and navigate to the **RDS** service in the region where TED is deployed.
-
+
- [ ] Find the **DB Instance** associated with your TED stack.
-
+
- [ ] Navigate to the DB Instance **Summary** and check for `Status`
@@ -57,7 +57,7 @@ Select **View more in CloudFormation** to navigate to CloudFormation stack. This
If the database is in a state such as `Backing-up`, you will need to wait until the process is complete and the status changes to `Available`. This may take some time depending on the operations being performed on the database.
-
+
## Step 5: Execute Service Catalog Stack Update
@@ -65,11 +65,11 @@ Once the database instance is in the `Available` state, navigate to the Service
Initiate Service Catalog [TED **Update**](/guardrails/docs/runbooks/enterprise-install/update-ted). CloudFormation will check for changes. If there are no discrepancies, the stack will transition to `Update Complete`.
-
+
## Step 6: Review CloudFormation Stack
-
+
If you continue to encounter issues, please [Open Support Ticket](https://support.turbot.com) and attach the relevant information to assist you more efficiently.
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/rds-backing-up.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/rds-backing-up.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/rds-backing-up.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/rds-backing-up.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/rds-status-available.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/rds-status-available.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/rds-status-available.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/rds-status-available.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/rds-status.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/rds-status.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/rds-status.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/rds-status.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/service-catalog-ted-tainted-status.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/service-catalog-ted-tainted-status.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/service-catalog-ted-tainted-status.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/service-catalog-ted-tainted-status.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/ted-rds-instance.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/ted-rds-instance.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/ted-rds-instance.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/ted-rds-instance.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/ted-tained-status-view-details.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/ted-tained-status-view-details.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/ted-tained-status-view-details.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/ted-tained-status-view-details.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/ted-tained-status.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/ted-tained-status.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/ted-tained-status.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/ted-tained-status.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/update-complete.png b/docs/hosting/troubleshooting/database-instance-not-in-available-state/update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state/update-complete.png
rename to docs/hosting/troubleshooting/database-instance-not-in-available-state/update-complete.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-console-ssm.png b/docs/hosting/troubleshooting/enable-verbose-logging/aws-console-ssm.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-console-ssm.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/aws-console-ssm.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssl-parameter-value-default-settings.png b/docs/hosting/troubleshooting/enable-verbose-logging/aws-ssl-parameter-value-default-settings.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssl-parameter-value-default-settings.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/aws-ssl-parameter-value-default-settings.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-parameter-change-validation.png b/docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-parameter-change-validation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-parameter-change-validation.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-parameter-change-validation.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-parameter-modifiy-verbose.png b/docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-parameter-modifiy-verbose.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-parameter-modifiy-verbose.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-parameter-modifiy-verbose.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-parameter-store.png b/docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-parameter-store.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-parameter-store.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-parameter-store.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-workspace-parameter.png b/docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-workspace-parameter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/aws-ssm-workspace-parameter.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/aws-ssm-workspace-parameter.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/cfn-workspace-te-stack-validation.png b/docs/hosting/troubleshooting/enable-verbose-logging/cfn-workspace-te-stack-validation.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/cfn-workspace-te-stack-validation.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/cfn-workspace-te-stack-validation.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/index.md b/docs/hosting/troubleshooting/enable-verbose-logging/index.md
similarity index 73%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/index.md
rename to docs/hosting/troubleshooting/enable-verbose-logging/index.md
index 40ccdaaf..ebf53a82 100644
--- a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/index.md
+++ b/docs/hosting/troubleshooting/enable-verbose-logging/index.md
@@ -22,25 +22,25 @@ It's important to note that keeping verbose logging enabled for extended periods
Open the AWS Console and navigate to the System Manager service in the region where Guardrails stacks are deployed
-
+
## Step 2: Navigate to Parameter Store
Choose **Parameter Store** from the left navigation menu.
-
+
## Step 3: Identify SSM Parameter Value
To enable verbose event logging, first identify the workspace(s) you want to configure. Search for **tenant** to generate a list of parameters for all workspaces in this region, then Locate the relevant parameters, which will follow this format: **/{turbot_prefix}/tenant/{workspace}.{installation_domain}**.
-
+
## Step 4: Verify Parameter Value
Choose the tenant parameter and verify if the **log_level** is set to `debug`, as this is the default setting.
-
+
## Step 5: Modify Parameter Value
@@ -48,23 +48,23 @@ Select **Edit** and update `log_level` to `verbose` in `Value` field. Then selec
> [!NOTE] Ensure the parameter string is a valid JSON before saving. Keep all rest of the values as default.
-
+
## Step 6: Enable Verbose Logging in Service Catalog
Navigate to the **Service Catalog** service and select the **Turbot Guardrails Enterprise (TE)** provisioned product where verbose logging is required. Then, select Actions and choose Update.
-
+
Toggle the `Deployment Trigger` between `Blue <> Green`, this will trigger the TE CloudFormation stack to ensure that the Events and API containers are using the latest SSM parameter values. No other changes to the TE stack are required as a part of these troubleshooting steps. Select **Update**.
-
+
## Step 7: Review Cloud Formation Stack
- [ ] The TED CloudFormation stack status should change to `UPDATE_COMPLETE` indicating the update completed successfully.
-
+
## Step 8: Search for Troubleshooting Data
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/service-catalog-deployment-trigger.png b/docs/hosting/troubleshooting/enable-verbose-logging/service-catalog-deployment-trigger.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/service-catalog-deployment-trigger.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/service-catalog-deployment-trigger.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/service-catalog-te-update.png b/docs/hosting/troubleshooting/enable-verbose-logging/service-catalog-te-update.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/service-catalog-te-update.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/service-catalog-te-update.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/ssm-parameter-store.png b/docs/hosting/troubleshooting/enable-verbose-logging/ssm-parameter-store.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/ssm-parameter-store.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/ssm-parameter-store.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/ssm-workspace-parameter-search.png b/docs/hosting/troubleshooting/enable-verbose-logging/ssm-workspace-parameter-search.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/enable-verbose-logging/ssm-workspace-parameter-search.png
rename to docs/hosting/troubleshooting/enable-verbose-logging/ssm-workspace-parameter-search.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/event-flood.md b/docs/hosting/troubleshooting/event-flood.md
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/event-flood.md
rename to docs/hosting/troubleshooting/event-flood.md
diff --git a/docs/guides/hosting-guardrails/troubleshooting/index.md b/docs/hosting/troubleshooting/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/index.md
rename to docs/hosting/troubleshooting/index.md
diff --git a/docs/guides/hosting-guardrails/troubleshooting/pause-events/disable-trigger.png b/docs/hosting/troubleshooting/pause-events/disable-trigger.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/pause-events/disable-trigger.png
rename to docs/hosting/troubleshooting/pause-events/disable-trigger.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/pause-events/enable-trigger.png b/docs/hosting/troubleshooting/pause-events/enable-trigger.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/pause-events/enable-trigger.png
rename to docs/hosting/troubleshooting/pause-events/enable-trigger.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/pause-events/function_overview.png b/docs/hosting/troubleshooting/pause-events/function_overview.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/pause-events/function_overview.png
rename to docs/hosting/troubleshooting/pause-events/function_overview.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/pause-events/index.md b/docs/hosting/troubleshooting/pause-events/index.md
similarity index 95%
rename from docs/guides/hosting-guardrails/troubleshooting/pause-events/index.md
rename to docs/hosting/troubleshooting/pause-events/index.md
index 6af7fcd0..20899e45 100644
--- a/docs/guides/hosting-guardrails/troubleshooting/pause-events/index.md
+++ b/docs/hosting/troubleshooting/pause-events/index.md
@@ -40,14 +40,14 @@ Below are some examples of such Lambda functions:
* `turbot_5_39_12_worker`
* `turbot_5_39_12_worker_retry`
-
+
* Navigate to each of these Lambda functions and click on the "Configuration" tab.
* Select "Triggers" sub-tab and look for the trigger corresponding to the function.
* Choose the trigger by clicking on the checkbox and click on Edit.
* In the "Trigger configuration" page, uncheck the "Activate trigger" option to push the events to backlog queue.
-
+
## Enable Event Processing
@@ -60,7 +60,7 @@ state, you can still enable the lambda triggers.
* Choose the trigger by clicking on the checkbox and click on Edit.
* In the "Trigger configuration" page, check the "Activate trigger" option to enable the events.
-
+
### Need help?
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-console-login.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-console-login.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-console-login.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-console-login.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-mod-install-success.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-mod-install-success.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-mod-install-success.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-mod-install-success.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-navigate-admin-panel.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-navigate-admin-panel.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-navigate-admin-panel.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-navigate-admin-panel.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods-installed.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods-installed.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods-installed.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods-installed.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-navigate-mods.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-re-run-control.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-re-run-control.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-re-run-control.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-re-run-control.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-verify-missing-mod-error.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-verify-missing-mod-error.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/guardrails-verify-missing-mod-error.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/guardrails-verify-missing-mod-error.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/gurdrails-install-missing-mod.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/gurdrails-install-missing-mod.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/gurdrails-install-missing-mod.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/gurdrails-install-missing-mod.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/index.md b/docs/hosting/troubleshooting/peer-mod-dependency-error/index.md
similarity index 53%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/index.md
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/index.md
index ad9618df..17562e3f 100644
--- a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/index.md
+++ b/docs/hosting/troubleshooting/peer-mod-dependency-error/index.md
@@ -19,51 +19,51 @@ When installing Mods, you may encounter an issue where a mod is dependent on ano
Log into the Guardrails console.
-
+
## Step 2: Navigate to Mods
Choose **Admin** from the top right corner.
-
+
Select the **Mods** tab.
-
+
## Step 3: Search Mod
Search for the installed mod that is in an error state.
-
+
Select the mod and navigate to **Turbot > Mod > Installed** control.
-
+
## Step 4: Verify Missing Mod
Verify the missing mod by reviewing the displayed error message.
-
+
## Step 5: Install Dependent Mod
Install the missing mod.
-
+
## Step 5: Run Control
Select **Run control** from the **Actions** dropdown and re-run the mod installed control.
-
+
## Step 6: Verify
The mod control moves to an **OK** state, indicating a successful mod installation.
-
+
If you encounter any further issues, please [Open Support Ticket](https://support.turbot.com) and attach the relevant information to assist you more efficiently.
diff --git a/docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/mod-search.png b/docs/hosting/troubleshooting/peer-mod-dependency-error/mod-search.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error/mod-search.png
rename to docs/hosting/troubleshooting/peer-mod-dependency-error/mod-search.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/aws-rds-service-console.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/aws-rds-service-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/aws-rds-service-console.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/aws-rds-service-console.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/continue-update-rollback.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/continue-update-rollback.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/continue-update-rollback.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/continue-update-rollback.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/image.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/image.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/image.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/image.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/index.md b/docs/hosting/troubleshooting/service-catalog-out-of-sync/index.md
similarity index 64%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/index.md
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/index.md
index dc80bee1..b7e7dee3 100644
--- a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/index.md
+++ b/docs/hosting/troubleshooting/service-catalog-out-of-sync/index.md
@@ -20,23 +20,23 @@ When working with the [TED (Turbot Enterprise Database)](/guardrails/docs/refere
While executing the [TED update](guides/hosting-guardrails/updating-stacks/update-ted), check if the provisioned product in the Service Catalog changing to a `Tainted` status.
-
+
## Step 2: Check Stack Failure Details
In the selected provisioned product, select the **Events** tab, in `UPDATE_PROVISIONED_PRODUCT` section select **View details**.
-
+
This will bring up `Error` window with **StatusReason**.
-
+
Select **View more in CloudFormation** to navigate to CloudFormation stack. This will display **Error Message** as
`Resource handler returned message: "Invalid storage size for engine name postgres and storage type gp3: 210 (Service: Rds, Status Code: 400, Request ID: d93b7008-0506-443d-a849-dc1c42b49656)"`
-
+
@@ -47,19 +47,19 @@ Select **View more in CloudFormation** to navigate to CloudFormation stack. This
- [ ] Open the AWS Console and navigate to the **RDS** service in the region where TED is deployed.
-
+
- [ ] Find the **DB Instance** associated with your TED stack.
-
+
- [ ] Navigate to the DB Instance **Configuration** and check for `Storage`
-
+
- [ ] Compare the actual **Configuration** settings of the RDS instance with the CloudFormation **Parameter** values in the TED stack.
-
+
@@ -67,17 +67,17 @@ Select **View more in CloudFormation** to navigate to CloudFormation stack. This
Select CloudFormation stack **Events** tab
-
+
Select **Detect root cause**
-
+
## Step 5: Check CloudFormation Stack
CloudFormation stack does not allow updates when the **Update** button is `grayed` out. This indicates that the stack is in a state that prevents updates. Any changes attempted during this state will fail.
-
+
## Step 6: Fix CloudFormation Stack
@@ -85,29 +85,29 @@ To proceed with aligning the Service Catalog TED stack with the actual configura
From **Stack actions** dropdown select **Continue update rollback**.
-
+
A new window titled **Continue update rollback** will appear. In the **Advanced Troubleshooting** section, select check the box next to **HivePrimary** under `Resources to skip - optional` section to rollback for that specific resource. Select the **Continue update rollback** button.
-
+
This should successfully transition the stack to `Update Rollback Complete`, making it available for further updates with the **Update** now activated.
-
+
## Step 7: Execute Service Catalog Stack Update
Navigate to Service Catalog and update the TED product. Ensure the parameter values match exactly with the current RDS DB instance storage setting. For instance, if RDS storage auto-scaled or manually updated from 200 GB to 225 GB, update the Service Catalog product's TED stack `Allocated Storage in GB` field to 225 GB to reflect the actual RDS value.
-
+
Initiate Service Catalog [TED Update](guides/hosting-guardrails/updating-stacks/update-ted). CloudFormation will check for changes. If there are no discrepancies, the stack will transition to `Update Complete`.
-
+
## Step 8: Review CloudFormation Stack
-
+
If you continue to encounter issues, please [Open Support Ticket](https://support.turbot.com) and attach the relevant information to assist you more efficiently.
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/invalid-storage-size.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/invalid-storage-size.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/invalid-storage-size.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/invalid-storage-size.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-service-catalog-stack-paramater.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-service-catalog-stack-paramater.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-service-catalog-stack-paramater.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-service-catalog-stack-paramater.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-grayed-out.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-grayed-out.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-grayed-out.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-grayed-out.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-invalid-storage-size.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-invalid-storage-size.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-invalid-storage-size.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-invalid-storage-size.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause-details.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause-details.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause-details.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause-details.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-root-cause.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-update-rollback-complete.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-update-rollback-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-update-rollback-complete.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-cfn-stack-update-rollback-complete.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-rds-instance-configuration.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-rds-instance-configuration.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-rds-instance-configuration.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-rds-instance-configuration.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-rds-instance.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-rds-instance.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-rds-instance.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-rds-instance.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-stack-continue-rollback-action.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-stack-continue-rollback-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-stack-continue-rollback-action.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-stack-continue-rollback-action.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-stack-rds-updated-storage-size.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-stack-rds-updated-storage-size.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-stack-rds-updated-storage-size.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-stack-rds-updated-storage-size.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-1.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-1.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-1.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-1.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-1.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-1.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-1.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-1.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-2.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-2.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-2.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-2.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-invalid-storage-size.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-invalid-storage-size.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-invalid-storage-size.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details-reason-invalid-storage-size.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status-view-details.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/ted-tained-status.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/ted-tained-status.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/update-complete.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/update-complete.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/update-complete.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/update-rollback-complete-old.png b/docs/hosting/troubleshooting/service-catalog-out-of-sync/update-rollback-complete-old.png
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync/update-rollback-complete-old.png
rename to docs/hosting/troubleshooting/service-catalog-out-of-sync/update-rollback-complete-old.png
diff --git a/docs/guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-aws-console.md b/docs/hosting/troubleshooting/troubleshooting-event-handlers-aws-console.md
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-aws-console.md
rename to docs/hosting/troubleshooting/troubleshooting-event-handlers-aws-console.md
diff --git a/docs/guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-guardrails-console.md b/docs/hosting/troubleshooting/troubleshooting-event-handlers-guardrails-console.md
similarity index 100%
rename from docs/guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-guardrails-console.md
rename to docs/hosting/troubleshooting/troubleshooting-event-handlers-guardrails-console.md
diff --git a/docs/guides/hosting-guardrails/updating-stacks/domain-update/index.md b/docs/hosting/updating-stacks/domain-update/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/domain-update/index.md
rename to docs/hosting/updating-stacks/domain-update/index.md
diff --git a/docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/gp3-baseline-custom.png b/docs/hosting/updating-stacks/general-purpose-gp3/gp3-baseline-custom.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/gp3-baseline-custom.png
rename to docs/hosting/updating-stacks/general-purpose-gp3/gp3-baseline-custom.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/gp3-baseline.png b/docs/hosting/updating-stacks/general-purpose-gp3/gp3-baseline.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/gp3-baseline.png
rename to docs/hosting/updating-stacks/general-purpose-gp3/gp3-baseline.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/index.md b/docs/hosting/updating-stacks/general-purpose-gp3/index.md
similarity index 97%
rename from docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/index.md
rename to docs/hosting/updating-stacks/general-purpose-gp3/index.md
index 3f4a9ff5..7b7f67a9 100644
--- a/docs/guides/hosting-guardrails/updating-stacks/general-purpose-gp3/index.md
+++ b/docs/hosting/updating-stacks/general-purpose-gp3/index.md
@@ -70,7 +70,7 @@ or the TE version could be different from case to case.
* Storage Throughput: 0
- 
+ 
If the Allocated Storage is 400GB or higher:
@@ -80,7 +80,7 @@ or the TE version could be different from case to case.
* Storage Throughput: 500
- 
+ 
* Scroll to the bottom of the page and click on "Update" to make the above changes to the provisioned product.
diff --git a/docs/guides/hosting-guardrails/updating-stacks/index.md b/docs/hosting/updating-stacks/index.md
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/index.md
rename to docs/hosting/updating-stacks/index.md
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/aws-service-catalog-console.png b/docs/hosting/updating-stacks/update-ted/aws-service-catalog-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/aws-service-catalog-console.png
rename to docs/hosting/updating-stacks/update-ted/aws-service-catalog-console.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/cfn-ted-update-complete.png b/docs/hosting/updating-stacks/update-ted/cfn-ted-update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/cfn-ted-update-complete.png
rename to docs/hosting/updating-stacks/update-ted/cfn-ted-update-complete.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/cfn-ted-update-progress.png b/docs/hosting/updating-stacks/update-ted/cfn-ted-update-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/cfn-ted-update-progress.png
rename to docs/hosting/updating-stacks/update-ted/cfn-ted-update-progress.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/index.md b/docs/hosting/updating-stacks/update-ted/index.md
similarity index 76%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/index.md
rename to docs/hosting/updating-stacks/update-ted/index.md
index 2191ab8a..8f8c9f33 100644
--- a/docs/guides/hosting-guardrails/updating-stacks/update-ted/index.md
+++ b/docs/hosting/updating-stacks/update-ted/index.md
@@ -25,63 +25,63 @@ TED is the database layer of a Turbot Guardrails Enterprise deployment. Creates
Open the AWS Console and navigate to the RDS service in the region where TED is deployed.
-
+
## Step 2: Find RDS Instance
-
+
## Step 3: Check RDS Instance Status
Check the DB instance `Status` in `Available` state.
-
+
## Step 4: Access AWS Service Catalog
Open the AWS Console and navigate to the Service Catalog service in the region where TED is deployed.
-
+
## Step 5: Navigate Provisioned Products
Choose **Provisioned Products** from the left navigation menu.
-
+
## Step 6: View Provisioned Products
Change the **Access Filter** in AWS Service Catalog from **User** to **Account** to view all TED provisioned products across the entire account.
-
+
## Step 7: Find Provisioned Product
The TED provisioned product is identifiable by a postfix that matches the database Hive name.
-
+
From the **Actions** menu, select **Update**
-
+
## Step 8: Find Version
Sort the Product versions section by **Created time** (descending) to see the latest available version.
-
+
## Step 9: Select Version
Select the desired TED version under **Product Versions**.
-
+
## Step 10: Verify Parameters
The values of the parameters will initially be set to match previous run of the product. Review the [release notes](https://turbot.com/guardrails/changelog?tag=ted) for the TED versions between the existing version and the version you are updating to, and identify any new parameters that require a decision about how they will be set. Generally, new parameters will be created in a way to have the least disruption on an existing environment, but care should still be taken to understand these and read any new parameter descriptions to understand their impact.
-
+
> [!CAUTION]
> A frequent issue arises when databases employ auto-scaling storage. Discrepancies in storage figures between the stack and the product can occur if the database has expanded since installation.
@@ -92,7 +92,7 @@ The values of the parameters will initially be set to match previous run of the
After verifying any changes to existing parameters, select **Update** at the bottom of the screen.
-
+
## Step 12: Monitor Update
@@ -103,21 +103,21 @@ You have initiated the installation of the new TED version. This triggers an upd
Select the TED Provisioned Product, select the **Outputs** tab, and use the **CloudFormationStackARN** **Value** link to navigate to the CloudFormation stack and monitor the update progress.
-
+
The TED CloudFormation stack status should change to `UPDATE_IN_PROGRESS` indicating the update process is in progress.
-
+
## Step 13: Review
- [ ] The TED CloudFormation stack status should change to `UPDATE_COMPLETE` indicating the update completed successfully.
-
+
- [ ] The TED `Provisioned product` status should change to `Available`.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/rds-console-access.png b/docs/hosting/updating-stacks/update-ted/rds-console-access.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/rds-console-access.png
rename to docs/hosting/updating-stacks/update-ted/rds-console-access.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/rds-find-instance.png b/docs/hosting/updating-stacks/update-ted/rds-find-instance.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/rds-find-instance.png
rename to docs/hosting/updating-stacks/update-ted/rds-find-instance.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/rds-instance-status-available.png b/docs/hosting/updating-stacks/update-ted/rds-instance-status-available.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/rds-instance-status-available.png
rename to docs/hosting/updating-stacks/update-ted/rds-instance-status-available.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-actions-update.png b/docs/hosting/updating-stacks/update-ted/service-catalog-actions-update.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-actions-update.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-actions-update.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-find-provisioned-product-ted.png b/docs/hosting/updating-stacks/update-ted/service-catalog-find-provisioned-product-ted.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-find-provisioned-product-ted.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-find-provisioned-product-ted.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-find-ted-product-versions.png b/docs/hosting/updating-stacks/update-ted/service-catalog-find-ted-product-versions.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-find-ted-product-versions.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-find-ted-product-versions.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-provisioned-products.png b/docs/hosting/updating-stacks/update-ted/service-catalog-provisioned-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-provisioned-products.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-provisioned-products.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-select-access-filter.png b/docs/hosting/updating-stacks/update-ted/service-catalog-select-access-filter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-select-access-filter.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-select-access-filter.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-select-ted-version.png b/docs/hosting/updating-stacks/update-ted/service-catalog-select-ted-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-select-ted-version.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-select-ted-version.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-ted-update-action.png b/docs/hosting/updating-stacks/update-ted/service-catalog-ted-update-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-ted-update-action.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-ted-update-action.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-ted-update-complete.png b/docs/hosting/updating-stacks/update-ted/service-catalog-ted-update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-ted-update-complete.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-ted-update-complete.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-ted-verify-parameters.png b/docs/hosting/updating-stacks/update-ted/service-catalog-ted-verify-parameters.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-ted-verify-parameters.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-ted-verify-parameters.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-update-ted-navigate-to-cfn.png b/docs/hosting/updating-stacks/update-ted/service-catalog-update-ted-navigate-to-cfn.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-ted/service-catalog-update-ted-navigate-to-cfn.png
rename to docs/hosting/updating-stacks/update-ted/service-catalog-update-ted-navigate-to-cfn.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/aws-service-catalog-console.png b/docs/hosting/updating-stacks/update-tef/aws-service-catalog-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/aws-service-catalog-console.png
rename to docs/hosting/updating-stacks/update-tef/aws-service-catalog-console.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/cfn-tef-update-complete.png b/docs/hosting/updating-stacks/update-tef/cfn-tef-update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/cfn-tef-update-complete.png
rename to docs/hosting/updating-stacks/update-tef/cfn-tef-update-complete.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/cfn-tef-update-progress.png b/docs/hosting/updating-stacks/update-tef/cfn-tef-update-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/cfn-tef-update-progress.png
rename to docs/hosting/updating-stacks/update-tef/cfn-tef-update-progress.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/index.md b/docs/hosting/updating-stacks/update-tef/index.md
similarity index 72%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/index.md
rename to docs/hosting/updating-stacks/update-tef/index.md
index 0343948c..667b2d72 100644
--- a/docs/guides/hosting-guardrails/updating-stacks/update-tef/index.md
+++ b/docs/hosting/updating-stacks/update-tef/index.md
@@ -22,41 +22,41 @@ The TEF CloudFormation stack creates and manages the networking and compute comp
Open the AWS Console and navigate to the Service Catalog service in the region where TEF is deployed.
-
+
## Step 2: Navigate Provisioned Products
Choose **Provisioned Products** from the left navigation menu.
-
+
## Step 3: View Provisioned Products
Change the **Access Filter** in AWS Service Catalog from **User** to **Account** to view all TEF provisioned products across the entire account.
-
+
## Step 4: Select Provisioned Product
Select the TEF provisioned product from the list.
-
+
Select **Actions** menu, select **Update**
-
+
## Step 5: Find Version
Sort the Product versions section by `Created time` (descending) to see the latest available version.
-
+
## Step 6: Select Version
Select the desired TEF version under **Product Versions**.
-
+
## Step 7: Verify Parameters
@@ -64,13 +64,13 @@ The values of the parameters will initially be set to match previous run of the
Generally, new parameters will be created in a way to have the least disruption on an existing environment, but care should still be taken to understand these and read any new parameter descriptions to understand their impact.
-
+
## Step 8: Update TEF
After verifying any changes to existing parameters, select **Update** at the bottom of the screen.
-
+
## Step 9: Monitor Update
@@ -78,21 +78,21 @@ You have initiated the installation of the new TEF version. This triggers an upd
Select the TEF Provisioned Product, click the `Outputs` tab, and use the `CloudFormationStackARN` link to navigate to CloudFormation and monitor the update progress.
-
+
- [ ] Verify TEF stack status transitions to `UPDATE_IN_PROGRESS` upon modification and review the Events tab for expected parameter/resource updates.
-
+
## Step 10: Review
- [ ] The TEF CloudFormation stack status should change to `UPDATE_COMPLETE` indicating the update completed successfully.
-
+
- [ ] The TEF Provisioned Product status should change to `Available`.
-
+
## Next Steps
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-actions-update.png b/docs/hosting/updating-stacks/update-tef/service-catalog-actions-update.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-actions-update.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-actions-update.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-find-provisioned-product-tef.png b/docs/hosting/updating-stacks/update-tef/service-catalog-find-provisioned-product-tef.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-find-provisioned-product-tef.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-find-provisioned-product-tef.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-find-tef-product-versions.png b/docs/hosting/updating-stacks/update-tef/service-catalog-find-tef-product-versions.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-find-tef-product-versions.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-find-tef-product-versions.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-provisioned-products.png b/docs/hosting/updating-stacks/update-tef/service-catalog-provisioned-products.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-provisioned-products.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-provisioned-products.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-select-access-filter.png b/docs/hosting/updating-stacks/update-tef/service-catalog-select-access-filter.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-select-access-filter.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-select-access-filter.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-select-tef-version.png b/docs/hosting/updating-stacks/update-tef/service-catalog-select-tef-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-select-tef-version.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-select-tef-version.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-tef-update-action.png b/docs/hosting/updating-stacks/update-tef/service-catalog-tef-update-action.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-tef-update-action.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-tef-update-action.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-tef-update-complete.png b/docs/hosting/updating-stacks/update-tef/service-catalog-tef-update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-tef-update-complete.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-tef-update-complete.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-tef-verify-parameters.png b/docs/hosting/updating-stacks/update-tef/service-catalog-tef-verify-parameters.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-tef-verify-parameters.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-tef-verify-parameters.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-update-tef-navigate-to-cfn.png b/docs/hosting/updating-stacks/update-tef/service-catalog-update-tef-navigate-to-cfn.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-tef/service-catalog-update-tef-navigate-to-cfn.png
rename to docs/hosting/updating-stacks/update-tef/service-catalog-update-tef-navigate-to-cfn.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/aws-cloudformation-console.png b/docs/hosting/updating-stacks/update-workspace/aws-cloudformation-console.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/aws-cloudformation-console.png
rename to docs/hosting/updating-stacks/update-workspace/aws-cloudformation-console.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-select-workspace-stack.png b/docs/hosting/updating-stacks/update-workspace/cfn-select-workspace-stack.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-select-workspace-stack.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-select-workspace-stack.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stack-advanced-option-as-default.png b/docs/hosting/updating-stacks/update-workspace/cfn-stack-advanced-option-as-default.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stack-advanced-option-as-default.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-stack-advanced-option-as-default.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stack-specify-te-version.png b/docs/hosting/updating-stacks/update-workspace/cfn-stack-specify-te-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stack-specify-te-version.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-stack-specify-te-version.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stack-use-existing-template.png b/docs/hosting/updating-stacks/update-workspace/cfn-stack-use-existing-template.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stack-use-existing-template.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-stack-use-existing-template.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stacks.png b/docs/hosting/updating-stacks/update-workspace/cfn-stacks.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-stacks.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-stacks.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-worksapce-stack-select-submit-changes.png b/docs/hosting/updating-stacks/update-workspace/cfn-worksapce-stack-select-submit-changes.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-worksapce-stack-select-submit-changes.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-worksapce-stack-select-submit-changes.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-workspace-stack-select-update.png b/docs/hosting/updating-stacks/update-workspace/cfn-workspace-stack-select-update.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-workspace-stack-select-update.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-workspace-stack-select-update.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-workspace-stack-update-complete.png b/docs/hosting/updating-stacks/update-workspace/cfn-workspace-stack-update-complete.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-workspace-stack-update-complete.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-workspace-stack-update-complete.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-workspace-stack-update-progress.png b/docs/hosting/updating-stacks/update-workspace/cfn-workspace-stack-update-progress.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/cfn-workspace-stack-update-progress.png
rename to docs/hosting/updating-stacks/update-workspace/cfn-workspace-stack-update-progress.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/guardrails-console-verify-version.png b/docs/hosting/updating-stacks/update-workspace/guardrails-console-verify-version.png
similarity index 100%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/guardrails-console-verify-version.png
rename to docs/hosting/updating-stacks/update-workspace/guardrails-console-verify-version.png
diff --git a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/index.md b/docs/hosting/updating-stacks/update-workspace/index.md
similarity index 69%
rename from docs/guides/hosting-guardrails/updating-stacks/update-workspace/index.md
rename to docs/hosting/updating-stacks/update-workspace/index.md
index 245bd774..0a4ac404 100644
--- a/docs/guides/hosting-guardrails/updating-stacks/update-workspace/index.md
+++ b/docs/hosting/updating-stacks/update-workspace/index.md
@@ -20,47 +20,47 @@ A Guardrails [Workspace](/guardrails/docs/reference/glossary#workspace) is updat
Open the AWS Console and navigate to the CloudFormation service in the region where your workspace is deployed.
-
+
## Step 2: Select Stack
From the left navigation menu choose **Stacks**.
-
+
Search for the stack named **workspace**.
-
+
Select **Update**
-
+
## Step 3: Update Stack
Choose **Use existing template** and select **Next**.
-
+
Modify the version to match the new TE version number used in the TE stack (e.g., 5.45.4), then select **Next**.
-
+
## Step 4: Specify TE Version
-
+
Scroll down to **Advanced options**, leave the entire section as default and select **Next**
-
+
## Step 5: Submit Changes
In **Configure stack options**, review changes under **Changeset Preview** and select **Submit**.
-
+
## Step 6: Monitor Update
@@ -68,17 +68,17 @@ You have initiated the update of a new TE version in the Guardrails workspace. T
- [ ] The workspace CloudFormation stack status should change to `UPDATE_IN_PROGRESS` indicating the update process is in progress.
-
+
## Step 7: Review
- [ ] The workspace CloudFormation stack status should change to `UPDATE_COMPLETE` indicating the update completed successfully.
-
+
- [ ] Updated TE version should reflect in Guardrails `Workspace Admin` panel.
-
+
## Next Steps
diff --git a/docs/guides/configuring-guardrails/account-imports/index.md b/docs/managing/account-imports.remove-redundant/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/index.md
rename to docs/managing/account-imports.remove-redundant/index.md
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_account_type.png b/docs/managing/account-imports.remove-redundant/turbot_account_type.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_account_type.png
rename to docs/managing/account-imports.remove-redundant/turbot_account_type.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_import_tile.png b/docs/managing/account-imports.remove-redundant/turbot_import_tile.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_import_tile.png
rename to docs/managing/account-imports.remove-redundant/turbot_import_tile.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_account.png b/docs/managing/account-imports.remove-redundant/turbot_new_account.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_account.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_account.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_ad.png b/docs/managing/account-imports.remove-redundant/turbot_new_ad.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_ad.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_ad.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_management_group.png b/docs/managing/account-imports.remove-redundant/turbot_new_management_group.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_management_group.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_management_group.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_project_advanced.png b/docs/managing/account-imports.remove-redundant/turbot_new_project_advanced.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_project_advanced.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_project_advanced.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_project_simple.png b/docs/managing/account-imports.remove-redundant/turbot_new_project_simple.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_project_simple.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_project_simple.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_subscription.png b/docs/managing/account-imports.remove-redundant/turbot_new_subscription.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_subscription.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_subscription.png
diff --git a/docs/guides/configuring-guardrails/account-imports/turbot_new_tenant.png b/docs/managing/account-imports.remove-redundant/turbot_new_tenant.png
similarity index 100%
rename from docs/guides/configuring-guardrails/account-imports/turbot_new_tenant.png
rename to docs/managing/account-imports.remove-redundant/turbot_new_tenant.png
diff --git a/docs/guides/configuring-guardrails/activity-retention/check-setting.png b/docs/managing/activity-retention/check-setting.png
similarity index 100%
rename from docs/guides/configuring-guardrails/activity-retention/check-setting.png
rename to docs/managing/activity-retention/check-setting.png
diff --git a/docs/guides/configuring-guardrails/activity-retention/index.md b/docs/managing/activity-retention/index.md
similarity index 90%
rename from docs/guides/configuring-guardrails/activity-retention/index.md
rename to docs/managing/activity-retention/index.md
index 623d3bf4..39e2ed90 100644
--- a/docs/guides/configuring-guardrails/activity-retention/index.md
+++ b/docs/managing/activity-retention/index.md
@@ -21,7 +21,7 @@ Guardrails' [Activity Retention](https://hub.guardrails.turbot.com/mods/turbot/p
Log in to the Guardrails console using your local credentials or via SAML-based login. Select **Policies** from the top navigation menu, then search for the policy named `Turbot > Workspace > Retention > Activity Retention`.
-
+
Click **New Policy Setting** in the top-right corner of the policy details page.
@@ -38,7 +38,7 @@ Select the **Resource** or **Folder** at which you wish to set the retention pol
Under **Settings**, choose the appropriate retention period based on your organization's operational needs. Refer to [Retention Options](#retention-options) for details.
-
+
Click **Update** to save the new policy setting.
@@ -46,7 +46,7 @@ Click **Update** to save the new policy setting.
- [ ] Return to the **Policies** tab and confirm the policy has been correctly applied by verifying the **Current Setting**.
-
+
## Retention Options
diff --git a/docs/guides/configuring-guardrails/activity-retention/navigate-to-policies.png b/docs/managing/activity-retention/navigate-to-policies.png
similarity index 100%
rename from docs/guides/configuring-guardrails/activity-retention/navigate-to-policies.png
rename to docs/managing/activity-retention/navigate-to-policies.png
diff --git a/docs/guides/configuring-guardrails/activity-retention/new-policy-setting.png b/docs/managing/activity-retention/new-policy-setting.png
similarity index 100%
rename from docs/guides/configuring-guardrails/activity-retention/new-policy-setting.png
rename to docs/managing/activity-retention/new-policy-setting.png
diff --git a/docs/guides/configuring-guardrails/activity-retention/verify-activity-retention-policy.png b/docs/managing/activity-retention/verify-activity-retention-policy.png
similarity index 100%
rename from docs/guides/configuring-guardrails/activity-retention/verify-activity-retention-policy.png
rename to docs/managing/activity-retention/verify-activity-retention-policy.png
diff --git a/docs/guides/using-guardrails/ai-tools/index.md b/docs/managing/ai-tools/index.md
similarity index 100%
rename from docs/guides/using-guardrails/ai-tools/index.md
rename to docs/managing/ai-tools/index.md
diff --git a/docs/guides/configuring-guardrails/change-window/index.md b/docs/managing/change-window/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/change-window/index.md
rename to docs/managing/change-window/index.md
diff --git a/docs/guides/configuring-guardrails/directories/aws-sso/attributes.png b/docs/managing/directories/aws-sso/attributes.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/aws-sso/attributes.png
rename to docs/managing/directories/aws-sso/attributes.png
diff --git a/docs/guides/configuring-guardrails/directories/aws-sso/index.md b/docs/managing/directories/aws-sso/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/aws-sso/index.md
rename to docs/managing/directories/aws-sso/index.md
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/attributes.jpg b/docs/managing/directories/azure-ad/attributes.jpg
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/attributes.jpg
rename to docs/managing/directories/azure-ad/attributes.jpg
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/certificate-download.png b/docs/managing/directories/azure-ad/certificate-download.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/certificate-download.png
rename to docs/managing/directories/azure-ad/certificate-download.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/claims-after.png b/docs/managing/directories/azure-ad/claims-after.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/claims-after.png
rename to docs/managing/directories/azure-ad/claims-after.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/claims-before.png b/docs/managing/directories/azure-ad/claims-before.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/claims-before.png
rename to docs/managing/directories/azure-ad/claims-before.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/group-claims.png b/docs/managing/directories/azure-ad/group-claims.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/group-claims.png
rename to docs/managing/directories/azure-ad/group-claims.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/group-sync.md b/docs/managing/directories/azure-ad/group-sync.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/group-sync.md
rename to docs/managing/directories/azure-ad/group-sync.md
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/index.md b/docs/managing/directories/azure-ad/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/index.md
rename to docs/managing/directories/azure-ad/index.md
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/nav_directories.png b/docs/managing/directories/azure-ad/nav_directories.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/nav_directories.png
rename to docs/managing/directories/azure-ad/nav_directories.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/nav_permissions.png b/docs/managing/directories/azure-ad/nav_permissions.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/nav_permissions.png
rename to docs/managing/directories/azure-ad/nav_permissions.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/new_directory.png b/docs/managing/directories/azure-ad/new_directory.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/new_directory.png
rename to docs/managing/directories/azure-ad/new_directory.png
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/saml-preview.jpg b/docs/managing/directories/azure-ad/saml-preview.jpg
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/saml-preview.jpg
rename to docs/managing/directories/azure-ad/saml-preview.jpg
diff --git a/docs/guides/configuring-guardrails/directories/azure-ad/turbot.jpg b/docs/managing/directories/azure-ad/turbot.jpg
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/azure-ad/turbot.jpg
rename to docs/managing/directories/azure-ad/turbot.jpg
diff --git a/docs/guides/configuring-guardrails/directories/google/index.md b/docs/managing/directories/google/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/google/index.md
rename to docs/managing/directories/google/index.md
diff --git a/docs/guides/configuring-guardrails/directories/index.md b/docs/managing/directories/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/index.md
rename to docs/managing/directories/index.md
diff --git a/docs/guides/configuring-guardrails/directories/ldap-ldaps/index.md b/docs/managing/directories/ldap-ldaps/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/ldap-ldaps/index.md
rename to docs/managing/directories/ldap-ldaps/index.md
diff --git a/docs/guides/configuring-guardrails/directories/local/index.md b/docs/managing/directories/local/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/local/index.md
rename to docs/managing/directories/local/index.md
diff --git a/docs/guides/configuring-guardrails/directories/okta/group-claims.png b/docs/managing/directories/okta/group-claims.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/okta/group-claims.png
rename to docs/managing/directories/okta/group-claims.png
diff --git a/docs/guides/configuring-guardrails/directories/okta/group-sync.md b/docs/managing/directories/okta/group-sync.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/okta/group-sync.md
rename to docs/managing/directories/okta/group-sync.md
diff --git a/docs/guides/configuring-guardrails/directories/okta/index.md b/docs/managing/directories/okta/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/okta/index.md
rename to docs/managing/directories/okta/index.md
diff --git a/docs/guides/configuring-guardrails/directories/onelogin/attributes.png b/docs/managing/directories/onelogin/attributes.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/onelogin/attributes.png
rename to docs/managing/directories/onelogin/attributes.png
diff --git a/docs/guides/configuring-guardrails/directories/onelogin/index.md b/docs/managing/directories/onelogin/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/onelogin/index.md
rename to docs/managing/directories/onelogin/index.md
diff --git a/docs/guides/configuring-guardrails/directories/pingid/index.md b/docs/managing/directories/pingid/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/index.md
rename to docs/managing/directories/pingid/index.md
diff --git a/docs/guides/configuring-guardrails/directories/pingid/nav_directories.png b/docs/managing/directories/pingid/nav_directories.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/nav_directories.png
rename to docs/managing/directories/pingid/nav_directories.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/nav_permissions.png b/docs/managing/directories/pingid/nav_permissions.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/nav_permissions.png
rename to docs/managing/directories/pingid/nav_permissions.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/new_directory.png b/docs/managing/directories/pingid/new_directory.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/new_directory.png
rename to docs/managing/directories/pingid/new_directory.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/pingID-acs-url.png b/docs/managing/directories/pingid/pingID-acs-url.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/pingID-acs-url.png
rename to docs/managing/directories/pingid/pingID-acs-url.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/pingID-add-application.png b/docs/managing/directories/pingid/pingID-add-application.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/pingID-add-application.png
rename to docs/managing/directories/pingid/pingID-add-application.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/pingID-attributes.png b/docs/managing/directories/pingid/pingID-attributes.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/pingID-attributes.png
rename to docs/managing/directories/pingid/pingID-attributes.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/pingID-certificate.png b/docs/managing/directories/pingid/pingID-certificate.png
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/pingID-certificate.png
rename to docs/managing/directories/pingid/pingID-certificate.png
diff --git a/docs/guides/configuring-guardrails/directories/pingid/turbot.jpg b/docs/managing/directories/pingid/turbot.jpg
similarity index 100%
rename from docs/guides/configuring-guardrails/directories/pingid/turbot.jpg
rename to docs/managing/directories/pingid/turbot.jpg
diff --git a/docs/faq/general-faq/activity-ledger-1.png b/docs/managing/faq/general-faq/activity-ledger-1.png
similarity index 100%
rename from docs/faq/general-faq/activity-ledger-1.png
rename to docs/managing/faq/general-faq/activity-ledger-1.png
diff --git a/docs/faq/general-faq/activity-ledger-2.png b/docs/managing/faq/general-faq/activity-ledger-2.png
similarity index 100%
rename from docs/faq/general-faq/activity-ledger-2.png
rename to docs/managing/faq/general-faq/activity-ledger-2.png
diff --git a/docs/faq/general-faq/index.md b/docs/managing/faq/general-faq/index.md
similarity index 100%
rename from docs/faq/general-faq/index.md
rename to docs/managing/faq/general-faq/index.md
diff --git a/docs/faq/index.md b/docs/managing/faq/index.md
similarity index 100%
rename from docs/faq/index.md
rename to docs/managing/faq/index.md
diff --git a/docs/faq/workspace-faq/index.md b/docs/managing/faq/workspace-faq/index.md
similarity index 100%
rename from docs/faq/workspace-faq/index.md
rename to docs/managing/faq/workspace-faq/index.md
diff --git a/docs/faq/workspace-faq/key_rotation.md b/docs/managing/faq/workspace-faq/key_rotation.md
similarity index 100%
rename from docs/faq/workspace-faq/key_rotation.md
rename to docs/managing/faq/workspace-faq/key_rotation.md
diff --git a/docs/guides/configuring-guardrails/firehose/activity_ledger_custom_report.png b/docs/managing/firehose/activity_ledger_custom_report.png
similarity index 100%
rename from docs/guides/configuring-guardrails/firehose/activity_ledger_custom_report.png
rename to docs/managing/firehose/activity_ledger_custom_report.png
diff --git a/docs/guides/configuring-guardrails/firehose/activity_ledger_filter.png b/docs/managing/firehose/activity_ledger_filter.png
similarity index 100%
rename from docs/guides/configuring-guardrails/firehose/activity_ledger_filter.png
rename to docs/managing/firehose/activity_ledger_filter.png
diff --git a/docs/guides/configuring-guardrails/firehose/activity_ledger_notifications.png b/docs/managing/firehose/activity_ledger_notifications.png
similarity index 100%
rename from docs/guides/configuring-guardrails/firehose/activity_ledger_notifications.png
rename to docs/managing/firehose/activity_ledger_notifications.png
diff --git a/docs/guides/configuring-guardrails/firehose/index.md b/docs/managing/firehose/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/firehose/index.md
rename to docs/managing/firehose/index.md
diff --git a/docs/guides/configuring-guardrails/firehose/pipelines/index.md b/docs/managing/firehose/pipelines/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/firehose/pipelines/index.md
rename to docs/managing/firehose/pipelines/index.md
diff --git a/docs/guides/configuring-guardrails/firehose/pipelines/notifications_pipeline_graphic.png b/docs/managing/firehose/pipelines/notifications_pipeline_graphic.png
similarity index 100%
rename from docs/guides/configuring-guardrails/firehose/pipelines/notifications_pipeline_graphic.png
rename to docs/managing/firehose/pipelines/notifications_pipeline_graphic.png
diff --git a/docs/guides/using-guardrails/iam/access-keys/access-key-1.png b/docs/managing/iam/access-keys/access-key-1.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/access-keys/access-key-1.png
rename to docs/managing/iam/access-keys/access-key-1.png
diff --git a/docs/guides/using-guardrails/iam/access-keys/access-key-2.png b/docs/managing/iam/access-keys/access-key-2.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/access-keys/access-key-2.png
rename to docs/managing/iam/access-keys/access-key-2.png
diff --git a/docs/guides/using-guardrails/iam/access-keys/access-key-3.png b/docs/managing/iam/access-keys/access-key-3.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/access-keys/access-key-3.png
rename to docs/managing/iam/access-keys/access-key-3.png
diff --git a/docs/guides/using-guardrails/iam/access-keys/access-key-4.png b/docs/managing/iam/access-keys/access-key-4.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/access-keys/access-key-4.png
rename to docs/managing/iam/access-keys/access-key-4.png
diff --git a/docs/guides/using-guardrails/iam/access-keys/access-key-5.png b/docs/managing/iam/access-keys/access-key-5.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/access-keys/access-key-5.png
rename to docs/managing/iam/access-keys/access-key-5.png
diff --git a/docs/guides/using-guardrails/iam/access-keys/index.md b/docs/managing/iam/access-keys/index.md
similarity index 98%
rename from docs/guides/using-guardrails/iam/access-keys/index.md
rename to docs/managing/iam/access-keys/index.md
index e637f1fe..0f835a42 100644
--- a/docs/guides/using-guardrails/iam/access-keys/index.md
+++ b/docs/managing/iam/access-keys/index.md
@@ -1,6 +1,6 @@
---
title: Generating access keys in Guardrails
-sidebar_label: Access Keys
+sidebar_label: Managing Access Keys 🛠
---
# API Access Keys in Guardrails
diff --git a/docs/guides/using-guardrails/iam/administrators/index.md b/docs/managing/iam/administrators/index.md
similarity index 100%
rename from docs/guides/using-guardrails/iam/administrators/index.md
rename to docs/managing/iam/administrators/index.md
diff --git a/docs/guides/using-guardrails/iam/advanced/index.md b/docs/managing/iam/advanced/index.md
similarity index 100%
rename from docs/guides/using-guardrails/iam/advanced/index.md
rename to docs/managing/iam/advanced/index.md
diff --git a/docs/concepts/iam/authentication/index.md b/docs/managing/iam/authentication/index.md
similarity index 100%
rename from docs/concepts/iam/authentication/index.md
rename to docs/managing/iam/authentication/index.md
diff --git a/docs/concepts/iam/identity/index.md b/docs/managing/iam/identity/index.md
similarity index 100%
rename from docs/concepts/iam/identity/index.md
rename to docs/managing/iam/identity/index.md
diff --git a/docs/concepts/iam/index.md b/docs/managing/iam/index.md
similarity index 100%
rename from docs/concepts/iam/index.md
rename to docs/managing/iam/index.md
diff --git a/docs/guides/using-guardrails/iam/index.md b/docs/managing/iam/index.md.og
similarity index 100%
rename from docs/guides/using-guardrails/iam/index.md
rename to docs/managing/iam/index.md.og
diff --git a/docs/managing/iam/permission-assignment/advanced.png b/docs/managing/iam/permission-assignment/advanced.png
new file mode 100644
index 00000000..328bdadd
Binary files /dev/null and b/docs/managing/iam/permission-assignment/advanced.png differ
diff --git a/docs/managing/iam/permission-assignment/demo-user-grants.png b/docs/managing/iam/permission-assignment/demo-user-grants.png
new file mode 100644
index 00000000..d5e5e283
Binary files /dev/null and b/docs/managing/iam/permission-assignment/demo-user-grants.png differ
diff --git a/docs/managing/iam/permission-assignment/index.md b/docs/managing/iam/permission-assignment/index.md
new file mode 100644
index 00000000..5e97a961
--- /dev/null
+++ b/docs/managing/iam/permission-assignment/index.md
@@ -0,0 +1,95 @@
+---
+title: Assigning Permissions
+sidebar_label: Assigning Permissions 🛠
+---
+
+# Assigning Permissions in Guardrails
+
+Permissions in Guardrails are extremely flexible to allow organizations to be
+granular in their application. A user can have permissions such as AWS/Admin,
+GCP/Metadata, or Turbot/Admin assigned at any level in the Guardrails hierarchy.
+However, there are prerequisites to assigning rights to specific user profiles.
+
+Each directory type will have slightly different methods of creating users, but
+all profiles require users to log in to initiate Guardrails profile creation.
+Without a profile for the specific user, PERMISSIONS CANNOT BE ASSIGNED.
+
+For more information regarding directory creation, head on over to our
+[directories guide](/guardrails/docs/guides/configuring-guardrails/directories/local#guardrails-local-directories).
+
+For a general Guardrails IAM overview, check out the
+[IAM concepts page](concepts/iam).
+
+## Permissions Tab
+
+Administrators will assign permissions via the **Permissions Tab**.
+
+
+
+The default view is of **Active Grants**. These are currently assigned
+permissions.
+
+By selecting the **Identity** option on the left and typing in a profile name, a
+list of matching profiles along with their grants appears.
+
+
+
+We can see that the Demo User is in the **Turbot Local** directory with
+`Turbot/Owner` and `Turbot/Admin` permissions at the root level, along with
+`AWS/User` permissions in the `aaa-punisher > punisher-aaa` account.
+
+## Turbot Local Directory
+
+1. [Create the user](guides/iam/user-mgt) in the local directory.
+2. Log into Guardrails with the credentials provided for the new user. This creates
+ the profile in Guardrails.
+3. Using a profile with `Turbot/Owner` permissions. navigate back to the
+ **Permissions** tab and click on the green button titled **Grant
+ Permission**.
+4. Select **Resource Scope** for appropriate level (i.e. Turbot, account, or
+ folder) to assign rights to the local user using the Browse button. Once the
+ correct level is selected, click **Select**.
+5. Start typing the user name into the **Identities** field, then select the
+ correct user. Multiple users can be assigned permissions at the same time.
+6. Start typing the grant level to assign into the **Permissions** field. For
+ example, `Turbot` will bring up a list of valid Guardrails permissions. Multiple
+ permissions can be assigned at the same time.
+7. Click **Grant** to confirm the permission assignment.
+
+## SAML and Google Directories
+
+1. After [directory setup](/guardrails/docs/guides/configuring-guardrails/directories/local#guardrails-local-directories), users will be able to log into
+ the Guardrails console. Users MUST sign in prior to initial permission
+ assignment. Logging in with a user for the first time creates the associated
+ profile in Guardrails.
+2. Using a profile with `Turbot/Owner` permissions. navigate back to the
+ **Permissions** tab and click on the green button titled **Grant
+ Permission**.
+3. Select **Resource Scope** for appropriate level (i.e. Turbot, account, or
+ folder) to assign rights to the local user using the Browse button. Once the
+ correct level is selected, click **Select**.
+4. Start typing the user or group name into the **Identities** field, then
+ select the correct user. Multiple users and/or groups can be assigned
+ permissions at the same time.
+5. Start typing the grant level to assign into the **Permissions** field. For
+ example, `Turbot` will bring up a list of valid Guardrails permissions. Multiple
+ permissions can be assigned at the same time.
+6. Click **Grant** to confirm the permission assignment.
+
+## Advanced Grant Settings
+
+
+
+### Activate
+
+By default, permissions are activated immediately upon clicking the **Grant**
+button. Administrators can toggle this option to save the grant but delay
+activation for a later time.
+
+### Expiration
+
+Grants can be set to expire after a defined amount of time. The drop down menu
+has many default time frames, from 1 hour to 1 year, as well as the ability to
+set a custom expiration time and date. This is extremely useful when
+troubleshooting accounts with strict access requirements, or temporarily
+elevating a developers permission set in a cloud account for development.
diff --git a/docs/managing/iam/permission-assignment/permissions-tab.png b/docs/managing/iam/permission-assignment/permissions-tab.png
new file mode 100644
index 00000000..e3f78b14
Binary files /dev/null and b/docs/managing/iam/permission-assignment/permissions-tab.png differ
diff --git a/docs/concepts/iam/permissions/index.md b/docs/managing/iam/permissions/index.md
similarity index 99%
rename from docs/concepts/iam/permissions/index.md
rename to docs/managing/iam/permissions/index.md
index a2f54c2d..f2af5b0c 100644
--- a/docs/concepts/iam/permissions/index.md
+++ b/docs/managing/iam/permissions/index.md
@@ -195,4 +195,4 @@ guidelines for defining which level to assign a given action:
- Managing directories and authentication
- Does the technology have a mode that is completely unrestricted? If so, this
should be reserved for the **SuperUser** level. Examples include:
- - Root Login / sudo to root
+ - Root Login / sudo to root
\ No newline at end of file
diff --git a/docs/concepts/iam/permissions/turbot-iam.png b/docs/managing/iam/permissions/turbot-iam.png
similarity index 100%
rename from docs/concepts/iam/permissions/turbot-iam.png
rename to docs/managing/iam/permissions/turbot-iam.png
diff --git a/docs/guides/using-guardrails/iam/user-mgt/create-user.png b/docs/managing/iam/user-mgt/create-user.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/user-mgt/create-user.png
rename to docs/managing/iam/user-mgt/create-user.png
diff --git a/docs/guides/using-guardrails/iam/user-mgt/create.png b/docs/managing/iam/user-mgt/create.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/user-mgt/create.png
rename to docs/managing/iam/user-mgt/create.png
diff --git a/docs/guides/using-guardrails/iam/user-mgt/created-user.png b/docs/managing/iam/user-mgt/created-user.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/user-mgt/created-user.png
rename to docs/managing/iam/user-mgt/created-user.png
diff --git a/docs/guides/using-guardrails/iam/user-mgt/directory.png b/docs/managing/iam/user-mgt/directory.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/user-mgt/directory.png
rename to docs/managing/iam/user-mgt/directory.png
diff --git a/docs/guides/using-guardrails/iam/user-mgt/index.md b/docs/managing/iam/user-mgt/index.md
similarity index 97%
rename from docs/guides/using-guardrails/iam/user-mgt/index.md
rename to docs/managing/iam/user-mgt/index.md
index 5b2af0a2..455ff159 100644
--- a/docs/guides/using-guardrails/iam/user-mgt/index.md
+++ b/docs/managing/iam/user-mgt/index.md
@@ -1,6 +1,6 @@
---
title: Adding users to the local directory
-sidebar_label: Adding users
+sidebar_label: Adding users 🛠
---
# Adding users to the local directory
diff --git a/docs/guides/using-guardrails/iam/user-mgt/password.png b/docs/managing/iam/user-mgt/password.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/user-mgt/password.png
rename to docs/managing/iam/user-mgt/password.png
diff --git a/docs/guides/using-guardrails/iam/user-mgt/users.png b/docs/managing/iam/user-mgt/users.png
similarity index 100%
rename from docs/guides/using-guardrails/iam/user-mgt/users.png
rename to docs/managing/iam/user-mgt/users.png
diff --git a/docs/guides/configuring-guardrails/index.md b/docs/managing/index.md
similarity index 97%
rename from docs/guides/configuring-guardrails/index.md
rename to docs/managing/index.md
index 54e8b252..aa642cb6 100644
--- a/docs/guides/configuring-guardrails/index.md
+++ b/docs/managing/index.md
@@ -1,8 +1,8 @@
---
-title: Configuring Guardrails
+title: Managing Guardrails
---
-# Configuring Guardrails
+# Managing Guardrails
This section provides how-to guides for common tasks that will help you effectively set up, modify, and manage configurations within Guardrails. Each guide covers specific actions, from initial mod installations to complex policy management.
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-login.png b/docs/managing/mods/auto-mod-update/guardrails-console-login.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-login.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-login.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-assign-policy-values.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-assign-policy-values.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-assign-policy-values.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-assign-policy-values.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-create-new-policy.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-create-new-policy.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-create-new-policy.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-create-new-policy.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-create-policy.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-create-policy.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-create-policy.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-create-policy.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy-value.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy-value.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy-value.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy-value.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-select-schedule-policy.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-settings-check.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-settings-check.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-settings-check.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-settings-check.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-sub-policies.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-sub-policies.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update-sub-policies.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update-sub-policies.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update.png b/docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update.png
similarity index 100%
rename from docs/guides/configuring-guardrails/auto-mod-update/guardrails-console-policies-auto-update.png
rename to docs/managing/mods/auto-mod-update/guardrails-console-policies-auto-update.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-navigate-admin-panel.png b/docs/managing/mods/auto-mod-update/guardrails-navigate-admin-panel.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-navigate-admin-panel.png
rename to docs/managing/mods/auto-mod-update/guardrails-navigate-admin-panel.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-navigate-mods.png b/docs/managing/mods/auto-mod-update/guardrails-navigate-mods.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-navigate-mods.png
rename to docs/managing/mods/auto-mod-update/guardrails-navigate-mods.png
diff --git a/docs/guides/configuring-guardrails/auto-mod-update/index.md b/docs/managing/mods/auto-mod-update/index.md
similarity index 77%
rename from docs/guides/configuring-guardrails/auto-mod-update/index.md
rename to docs/managing/mods/auto-mod-update/index.md
index 9a742696..76c59bc4 100644
--- a/docs/guides/configuring-guardrails/auto-mod-update/index.md
+++ b/docs/managing/mods/auto-mod-update/index.md
@@ -1,6 +1,6 @@
---
title: Auto Mod Update
-sidebar_label: Auto Mod Update
+sidebar_label: Auto Mod Update 🛠
---
# Automated Mod Updates
@@ -17,17 +17,17 @@ In this guide, you will:
Log into the Guardrails console with provided local credentials or by using any SAML based login.
-
+
## Step 2: Find Policy
Navigate to **Policies** tab, search for `Auto Update` text.
-
+
Select the **Turbot > Mod > Auto Update policy**, which will display a set of related policies, as shown below.
-
+
| Settings | Description |
@@ -43,14 +43,14 @@ Select the **Turbot > Mod > Auto Update policy**, which will display a set of re
Select **New Policy Setting** to open the `Create Policy Setting` window.
-
+
Assign the policy values as `Turbot` for `Resource`.
> [!NOTE]
> The policy is applied at the `Turbot` resource level.
-
+
| Settings | Description |
@@ -64,15 +64,15 @@ Assign the policy values as `Turbot` for `Resource`.
Select `Turbot > Mod > Auto Update` **Schedule** policy.
-
+
Create new schedule policy by selecting **New Policy Setting**.
-
+
Set the desired value in the schedule policy for `Turbot > Mod > Auto Update` control to check for and execute the mod update to the recommended version.
-
+
> [!NOTE]
> Turbot assumes UTC.
@@ -82,7 +82,7 @@ Set the desired value in the schedule policy for `Turbot > Mod > Auto Update` co
- [ ] Check if the above policies are reflected in Guardrails console.
-
+
## Next Steps
diff --git a/docs/managing/mods/index.md b/docs/managing/mods/index.md
new file mode 100644
index 00000000..0ba44e90
--- /dev/null
+++ b/docs/managing/mods/index.md
@@ -0,0 +1,3 @@
+---
+title: Mods
+---
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-console-login.png b/docs/managing/mods/install-mod/guardrails-console-login.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-console-login.png
rename to docs/managing/mods/install-mod/guardrails-console-login.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-control-type-verify.png b/docs/managing/mods/install-mod/guardrails-control-type-verify.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-control-type-verify.png
rename to docs/managing/mods/install-mod/guardrails-control-type-verify.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-install-mod-action.png b/docs/managing/mods/install-mod/guardrails-install-mod-action.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-install-mod-action.png
rename to docs/managing/mods/install-mod/guardrails-install-mod-action.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-installed-mod-health.png b/docs/managing/mods/install-mod/guardrails-installed-mod-health.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-installed-mod-health.png
rename to docs/managing/mods/install-mod/guardrails-installed-mod-health.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-mod-install-verify.png b/docs/managing/mods/install-mod/guardrails-mod-install-verify.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-mod-install-verify.png
rename to docs/managing/mods/install-mod/guardrails-mod-install-verify.png
diff --git a/docs/guides/configuring-guardrails/install-mod/guardrails-mod-install.png b/docs/managing/mods/install-mod/guardrails-mod-install.png
similarity index 100%
rename from docs/guides/configuring-guardrails/install-mod/guardrails-mod-install.png
rename to docs/managing/mods/install-mod/guardrails-mod-install.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-navigate-admin-panel.png b/docs/managing/mods/install-mod/guardrails-navigate-admin-panel.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-navigate-admin-panel.png
rename to docs/managing/mods/install-mod/guardrails-navigate-admin-panel.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-navigate-mods.png b/docs/managing/mods/install-mod/guardrails-navigate-mods.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-navigate-mods.png
rename to docs/managing/mods/install-mod/guardrails-navigate-mods.png
diff --git a/docs/guides/configuring-guardrails/install-mod/index.md b/docs/managing/mods/install-mod/index.md
similarity index 76%
rename from docs/guides/configuring-guardrails/install-mod/index.md
rename to docs/managing/mods/install-mod/index.md
index 3338cb06..9fa77fd7 100644
--- a/docs/guides/configuring-guardrails/install-mod/index.md
+++ b/docs/managing/mods/install-mod/index.md
@@ -1,6 +1,6 @@
---
title: Install Mods
-sidebar_label: Install Mods
+sidebar_label: Install Mods 🛠
---
# Install a Mod
@@ -20,27 +20,27 @@ Guardrails is designed to enable organizations to selectively install policies,
Log into the Guardrails console with provided local credentials or by using any SAML based login.
-
+
## Step 2: Navigate to Mods
Choose **Admin** from the top right corner.
-
+
Select **Mods**.
-
+
## Step 3: Install Mod
The **Mods** page displays the list of mods that are installed in your workspace. Select **Install Mod** to install a mod.
-
+
Search for the desired mod to install. Usually you would want to select the latest recommended version. Select **Install Mod**.
-
+
## Step 4: Monitor Installation
@@ -48,17 +48,17 @@ You have initiated the installation of the new Guardrails mod.
- [ ] Verify the mod name and version that appears in the list.
-
+
## Step 5: Review
- [ ] The Mod Health is in an **OK** state, indicating successful installation.
-
+
- [ ] The Control Types associated with the mod are available and displayed under Controls.
-
+
## Next Steps
diff --git a/docs/guides/configuring-guardrails/mod-lambda-cleanup/index.md b/docs/managing/mods/mod-lambda-cleanup/index.md
similarity index 97%
rename from docs/guides/configuring-guardrails/mod-lambda-cleanup/index.md
rename to docs/managing/mods/mod-lambda-cleanup/index.md
index 7d653996..4cc9ed49 100644
--- a/docs/guides/configuring-guardrails/mod-lambda-cleanup/index.md
+++ b/docs/managing/mods/mod-lambda-cleanup/index.md
@@ -1,6 +1,6 @@
---
-title: "Mod Lambda Cleanup"
-sidebar_label: "Mod Lambda Cleanup"
+title: Mod Lambda Cleanup
+sidebar_label: Mod Lambda Cleanup 🛠
---
# Enabling Mod Lambda Cleanup
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-console-login.png b/docs/managing/mods/uninstall-mod/guardrails-console-login.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-console-login.png
rename to docs/managing/mods/uninstall-mod/guardrails-console-login.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-installed-mod-list.png b/docs/managing/mods/uninstall-mod/guardrails-installed-mod-list.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-installed-mod-list.png
rename to docs/managing/mods/uninstall-mod/guardrails-installed-mod-list.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-mod-search.png b/docs/managing/mods/uninstall-mod/guardrails-mod-search.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-mod-search.png
rename to docs/managing/mods/uninstall-mod/guardrails-mod-search.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-navigate-admin-panel.png b/docs/managing/mods/uninstall-mod/guardrails-navigate-admin-panel.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-navigate-admin-panel.png
rename to docs/managing/mods/uninstall-mod/guardrails-navigate-admin-panel.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-navigate-mods.png b/docs/managing/mods/uninstall-mod/guardrails-navigate-mods.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-navigate-mods.png
rename to docs/managing/mods/uninstall-mod/guardrails-navigate-mods.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-select-uninstall.png b/docs/managing/mods/uninstall-mod/guardrails-select-uninstall.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-select-uninstall.png
rename to docs/managing/mods/uninstall-mod/guardrails-select-uninstall.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-uninstall-confirm.png b/docs/managing/mods/uninstall-mod/guardrails-uninstall-confirm.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-uninstall-confirm.png
rename to docs/managing/mods/uninstall-mod/guardrails-uninstall-confirm.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/guardrails-uninstall-verify.png b/docs/managing/mods/uninstall-mod/guardrails-uninstall-verify.png
similarity index 100%
rename from docs/guides/configuring-guardrails/uninstall-mod/guardrails-uninstall-verify.png
rename to docs/managing/mods/uninstall-mod/guardrails-uninstall-verify.png
diff --git a/docs/guides/configuring-guardrails/uninstall-mod/index.md b/docs/managing/mods/uninstall-mod/index.md
similarity index 74%
rename from docs/guides/configuring-guardrails/uninstall-mod/index.md
rename to docs/managing/mods/uninstall-mod/index.md
index 0b6e342b..87d4111d 100644
--- a/docs/guides/configuring-guardrails/uninstall-mod/index.md
+++ b/docs/managing/mods/uninstall-mod/index.md
@@ -1,6 +1,6 @@
---
title: Uninstall Mods
-sidebar_label: Uninstall Mods
+sidebar_label: Uninstall Mods 🛠
---
# Uninstall a Mod
@@ -22,37 +22,37 @@ Mods may need to be uninstalled when requirements change or when there is no lon
Log into the Guardrails console.
-
+
## Step 2: Navigate to Mods
Choose **Admin** from the top right corner.
-
+
Select the **Mods** tab.
-
+
## Step 3: Uninstall Mod
The **Mods** page displays the list of mods that are installed in your workspace. Search and select the mod to be uninstalled.
-
+
Select the **Uninstall** option from the top right.
-
+
Enter the mod name to confirm and select **Uninstall**.
-
+
## Step 4: Review
- [ ] Verify the mod is no longer listed among the installed mods.
-
+
## Next Steps
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-console-login.png b/docs/managing/mods/update-mod/guardrails-console-login.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-console-login.png
rename to docs/managing/mods/update-mod/guardrails-console-login.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-mod-health-ok.png b/docs/managing/mods/update-mod/guardrails-mod-health-ok.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-mod-health-ok.png
rename to docs/managing/mods/update-mod/guardrails-mod-health-ok.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-mod-search.png b/docs/managing/mods/update-mod/guardrails-mod-search.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-mod-search.png
rename to docs/managing/mods/update-mod/guardrails-mod-search.png
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-navigate-admin-panel.png b/docs/managing/mods/update-mod/guardrails-navigate-admin-panel.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-navigate-admin-panel.png
rename to docs/managing/mods/update-mod/guardrails-navigate-admin-panel.png
diff --git a/docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-navigate-mods.png b/docs/managing/mods/update-mod/guardrails-navigate-mods.png
similarity index 100%
rename from docs/guides/hosting-guardrails/monitoring/check-mod-health/guardrails-navigate-mods.png
rename to docs/managing/mods/update-mod/guardrails-navigate-mods.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-select-update.png b/docs/managing/mods/update-mod/guardrails-select-update.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-select-update.png
rename to docs/managing/mods/update-mod/guardrails-select-update.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-update-latest.png b/docs/managing/mods/update-mod/guardrails-update-latest.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-update-latest.png
rename to docs/managing/mods/update-mod/guardrails-update-latest.png
diff --git a/docs/guides/configuring-guardrails/update-mod/guardrails-update-mod-action.png b/docs/managing/mods/update-mod/guardrails-update-mod-action.png
similarity index 100%
rename from docs/guides/configuring-guardrails/update-mod/guardrails-update-mod-action.png
rename to docs/managing/mods/update-mod/guardrails-update-mod-action.png
diff --git a/docs/guides/configuring-guardrails/update-mod/index.md b/docs/managing/mods/update-mod/index.md
similarity index 76%
rename from docs/guides/configuring-guardrails/update-mod/index.md
rename to docs/managing/mods/update-mod/index.md
index 1fea59a9..7b65560c 100644
--- a/docs/guides/configuring-guardrails/update-mod/index.md
+++ b/docs/managing/mods/update-mod/index.md
@@ -1,6 +1,6 @@
---
title: Update Mods
-sidebar_label: Update Mods
+sidebar_label: Update Mods 🛠
---
# Update a Mod
@@ -20,7 +20,7 @@ Guardrails is designed to enable organizations to selectively install policies,
Log into the Guardrails console.
-
+
docs/guides/configuring-guardrails/update-mod
@@ -28,37 +28,37 @@ docs/guides/configuring-guardrails/update-mod
Choose **Admin** from the top right corner.
-
+
Select the **Mods** tab.
-
+
## Step 3: Find Mod
From the **Mods** page, search the mod to be updated. The availability of an update is typically indicated by the `UPDATE AVAILABLE` Status.
-
+
## Step 4: Update Mod
Select the mod and choose **Update**.
-
+
Select the version to update, with the latest version recommended. choose **Update Mod**.
-
+
## Step 5: Review
- [ ] The Updated mod appears in the list with the latest version and indicated by the `LATEST` Status.
-
+
- [ ] Select the mod and verify that the health is in an **OK** state, indicating the mod is healthy.
-
+
## Next Steps
diff --git a/docs/guides/using-guardrails/notifications/filter-rules.md b/docs/managing/notifications/filter-rules.md
similarity index 100%
rename from docs/guides/using-guardrails/notifications/filter-rules.md
rename to docs/managing/notifications/filter-rules.md
diff --git a/docs/guides/using-guardrails/notifications/index.md b/docs/managing/notifications/index.md
similarity index 85%
rename from docs/guides/using-guardrails/notifications/index.md
rename to docs/managing/notifications/index.md
index 37d5d8f1..315113de 100644
--- a/docs/guides/using-guardrails/notifications/index.md
+++ b/docs/managing/notifications/index.md
@@ -58,6 +58,42 @@ There is also a special `Account/CC` level that can be used to send notification
```
+### Routing to Profiles
+
+You can send notifications to Guardrails user `profiles` based on the permissions of the resource that triggered the event. Unlike email addresses and webhooks, which define a static target, profiles are routed dynamically; a notification rule states to route to a profile, and when the event occurs, the resource context is used to determine where to send the notification. Guardrails will send the notification to all users who have been granted the specified permissions via the email address in their profile.
+
+```yaml
+- rules: "NOTIFY $.oldControl.state:ok $.control.state:alarm"
+ profiles":
+ - "Account/Owner"
+ - "Account/Admin"
+```
+
+Commonly, profiles are used to route notifications to the account team for the resource in . You can use any permissions for notification routing, though.
+
+```yaml
+- rules: "NOTIFY $.oldControl.state:ok $.control.state:alarm"
+ profiles":
+ - "AWS/Admin"
+ - "Turbot/Owner"
+```
+
+The `*` wildcard is supported. For example, you can send notifications to anyone with `Account` permissions.
+```yaml
+- rules: "NOTIFY $.oldControl.state:ok $.control.state:alarm"
+ profiles":
+ - "Account/*"
+```
+
+There is also a special `Account/CC` level that can be used to send notifications to a list of addresses defined on a per-account basis via the `Turbot > Notifications > CC` policy. If you enable the resource-based routing via the `Turbot > Notifications > CC > Tag` policy, you can even route these notifications to specific addresses based on tags on the resource.
+
+```yaml
+- rules: "NOTIFY $.oldControl.state:ok $.control.state:alarm"
+ profiles":
+ - "Account/CC"
+```
+
+
## Notification Triggers
### Control Triggers
diff --git a/docs/guides/using-guardrails/notifications/templates.md b/docs/managing/notifications/templates.md
similarity index 100%
rename from docs/guides/using-guardrails/notifications/templates.md
rename to docs/managing/notifications/templates.md
diff --git a/docs/guides/using-guardrails/nunjucks/approve.png b/docs/managing/nunjucks/approve.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/approve.png
rename to docs/managing/nunjucks/approve.png
diff --git a/docs/guides/using-guardrails/nunjucks/error1.png b/docs/managing/nunjucks/error1.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/error1.png
rename to docs/managing/nunjucks/error1.png
diff --git a/docs/guides/using-guardrails/nunjucks/error2.png b/docs/managing/nunjucks/error2.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/error2.png
rename to docs/managing/nunjucks/error2.png
diff --git a/docs/guides/using-guardrails/nunjucks/error3.png b/docs/managing/nunjucks/error3.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/error3.png
rename to docs/managing/nunjucks/error3.png
diff --git a/docs/guides/using-guardrails/nunjucks/error4.png b/docs/managing/nunjucks/error4.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/error4.png
rename to docs/managing/nunjucks/error4.png
diff --git a/docs/guides/using-guardrails/nunjucks/error5.png b/docs/managing/nunjucks/error5.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/error5.png
rename to docs/managing/nunjucks/error5.png
diff --git a/docs/guides/using-guardrails/nunjucks/error6.png b/docs/managing/nunjucks/error6.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/error6.png
rename to docs/managing/nunjucks/error6.png
diff --git a/docs/guides/using-guardrails/nunjucks/index.md b/docs/managing/nunjucks/index.md
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/index.md
rename to docs/managing/nunjucks/index.md
diff --git a/docs/guides/using-guardrails/nunjucks/multi-tag.png b/docs/managing/nunjucks/multi-tag.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/multi-tag.png
rename to docs/managing/nunjucks/multi-tag.png
diff --git a/docs/guides/using-guardrails/nunjucks/object-object.png b/docs/managing/nunjucks/object-object.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/object-object.png
rename to docs/managing/nunjucks/object-object.png
diff --git a/docs/guides/using-guardrails/nunjucks/regex1.png b/docs/managing/nunjucks/regex1.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/regex1.png
rename to docs/managing/nunjucks/regex1.png
diff --git a/docs/guides/using-guardrails/nunjucks/regex2.png b/docs/managing/nunjucks/regex2.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/regex2.png
rename to docs/managing/nunjucks/regex2.png
diff --git a/docs/guides/using-guardrails/nunjucks/regex3.png b/docs/managing/nunjucks/regex3.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/regex3.png
rename to docs/managing/nunjucks/regex3.png
diff --git a/docs/guides/using-guardrails/nunjucks/tag-value.png b/docs/managing/nunjucks/tag-value.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/tag-value.png
rename to docs/managing/nunjucks/tag-value.png
diff --git a/docs/guides/using-guardrails/nunjucks/tag1.png b/docs/managing/nunjucks/tag1.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/tag1.png
rename to docs/managing/nunjucks/tag1.png
diff --git a/docs/guides/using-guardrails/nunjucks/tags.png b/docs/managing/nunjucks/tags.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/tags.png
rename to docs/managing/nunjucks/tags.png
diff --git a/docs/guides/using-guardrails/nunjucks/test-tag-hyphen.png b/docs/managing/nunjucks/test-tag-hyphen.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/test-tag-hyphen.png
rename to docs/managing/nunjucks/test-tag-hyphen.png
diff --git a/docs/guides/using-guardrails/nunjucks/turbot-tag.png b/docs/managing/nunjucks/turbot-tag.png
similarity index 100%
rename from docs/guides/using-guardrails/nunjucks/turbot-tag.png
rename to docs/managing/nunjucks/turbot-tag.png
diff --git a/docs/getting-started/terraform-for-everything.md b/docs/managing/terraform/index.md
similarity index 100%
rename from docs/getting-started/terraform-for-everything.md
rename to docs/managing/terraform/index.md
diff --git a/docs/faq/terraform-faq/index.md b/docs/managing/terraform/terraform-faq/index.md
similarity index 100%
rename from docs/faq/terraform-faq/index.md
rename to docs/managing/terraform/terraform-faq/index.md
diff --git a/docs/getting-started/7-minute-labs/terraform/index.md b/docs/managing/terraform/terraform-lab/index.md
similarity index 99%
rename from docs/getting-started/7-minute-labs/terraform/index.md
rename to docs/managing/terraform/terraform-lab/index.md
index 140d1594..36f71c36 100644
--- a/docs/getting-started/7-minute-labs/terraform/index.md
+++ b/docs/managing/terraform/terraform-lab/index.md
@@ -1,6 +1,7 @@
---
title: Terraform in 7 minutes
template: Documentation
+sidebar_label: Terraform in 7 minutes 🔬
nav:
title: Terraform
---
diff --git a/docs/guides/troubleshooting/index.md b/docs/managing/troubleshooting/index.md
similarity index 100%
rename from docs/guides/troubleshooting/index.md
rename to docs/managing/troubleshooting/index.md
diff --git a/docs/reference/graphql/index.md b/docs/reference/graphql/index.md
index 96360870..e0d6b069 100644
--- a/docs/reference/graphql/index.md
+++ b/docs/reference/graphql/index.md
@@ -22,4 +22,326 @@ New to GraphQL?
\ No newline at end of file
+
+
+
+## GraphQL Tips and Best Practices
+
+GraphQL allows for complex queries against the Turbot Guardrails API. Find the
+[GraphQL reference page](reference/graphql) for more information. If you are new
+to GraphQL, check out our [GraphQL 7 minute lab](7-minute-labs/graphql).
+
+### GraphQL best practices
+
+GraphQL queries and mutation have two parts: the query itself and variables.
+
+While it is possible to inline variables into the query, it is best practice to
+keep the query distinct from the variables. Dealing with templates to inject
+variables into a query is messy, especially when GraphQL can do that kind of
+merge for you.
+
+#### Bad Query
+
+```graphql
+query Profile {
+ resource(id: "joe") {
+ data
+ metadata
+ trunk {
+ title
+ }
+ turbot {
+ akas
+ id
+ tags
+ }
+ }
+}
+```
+
+Here the date is placed directly inline, making the query less flexible.
+
+#### Good Query
+
+Use instead a query with variable input:
+
+```graphql
+query Profile($id: ID!) {
+ resource(id: $id) {
+ data
+ metadata
+ trunk {
+ title
+ }
+ turbot {
+ akas
+ id
+ tags
+ }
+ }
+}
+```
+
+And for this particular query type, you can use variables as follows:
+
+```json
+{
+ "id": "joe"
+}
+```
+
+#### Expensive Queries
+
+Some queries can become expensive in larger environments. For example,
+metadata.stats.total queries can be expensive in large environments. As an
+alternative method for checking for presence, one might put `limit:1` in the
+[query filter](reference/filter) and replace
+
+```graphql
+{
+ metadata {
+ stats {
+ total
+ }
+ }
+}
+```
+
+block with
+
+```graphql
+items {
+ ...
+}
+```
+
+The advantage of `limit:1` is that Guardrails only needs to grab a single row
+instead of getting all rows to generate the `total`.
+
+## GraphQL and Permission Grants
+
+Administrators can query for all active grants in a Guardrails environment, create
+and activate grants, as well as remove grants all via the GraphQL API.
+
+### Get All Active Grants
+
+To get a straight list of all the controls, you can use the following GraphQL
+query without any variables.
+
+```graphql
+query GetListOfActiveGrants {
+ activeGrants {
+ items {
+ grant {
+ roleName
+ identity {
+ akas
+ }
+ level {
+ title
+ parentUri
+ }
+ }
+ resource {
+ akas
+ }
+ turbot {
+ id
+ }
+ }
+ }
+}
+```
+
+This will return a list of entries that could be used by Calculated Policies or
+consumed by some other application that can manipulate JSON output.
+
+### Get All Active Grants For A Specific User(s)
+
+You will use the above query but added to this query, we now have introduced a
+variable called `$filter` which will allow us to specify which users we are
+interested in.
+
+```graphql
+query GetListOfActiveGrants($filter: [String!]) {
+ activeGrants(filter: $filter) {
+ items {
+ grant {
+ roleName
+ identity {
+ akas
+ }
+ level {
+ title
+ parentUri
+ }
+ }
+ resource {
+ akas
+ }
+ turbot {
+ id
+ }
+ }
+ }
+}
+```
+
+If we want to return the results for a single user. We can use that users email
+address which is unique in Guardrails. For example, we want to see all _active_
+grants for user `omero@turbot.com`, we can use the following input:
+
+```json
+{
+ "filter": ["profile:omero@turbot.com"]
+}
+```
+
+If we would like to additional users, for example `bob@turbot.com`, you can
+modify the variable as follows:
+
+```json
+{
+ "filter": ["profile:omero@turbot.com,bob@turbot.com"]
+}
+```
+
+#### Get Individual Grant
+
+To get a specific grant, you will have to determine the ID of that grant, which
+can be found by listing all the grants and using the `turbot.id` property.
+
+```graphql
+query ActiveGrant($id: ID!) {
+ activeGrant(id: $id) {
+ validFromTimestamp
+ validToTimestamp
+ grant {
+ identity {
+ akas
+ }
+ level {
+ title
+ parent
+ }
+ }
+ }
+}
+```
+
+Here, we would like to list the grant that has the the specific id:
+`190591611773680`
+
+```json
+{
+ "id": 190591611773680
+}
+```
+
+### Creating Grants
+
+To create grants, one can use the GraphQL mutation `createGrant`. **NOTE** Any
+new grant that you create will have to activated as all grants are created but
+are by default inactive as a safety feature.
+
+```graphql
+mutation CreateGrant($input: CreateGrantInput!) {
+ createGrant(input: $input) {
+ turbot {
+ id
+ }
+ }
+}
+```
+
+Example input variable for creating grants:
+
+```json
+{
+ "input": {
+ "type": "tmod:@turbot/aws#/permission/types/aws",
+ "level": "tmod:@turbot/turbot-iam#/permission/levels/operator",
+ "resource": "tmod:@turbot/turbot#/",
+ "identitySearch": {
+ "directory": "226714953374521",
+ "type": "USER",
+ "identity": "eee@jf.turbot.local"
+ }
+ }
+}
+```
+
+Take note of `turbot.id` as this will be used to activate the grant using the
+activate grant mutation.
+
+Further details on input parameters:
+
+#### type
+
+For AWS grant use the type: tmod:@turbot/aws#/permission/types/aws For GCP grant
+use the type: tmod:@turbot/gcp#/permission/types/gcp For Azure grant use the
+type: tmod:@turbot/azure#/permission/types/azure For Guardrails grant use the type:
+tmod:@turbot/turbot-iam#/permission/types/turbot
+
+#### level
+
+For level user: tmod:@turbot/turbot-iam#/permission/levels/user For level
+operator: tmod:@turbot/turbot-iam#/permission/levels/operator For level admin:
+tmod:@turbot/turbot-iam#/permission/levels/admin For level metadata:
+tmod:@turbot/turbot-iam#/permission/levels/metadata For level owner:
+tmod:@turbot/turbot-iam#/permission/levels/owner For level readonly:
+tmod:@turbot/turbot-iam#/permission/levels/readonly For level superuser:
+tmod:@turbot/turbot-iam#/permission/levels/superuser
+
+#### resource
+
+This is the resource that you want to attach to. You can find the AKA of a
+resource using the Guardrails UI.
+
+For an AWS account the resource AKA is: arn:aws::: For a GCP
+account the resource AKA is:
+gcp://cloudresourcemanager.googleapis.com/projects/ For an Azure
+account the resource AKA is: azure:///subscriptions/ At the
+Turbot level the AKA is: tmod:@turbot/turbot#/
+
+#### identitySearch.directory
+
+This holds the details of the Directory where the Users Profile exists
+
+#### identitySearch.type
+
+This is either `GROUP` or `USER`
+
+#### identitySearch.identity
+
+This is usually the User's email address
+
+### Activate Grants
+
+You can activate grants using the mutation:
+
+```graphql
+mutation ActivateGrant($input: ActivateGrantInput!) {
+ activateGrant(input: $input) {
+ turbot {
+ id
+ }
+ }
+}
+```
+
+The id of the grant is given when creating the grant. Use this id with the
+property `input.grant`. You will also need to configure at what resource you
+want to activate the grant. This is the same as the `resource` that was used
+when creating the grant.
+
+An example input is as follows
+
+```json
+{
+ "input": {
+ "grant": "225901139222587",
+ "resource": "tmod:@turbot/turbot#/"
+ }
+}
+```
diff --git a/docs/sidebar.bak b/docs/sidebar.bak
new file mode 100644
index 00000000..5d280ecd
--- /dev/null
+++ b/docs/sidebar.bak
@@ -0,0 +1,683 @@
+[
+ "index",
+ {
+ "type": "category",
+ "id": "getting-started",
+ "link": "getting-started",
+ "items": [
+ {
+ "type": "category",
+ "id": "your-guardrails-org",
+ "link": "getting-started/your-guardrails-org",
+ "items": [
+ {
+ "type": "category",
+ "id": "user",
+ "link": "getting-started/your-guardrails-org/user",
+ "items": [
+ "getting-started/your-guardrails-org/user/sign-up",
+ "getting-started/your-guardrails-org/user/profile"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "organizations",
+ "link": "getting-started/your-guardrails-org/organizations",
+ "items": [
+ "getting-started/your-guardrails-org/organizations/setup",
+ "getting-started/your-guardrails-org/organizations/team",
+ "getting-started/your-guardrails-org/organizations/profile"
+ ]
+ }
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-aws",
+ "link": "getting-started/getting-started-aws",
+ "items": [
+ "getting-started/getting-started-aws/prepare-account",
+ "getting-started/getting-started-aws/connect-an-account",
+ "getting-started/getting-started-aws/observe-aws-activity",
+ "getting-started/getting-started-aws/enable-policy-pack",
+ "getting-started/getting-started-aws/review-account-wide",
+ "getting-started/getting-started-aws/create-static-exception",
+ "getting-started/getting-started-aws/create-calculated-exception",
+ "getting-started/getting-started-aws/send-alert-to-email",
+ "getting-started/getting-started-aws/apply-quick-action",
+ "getting-started/getting-started-aws/enable-enforcement"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-gcp",
+ "link": "getting-started/getting-started-azure",
+ "items": [
+ "getting-started/getting-started-azure/prepare-subscription",
+ "getting-started/getting-started-azure/connect-subscription",
+ "getting-started/getting-started-azure/observe-azure-activity",
+ "getting-started/getting-started-azure/enable-policy-pack",
+ "getting-started/getting-started-azure/review-subscription-wide",
+ "getting-started/getting-started-azure/create-static-exception",
+ "getting-started/getting-started-azure/create-calculated-exception",
+ "getting-started/getting-started-azure/send-alert-to-email",
+ "getting-started/getting-started-azure/apply-quick-action",
+ "getting-started/getting-started-azure/enable-enforcement"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-gcp",
+ "link": "getting-started/getting-started-gcp",
+ "items": [
+ "getting-started/getting-started-gcp/prepare-project",
+ "getting-started/getting-started-gcp/connect-project",
+ "getting-started/getting-started-gcp/observe-gcp-activity",
+ "getting-started/getting-started-gcp/enable-policy-pack",
+ "getting-started/getting-started-gcp/review-project-wide",
+ "getting-started/getting-started-gcp/create-static-exception",
+ "getting-started/getting-started-gcp/create-calculated-exception",
+ "getting-started/getting-started-gcp/send-alert-to-email",
+ "getting-started/getting-started-gcp/apply-quick-action",
+ "getting-started/getting-started-gcp/enable-enforcement"
+ ]
+ },
+
+ "getting-started/faq"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "using-guardrails",
+ "link": "using",
+ "items": [
+ {
+ "type": "category",
+ "id": "console",
+ "link": "using/console",
+ "items": [
+ {
+ "type": "category",
+ "id": "reports",
+ "link": "using/console/reports",
+ "items": [
+ "using/console/reports/find-policies-in-tbd-state",
+ "using/console/reports/export-policy-pack-as-csv"
+ ]
+ },
+ "using/console/detail-pages",
+ "using/console/searching-filtering"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "governance",
+ "link": "using/governance",
+ "items": [
+ {
+ "type": "category",
+ "id": "inventory",
+ "link": "using/governance/inventory",
+ "items": [
+ ]
+ },
+ {
+ "type": "category",
+ "id": "guardrails",
+ "link": "using/governance/guardrails",
+ "items": [
+
+ {
+ "type": "category",
+ "id": "standard-guardrails",
+ "link": "using/governance/guardrails/standard",
+ "items": [
+ "using/governance/guardrails/standard/discovery",
+ "using/governance/guardrails/standard/cmdb",
+ "using/governance/guardrails/standard/access-logging",
+ "using/governance/guardrails/standard/active",
+ "using/governance/guardrails/standard/approved",
+ "using/governance/guardrails/standard/audit-logging",
+ "using/governance/guardrails/standard/budget",
+ "using/governance/guardrails/standard/encryption-at-rest",
+ "using/governance/guardrails/standard/encryption-in-transit",
+ "using/governance/guardrails/standard/public-access",
+
+ {
+ "type": "category",
+ "id": "scheduling",
+ "link": "using/governance/guardrails/standard/scheduling",
+ "items": [
+ "using/governance/guardrails/standard/scheduling/db-scheduling-using-custom-tag"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "stacks",
+ "link": "using/governance/guardrails/standard/stacks",
+ "items": [
+ "using/governance/guardrails/standard/stacks/deploy",
+ "using/governance/guardrails/standard/stacks/destroy",
+ "using/governance/guardrails/standard/stacks/import"
+
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "configured",
+ "link": "using/governance/guardrails/standard/configured",
+ "items": [
+ "using/governance/guardrails/standard/stacks/network-stack"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "guardrails/tagging",
+ "link": "using/governance/guardrails/standard/tagging",
+ "items": [
+ "using/governance/guardrails/standard/tagging/dynamic-tags",
+ "using/governance/guardrails/standard/tagging/require-keys",
+ "using/governance/guardrails/standard/tagging/tag-casing",
+ "using/governance/guardrails/standard/tagging/tagging-helpers"
+ ]
+ },
+ "using/governance/guardrails/standard/trusted-access",
+ "using/governance/guardrails/standard/usage"
+
+ ]
+ }
+ ]
+ },
+ {
+ "type": "category",
+ "id": "rollouts",
+ "link": "using/governance/rollouts",
+ "items": [
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "using-resources",
+ "link": "using/resources",
+ "items": [
+ "using/resources/hierarchy",
+ "using/resources/types-categories",
+
+ {
+ "type": "category",
+ "id": "resource-activity",
+ "link": "using/resources/activities",
+ "items": [
+ "using/resources/observe-aws-activity"
+ ]
+ },
+ "using/resources/files",
+
+ {
+ "type": "category",
+ "id": "working-with-folders",
+ "link": "using/resources/working-with-folders",
+ "items": [
+ "using/resources/working-with-folders/create",
+ "using/resources/working-with-folders/rename",
+ "using/resources/working-with-folders/delete"
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "using-policies",
+ "link": "using/policies",
+ "items": [
+ "using/policies/hierarchy",
+
+ {
+ "type": "category",
+ "id": "using-policies-values-settings",
+ "link": "using/policies/values-settings",
+ "items": [
+ "using/policies/create-setting",
+ "using/policies/create-exception"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "calculated-policies",
+ "link": "using/policies/calculated",
+ "items": [
+ "using/policies/calculated/create-calc-setting",
+ "using/policies/calculated/calc-policy-lab",
+ "using/policies/calculated/fix-calc-policy-evaluation-errors",
+ "using/policies/calculated/calculated-faq"
+
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "policy-packs",
+ "link": "using/policies/policy-packs",
+ "items": [
+ "using/policies/policy-packs/create",
+ "using/policies/policy-packs/attach-policy-pack-to-resource"
+ ]
+ },
+
+
+ "using/policies/set-policy-lab"
+
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "using-controls",
+ "link": "using/controls",
+ "items": [
+ "using/controls/types-categories",
+ "using/controls/processes",
+ "using/controls/quick-actions",
+ "using/controls/fix-invalid-controls",
+ "using/controls/access-control-logs",
+ "using/controls/run-controls-using-scripts"
+
+ ]
+ }
+
+
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "connect",
+ "link": "connect",
+ "items": [
+ {
+ "type": "placeholder",
+ "file": "connect/aws/aws-sidebar.json"
+ },
+ {
+ "type": "placeholder",
+ "file": "connect/azure/azure-sidebar.json"
+ },
+ {
+ "type": "placeholder",
+ "file": "connect/gcp/gcp-sidebar.json"
+ },
+ {
+ "type": "placeholder",
+ "file": "connect/github/github-sidebar.json"
+ },
+ {
+ "type": "category",
+ "id": "kubernetes",
+ "link": "connect/kubernetes",
+ "items": [
+ "connect/kubernetes/import-kubernetes-cluster",
+ "connect/kubernetes/configure-queries",
+ "connect/kubernetes/decommission"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "servicenow",
+ "link": "connect/servicenow",
+ "items": [
+ "connect/servicenow/import-servicenow-instance",
+ "connect/servicenow/servicenow-to-guardrails-sync",
+ "connect/servicenow/guardrails-to-servicenow-sync",
+ "connect/servicenow/discovery-servicenow-custom-tables"
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "configuring-guardrails",
+ "link": "managing",
+ "items": [
+
+
+ {
+ "type": "category",
+ "id": "mods",
+ "link": "managing/mods",
+ "items": [
+ "managing/mods/install-mod",
+ "managing/mods/update-mod",
+ "managing/mods/uninstall-mod",
+ "managing/mods/auto-mod-update",
+ "managing/mods/mod-lambda-cleanup"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "terraform",
+ "link": "managing/terraform",
+ "items": [
+ "managing/terraform/terraform-lab",
+ "managing/terraform/terraform-faq"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "iam",
+ "link": "managing/iam",
+ "items": [
+ {
+ "type": "category",
+ "id": "iam-authentication",
+ "link": "managing/iam/authentication",
+ "items": [
+ "managing/iam/identity",
+ {
+ "type": "category",
+ "id": "directories",
+ "link": "managing/directories",
+ "items": [
+ "managing/directories/aws-sso",
+ "managing/directories/azure-ad",
+ "managing/directories/google",
+ "managing/directories/okta",
+ "managing/directories/onelogin",
+ "managing/directories/ldap-ldaps",
+ "managing/directories/local",
+ "managing/directories/pingid"
+ ]
+ },
+ "managing/iam/user-mgt",
+ "managing/iam/access-keys"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "iam-permissions",
+ "link": "managing/iam/permissions",
+ "items": [
+ "managing/iam/permission-assignment"
+ ]
+ },
+
+ "managing/iam/administrators",
+ "managing/iam/advanced"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "notifications",
+ "link": "managing/notifications",
+ "items": [
+ "managing/notifications/filter-rules",
+ "managing/notifications/templates"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "firehose",
+ "link": "managing/firehose",
+ "items": ["managing/firehose/pipelines"]
+ },
+
+ "managing/ai-tools",
+ "managing/activity-retention",
+ "managing/change-window",
+
+
+ {
+ "type": "category",
+ "id": "managing/faq",
+ "link": "managing/faq",
+ "items": [
+ "managing/faq/general-faq",
+ {
+ "type": "category",
+ "id": "managing/faq/workspace-faq",
+ "link": "managing/faq/workspace-faq",
+ "items": ["managing/faq/workspace-faq/key_rotation"]
+ }
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "hosting-guardrails",
+ "link": "hosting",
+ "items": [
+ "hosting/architecture",
+ {
+ "type": "category",
+ "id": "installation",
+ "link": "hosting/installation",
+ "items": [
+ {
+ "type": "category",
+ "id": "pre-installation",
+ "link": "hosting/installation/pre-installation",
+ "items": [
+ "hosting/installation/pre-installation/checklist",
+ "hosting/installation/pre-installation/networking",
+ "hosting/installation/pre-installation/service-catalog",
+ "hosting/installation/pre-installation/import-portfolio",
+ "hosting/installation/pre-installation/external-role",
+ "hosting/installation/pre-installation/admin-permissions",
+ "hosting/installation/pre-installation/cost-estimate"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "install-tef",
+ "link": "hosting/installation/install-tef",
+ "items": [
+ "hosting/installation/install-tef/install-tef-into-new-vpc",
+ "hosting/installation/install-tef/install-tef-into-existing-vpc"
+ ]
+ },
+ "hosting/installation/install-ted",
+ "hosting/installation/install-te",
+ "hosting/installation/workspace-manager",
+ "hosting/installation/workspace-login",
+ {
+ "type": "category",
+ "id": "post-installation",
+ "link": "hosting/installation/post-installation",
+ "items": [
+ "hosting/installation/post-installation/create-ted-critical-alarms",
+ "hosting/installation/post-installation/create-te-critical-alarms"
+ ]
+ },
+ "hosting/installation/delete-te"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "updating-stacks",
+ "link": "hosting/updating-stacks",
+ "items": [
+ "hosting/updating-stacks/update-tef",
+ "hosting/updating-stacks/update-ted",
+ "hosting/updating-stacks/update-workspace",
+ "hosting/updating-stacks/domain-update",
+ "hosting/updating-stacks/general-purpose-gp3"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "troubleshooting",
+ "link": "hosting/troubleshooting",
+ "items": [
+ "hosting/troubleshooting/service-catalog-out-of-sync",
+ "hosting/troubleshooting/database-instance-not-in-available-state",
+ "hosting/troubleshooting/enable-verbose-logging",
+ "hosting/troubleshooting/peer-mod-dependency-error",
+ "hosting/troubleshooting/pause-events",
+ "hosting/troubleshooting/troubleshooting-event-handlers-aws-console",
+ "hosting/troubleshooting/troubleshooting-event-handlers-guardrails-console"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "monitoring",
+ "link": "hosting/monitoring",
+ "items": [
+ "hosting/monitoring/investigate-event-flood",
+ "hosting/monitoring/diagnose-control-error",
+ "hosting/monitoring/check-mod-health",
+ "hosting/monitoring/workspace-health-check",
+ "hosting/monitoring/monitoring-alarms",
+ "hosting/monitoring/investigate-lambda-invocation"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "disaster-recovery",
+ "link": "hosting/disaster-recovery",
+ "items": [
+ "hosting/disaster-recovery/architecture-options",
+ "hosting/disaster-recovery/hive-restore",
+ "hosting/disaster-recovery/database-upgrade",
+ "hosting/disaster-recovery/restore-workspace",
+ "hosting/disaster-recovery/multi-region-deployment",
+ "hosting/disaster-recovery/multi-region-failover"
+
+ ]
+ },
+ "hosting/FAQ"
+ ]
+ },
+
+
+
+ {
+ "type": "category",
+ "id": "reference",
+ "link": "reference",
+ "items": [
+ {
+ "type": "category",
+ "id": "reference/cli",
+ "link": "reference/cli",
+ "items": [
+ "reference/cli/installation",
+ "reference/cli/updating",
+ {
+ "type": "category",
+ "id": "reference/cli/commands",
+ "link": "reference/cli/commands",
+ "items": [
+ "reference/cli/commands/aws",
+ "reference/cli/commands/completion",
+ "reference/cli/commands/compose",
+ "reference/cli/commands/configure",
+ "reference/cli/commands/download",
+ "reference/cli/commands/file",
+ "reference/cli/commands/graphql",
+ "reference/cli/commands/inspect",
+ "reference/cli/commands/install",
+ "reference/cli/commands/login",
+ "reference/cli/commands/pack",
+ "reference/cli/commands/publish",
+ "reference/cli/commands/registry",
+ "reference/cli/commands/template",
+ "reference/cli/commands/test",
+ "reference/cli/commands/up",
+ "reference/cli/commands/vcr",
+ "reference/cli/commands/workspace"
+ ]
+ }
+ ]
+ },
+ "reference/guardrails-samples-repo",
+ {
+ "type": "category",
+ "id": "reference/terraform",
+ "link": "reference/terraform",
+ "items": ["reference/terraform/setup"]
+ },
+ {
+ "type": "category",
+ "id": "reference/filter",
+ "link": "reference/filter",
+ "items": [
+ "reference/filter/resources",
+ "reference/filter/policies",
+ "reference/filter/controls",
+ "reference/filter/notifications"
+ ]
+ },
+ "managing/nunjucks",
+ "reference/ocl",
+ {
+ "type": "category",
+ "id": "reference/graphql",
+ "link": "reference/graphql",
+ "items": [
+ "reference/graphql/graphql-lab"
+ ]
+ },
+ "reference/glossary"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "todo",
+ "link": "todo",
+ "items": [
+ "todo/ebs-volume-conversion",
+
+ {
+ "type": "category",
+ "id": "7-minute-labs",
+ "link": "todo/7-minute-labs",
+ "items": [
+ "todo/7-minute-labs/cli"
+ ]
+ },
+
+ "todo/regions"
+
+
+
+
+
+ ]
+},
+
+
+ {
+ "type": "external",
+ "id": "hub-guardrails",
+ "link": "https://hub.guardrails.turbot.com",
+ "label": "Hub"
+ },
+ {
+ "type": "external",
+ "id": "changelog",
+ "link": "https://turbot.com/guardrails/changelog",
+ "label": "Changelog"
+ }
+]
diff --git a/docs/sidebar.json b/docs/sidebar.json
index 965c00b8..563f161d 100644
--- a/docs/sidebar.json
+++ b/docs/sidebar.json
@@ -1,495 +1,725 @@
[
+ "index",
{
"type": "category",
- "link": "/",
- "id": "index",
- "items": []
- },
- {
- "type": "category",
- "id": "getting-started",
- "link": "getting-started",
+ "id": "apollo",
+ "link": "apollo",
"items": [
{
"type": "category",
- "id": "7-minute-labs",
- "link": "getting-started/7-minute-labs",
- "items": [
- "getting-started/7-minute-labs/set-policy",
- "getting-started/7-minute-labs/calc-policy",
- "getting-started/7-minute-labs/cli",
- "getting-started/7-minute-labs/graphql",
- "getting-started/7-minute-labs/terraform"
- ]
- },
- {
- "type": "category",
- "id": "getting-started-aws",
- "link": "getting-started/getting-started-aws",
- "items": [
- "getting-started/getting-started-aws/prepare-account",
- "getting-started/getting-started-aws/connect-an-account",
- "getting-started/getting-started-aws/observe-aws-activity",
- "getting-started/getting-started-aws/enable-policy-pack",
- "getting-started/getting-started-aws/review-account-wide",
- "getting-started/getting-started-aws/create-static-exception",
- "getting-started/getting-started-aws/create-calculated-exception",
- "getting-started/getting-started-aws/send-alert-to-email",
- "getting-started/getting-started-aws/apply-quick-action",
- "getting-started/getting-started-aws/enable-enforcement"
- ]
- },
- {
- "type": "category",
- "id": "getting-started-gcp",
- "link": "getting-started/getting-started-azure",
- "items": [
- "getting-started/getting-started-azure/prepare-subscription",
- "getting-started/getting-started-azure/connect-subscription",
- "getting-started/getting-started-azure/observe-azure-activity",
- "getting-started/getting-started-azure/enable-policy-pack",
- "getting-started/getting-started-azure/review-subscription-wide",
- "getting-started/getting-started-azure/create-static-exception",
- "getting-started/getting-started-azure/create-calculated-exception",
- "getting-started/getting-started-azure/send-alert-to-email",
- "getting-started/getting-started-azure/apply-quick-action",
- "getting-started/getting-started-azure/enable-enforcement"
- ]
- },
- {
- "type": "category",
- "id": "getting-started-gcp",
- "link": "getting-started/getting-started-gcp",
- "items": [
- "getting-started/getting-started-gcp/prepare-project",
- "getting-started/getting-started-gcp/connect-project",
- "getting-started/getting-started-gcp/observe-gcp-activity",
- "getting-started/getting-started-gcp/enable-policy-pack",
- "getting-started/getting-started-gcp/review-project-wide",
- "getting-started/getting-started-gcp/create-static-exception",
- "getting-started/getting-started-gcp/create-calculated-exception",
- "getting-started/getting-started-gcp/send-alert-to-email",
- "getting-started/getting-started-gcp/apply-quick-action",
- "getting-started/getting-started-gcp/enable-enforcement"
- ]
- },
- {
- "type": "category",
- "id": "your-guardrails-org",
- "link": "getting-started/your-guardrails-org",
+ "id": "getting-started",
+ "link": "getting-started",
"items": [
{
"type": "category",
- "id": "user",
- "link": "getting-started/your-guardrails-org/user",
+ "id": "your-guardrails-org",
+ "link": "getting-started/your-guardrails-org",
"items": [
- "getting-started/your-guardrails-org/user/sign-up",
- "getting-started/your-guardrails-org/user/profile"
+ {
+ "type": "category",
+ "id": "user",
+ "link": "getting-started/your-guardrails-org/user",
+ "items": [
+ "getting-started/your-guardrails-org/user/sign-up",
+ "getting-started/your-guardrails-org/user/profile"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "organizations",
+ "link": "getting-started/your-guardrails-org/organizations",
+ "items": [
+ "getting-started/your-guardrails-org/organizations/setup",
+ "getting-started/your-guardrails-org/organizations/team",
+ "getting-started/your-guardrails-org/organizations/profile"
+ ]
+ }
]
},
{
"type": "category",
- "id": "organizations",
- "link": "getting-started/your-guardrails-org/organizations",
+ "id": "getting-started-aws",
+ "link": "getting-started/getting-started-aws",
"items": [
- "getting-started/your-guardrails-org/organizations/setup",
- "getting-started/your-guardrails-org/organizations/team",
- "getting-started/your-guardrails-org/organizations/profile"
+ "getting-started/getting-started-aws/prepare-account",
+ "getting-started/getting-started-aws/connect-an-account",
+ "getting-started/getting-started-aws/observe-aws-activity",
+ "getting-started/getting-started-aws/enable-policy-pack",
+ "getting-started/getting-started-aws/review-account-wide",
+ "getting-started/getting-started-aws/create-static-exception",
+ "getting-started/getting-started-aws/create-calculated-exception",
+ "getting-started/getting-started-aws/send-alert-to-email",
+ "getting-started/getting-started-aws/apply-quick-action",
+ "getting-started/getting-started-aws/enable-enforcement"
]
- }
+ },
+ {
+ "type": "category",
+ "id": "getting-started-gcp",
+ "link": "getting-started/getting-started-azure",
+ "items": [
+ "getting-started/getting-started-azure/prepare-subscription",
+ "getting-started/getting-started-azure/connect-subscription",
+ "getting-started/getting-started-azure/observe-azure-activity",
+ "getting-started/getting-started-azure/enable-policy-pack",
+ "getting-started/getting-started-azure/review-subscription-wide",
+ "getting-started/getting-started-azure/create-static-exception",
+ "getting-started/getting-started-azure/create-calculated-exception",
+ "getting-started/getting-started-azure/send-alert-to-email",
+ "getting-started/getting-started-azure/apply-quick-action",
+ "getting-started/getting-started-azure/enable-enforcement"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-gcp",
+ "link": "getting-started/getting-started-gcp",
+ "items": [
+ "getting-started/getting-started-gcp/prepare-project",
+ "getting-started/getting-started-gcp/connect-project",
+ "getting-started/getting-started-gcp/observe-gcp-activity",
+ "getting-started/getting-started-gcp/enable-policy-pack",
+ "getting-started/getting-started-gcp/review-project-wide",
+ "getting-started/getting-started-gcp/create-static-exception",
+ "getting-started/getting-started-gcp/create-calculated-exception",
+ "getting-started/getting-started-gcp/send-alert-to-email",
+ "getting-started/getting-started-gcp/apply-quick-action",
+ "getting-started/getting-started-gcp/enable-enforcement"
+ ]
+ },
+
+ "getting-started/faq"
]
},
- "getting-started/terraform-for-everything",
- "getting-started/faq"
+ {
+ "type": "category",
+ "id": "using-guardrails",
+ "link": "using",
+ "items": [
+ {
+ "type": "category",
+ "id": "console",
+ "link": "using/console",
+ "items": [
+ {
+ "type": "category",
+ "id": "reports",
+ "link": "using/console/reports",
+ "items": [
+ "using/console/reports/find-policies-in-tbd-state",
+ "using/console/reports/export-policy-pack-as-csv"
+ ]
+ },
+ "using/console/detail-pages",
+ "using/console/searching-filtering"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "using-resources",
+ "link": "using/resources",
+ "items": [
+ "using/resources/hierarchy",
+ "using/resources/types-categories",
+ "using/resources/activities",
+ "using/resources/files",
+
+ {
+ "type": "category",
+ "id": "working-with-folders",
+ "link": "using/resources/working-with-folders",
+ "items": [
+ "using/resources/working-with-folders/create",
+ "using/resources/working-with-folders/rename",
+ "using/resources/working-with-folders/delete"
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "using-policies",
+ "link": "using/policies",
+ "items": [
+ "using/policies/hierarchy",
+
+ {
+ "type": "category",
+ "id": "using-policies-values-settings",
+ "link": "using/policies/values-settings",
+ "items": [
+ "using/policies/create-setting",
+ "using/policies/create-exception"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "calculated-policies",
+ "link": "using/policies/calculated",
+ "items": [
+ "using/policies/calculated/create-calc-setting",
+ "using/policies/calculated/calc-policy-lab",
+ "using/policies/calculated/fix-calc-policy-evaluation-errors",
+ "using/policies/calculated/calculated-faq"
+
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "policy-packs",
+ "link": "using/policies/policy-packs",
+ "items": [
+ "using/policies/policy-packs/create",
+ "using/policies/policy-packs/attach-policy-pack-to-resource"
+ ]
+ },
+
+
+ "using/policies/set-policy-lab"
+
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "using-controls",
+ "link": "using/controls",
+ "items": [
+ "using/controls/types-categories",
+ "using/controls/processes",
+ "using/controls/quick-actions",
+ "using/controls/fix-invalid-controls",
+ "using/controls/access-control-logs",
+ "using/controls/run-controls-using-scripts"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "standard-guardrails",
+ "link": "using/standard",
+ "items": [
+ "using/standard/discovery",
+ "using/standard/cmdb",
+ "using/standard/access-logging",
+ "using/standard/active",
+ "using/standard/approved",
+ "using/standard/audit-logging",
+ "using/standard/budget",
+ "using/standard/encryption-at-rest",
+ "using/standard/encryption-in-transit",
+ "using/standard/public-access",
+
+ {
+ "type": "category",
+ "id": "scheduling",
+ "link": "using/standard/scheduling",
+ "items": [
+ "using/standard/scheduling/db-scheduling-using-custom-tag"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "stacks",
+ "link": "using/standard/stacks",
+ "items": [
+ "using/standard/stacks/deploy",
+ "using/standard/stacks/destroy",
+ "using/standard/stacks/import"
+
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "configured",
+ "link": "using/standard/configured",
+ "items": [
+ "using/standard/stacks/network-stack"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "guardrails/tagging",
+ "link": "using/standard/tagging",
+ "items": [
+ "using/standard/tagging/dynamic-tags",
+ "using/standard/tagging/require-keys",
+ "using/standard/tagging/tag-casing",
+ "using/standard/tagging/tagging-helpers"
+ ]
+ },
+ "using/standard/trusted-access",
+ "using/standard/usage"
+
+ ]
+ }
+
+ ]
+ }
]
},
{
"type": "category",
- "id": "concepts",
- "link": "concepts",
+ "id": "artemis",
+ "link": "artemis",
"items": [
- "concepts/activities",
- "concepts/controls",
{
"type": "category",
- "id": "guardrails",
- "link": "concepts/guardrails",
+ "id": "artemis/getting-started",
+ "link": "artemis/getting-started",
"items": [
- "concepts/guardrails/access-logging",
- "concepts/guardrails/active",
- "concepts/guardrails/approved",
- "concepts/guardrails/audit-logging",
- "concepts/guardrails/budget",
- "concepts/guardrails/cmdb",
- "concepts/guardrails/discovery",
- "concepts/guardrails/encryption-at-rest",
- "concepts/guardrails/encryption-in-transit",
- "concepts/guardrails/public-access",
- "concepts/guardrails/scheduling",
- "concepts/guardrails/stacks",
- "concepts/guardrails/configured",
- {
+
+
+ {
"type": "category",
- "id": "guardrails/tagging",
- "link": "concepts/guardrails/tagging",
+ "id": "getting-started-aws",
+ "link": "artemis/getting-started/getting-started-aws",
"items": [
- "concepts/guardrails/tagging/dynamic-tags",
- "concepts/guardrails/tagging/require-keys",
- "concepts/guardrails/tagging/tag-casing",
- "concepts/guardrails/tagging/tagging-helpers"
+ "artemis/getting-started/getting-started-aws/import-account",
+ "artemis/getting-started/getting-started-aws/observe-aws-activity",
+ "artemis/getting-started/getting-started-aws/create-guardrail",
+ "artemis/getting-started/getting-started-aws/attach-guardrail",
+ "artemis/getting-started/getting-started-aws/mute-control",
+ "artemis/getting-started/getting-started-aws/create-calculated-exception",
+ "artemis/getting-started/getting-started-aws/send-alert-to-email",
+ "artemis/getting-started/getting-started-aws/apply-quick-action",
+ "artemis/getting-started/getting-started-aws/rollout-guardrail"
]
- },
- "concepts/guardrails/trusted-access",
- "concepts/guardrails/usage"
+ }
]
},
+
{
"type": "category",
- "id": "iam",
- "link": "concepts/iam",
+ "id": "console",
+ "link": "artemis/console",
"items": [
- "concepts/iam/authentication",
- "concepts/iam/identity",
- "concepts/iam/permissions"
]
},
+
{
"type": "category",
- "id": "policies",
- "link": "concepts/policies",
+ "id": "artemis/inventory",
+ "link": "artemis/inventory",
"items": [
- "concepts/policies/hierarchy",
- "concepts/policies/types-categories",
- "concepts/policies/values-settings",
- "concepts/policies/taxonomy",
- "concepts/policies/calculated-faq"
+ "artemis/inventory/accounts",
+ {
+ "type": "category",
+ "id": "artemis/inventory/resources",
+ "link": "artemis/inventory/resources",
+ "items": [
+
+ "artemis/inventory/resources/files",
+ "artemis/inventory/resources/observe-aws-activity"
+
+ ]
+ }
+
]
},
- "concepts/policy-packs",
- "concepts/processes",
{
"type": "category",
- "id": "resources",
- "link": "concepts/resources",
+ "id": "guardrails",
+ "link": "artemis/guardrails",
+ "items": [
+
+ {
+ "type": "category",
+ "id": "artemis/guardrails/controls",
+ "link": "artemis/guardrails/controls",
+ "items": [
+ "artemis/guardrails/controls/processes",
+ "artemis/guardrails/controls/access-control-logs"
+
+ ]
+ },
+ {
+ "type": "category",
+ "id": "artemis/guardrails/policies",
+ "link": "artemis/guardrails/policies",
+ "items": [
+
+ {
+ "type": "category",
+ "id": "artemis/guardrails/calculated-policies",
+ "link": "artemis/guardrails/policies/calculated",
+ "items": [
+ "artemis/guardrails/policies/calculated/create-calc-setting",
+ "artemis/guardrails/policies/calculated/calc-policy-lab",
+ "artemis/guardrails/policies/calculated/fix-calc-policy-evaluation-errors",
+ "artemis/guardrails/policies/calculated/calculated-faq"
+
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "standard-guardrails",
+ "link": "artemis/guardrails/standard",
+ "items": [
+ "artemis/guardrails/standard/access-logging",
+ "artemis/guardrails/standard/active",
+ "artemis/guardrails/standard/approved",
+ "artemis/guardrails/standard/audit-logging",
+ "artemis/guardrails/standard/budget",
+ "artemis/guardrails/standard/encryption-at-rest",
+ "artemis/guardrails/standard/encryption-in-transit",
+ "artemis/guardrails/standard/public-access",
+
+ {
+ "type": "category",
+ "id": "scheduling",
+ "link": "artemis/guardrails/standard/scheduling",
+ "items": [
+ "artemis/guardrails/standard/scheduling/db-scheduling-using-custom-tag"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "stacks",
+ "link": "artemis/guardrails/standard/stacks",
+ "items": [
+ "artemis/guardrails/standard/stacks/deploy",
+ "artemis/guardrails/standard/stacks/destroy",
+ "artemis/guardrails/standard/stacks/import"
+
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "configured",
+ "link": "artemis/guardrails/standard/configured",
+ "items": [
+ "artemis/guardrails/standard/stacks/network-stack"
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "guardrails/tagging",
+ "link": "artemis/guardrails/standard/tagging",
+ "items": [
+ "artemis/guardrails/standard/tagging/dynamic-tags",
+ "artemis/guardrails/standard/tagging/require-keys",
+ "artemis/guardrails/standard/tagging/tag-casing",
+ "artemis/guardrails/standard/tagging/tagging-helpers"
+ ]
+ },
+ "artemis/guardrails/standard/trusted-access",
+ "artemis/guardrails/standard/usage"
+
+ ]
+ },
+
+ "artemis/guardrails/create-guardrail",
+ "artemis/guardrails/attach-guardrail",
+ "artemis/guardrails/delete-guardrail"
+
+ ]
+ },
+ {
+ "type": "category",
+ "id": "rollouts",
+ "link": "artemis/rollouts",
+ "items": [
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "iam-permissions",
+ "link": "artemis/permissions",
"items": [
- "concepts/resources/hierarchy",
- "concepts/resources/types-categories",
- "concepts/resources/discovery"
+ "artemis/permissions/permission-assignment"
]
}
]
},
+
+
+
{
"type": "category",
- "id": "guides",
- "link": "guides",
+ "id": "connect",
+ "link": "connect",
"items": [
{
"type": "placeholder",
- "file": "guides/aws/aws-sidebar.json"
+ "file": "connect/aws/aws-sidebar.json"
},
{
"type": "placeholder",
- "file": "guides/azure/azure-sidebar.json"
+ "file": "connect/azure/azure-sidebar.json"
},
{
"type": "placeholder",
- "file": "guides/gcp/gcp-sidebar.json"
+ "file": "connect/gcp/gcp-sidebar.json"
},
{
"type": "placeholder",
- "file": "guides/github/github-sidebar.json"
+ "file": "connect/github/github-sidebar.json"
},
{
"type": "category",
"id": "kubernetes",
- "link": "guides/kubernetes",
+ "link": "connect/kubernetes",
"items": [
- "guides/kubernetes/import-kubernetes-cluster",
- "guides/kubernetes/configure-queries",
- "guides/kubernetes/decommission"
+ "connect/kubernetes/import-kubernetes-cluster",
+ "connect/kubernetes/configure-queries",
+ "connect/kubernetes/decommission"
]
},
{
"type": "category",
"id": "servicenow",
- "link": "guides/servicenow",
+ "link": "connect/servicenow",
"items": [
- "guides/servicenow/import-servicenow-instance",
- "guides/servicenow/servicenow-to-guardrails-sync",
- "guides/servicenow/guardrails-to-servicenow-sync",
- "guides/servicenow/discovery-servicenow-custom-tables"
+ "connect/servicenow/import-servicenow-instance",
+ "connect/servicenow/servicenow-to-guardrails-sync",
+ "connect/servicenow/guardrails-to-servicenow-sync",
+ "connect/servicenow/discovery-servicenow-custom-tables"
]
- },
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "configuring-guardrails",
+ "link": "managing",
+ "items": [
+
+
{
"type": "category",
- "id": "configuring-guardrails",
- "link": "guides/configuring-guardrails",
+ "id": "mods",
+ "link": "managing/mods",
"items": [
- "guides/configuring-guardrails/activity-retention",
- "guides/configuring-guardrails/install-mod",
- "guides/configuring-guardrails/update-mod",
- "guides/configuring-guardrails/uninstall-mod",
- "guides/configuring-guardrails/auto-mod-update",
- "guides/configuring-guardrails/mod-lambda-cleanup",
- "guides/configuring-guardrails/account-imports",
- {
- "type": "category",
- "id": "directories",
- "link": "guides/configuring-guardrails/directories",
- "items": [
- "guides/configuring-guardrails/directories/aws-sso",
- "guides/configuring-guardrails/directories/azure-ad",
- "guides/configuring-guardrails/directories/google",
- "guides/configuring-guardrails/directories/okta",
- "guides/configuring-guardrails/directories/onelogin",
- "guides/configuring-guardrails/directories/ldap-ldaps",
- "guides/configuring-guardrails/directories/local",
- "guides/configuring-guardrails/directories/pingid"
- ]
- },
- "guides/configuring-guardrails/ebs-volume-conversion",
- "guides/configuring-guardrails/files",
- {
- "type": "category",
- "id": "firehose",
- "link": "guides/configuring-guardrails/firehose",
- "items": ["guides/configuring-guardrails/firehose/pipelines"]
- },
- {
- "type": "category",
- "id": "managing-policies",
- "link": "guides/configuring-guardrails/managing-policies",
- "items": [
- "guides/configuring-guardrails/managing-policies/config-examples",
- "guides/configuring-guardrails/managing-policies/OCL",
- "guides/configuring-guardrails/managing-policies/YAML"
- ]
- },
- "guides/configuring-guardrails/network-stack",
- {
- "type": "category",
- "id": "policy-packs",
- "link": "guides/configuring-guardrails/policy-packs",
- "items": [
- "guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource"
- ]
- },
+ "managing/mods/install-mod",
+ "managing/mods/update-mod",
+ "managing/mods/uninstall-mod",
+ "managing/mods/auto-mod-update",
+ "managing/mods/mod-lambda-cleanup"
+ ]
+ },
- "guides/configuring-guardrails/regions",
- {
- "type": "category",
- "id": "guides/configuring-guardrails/working-with-folders",
- "link": "guides/configuring-guardrails/working-with-folders",
- "items": [
- "guides/configuring-guardrails/working-with-folders/create",
- "guides/configuring-guardrails/working-with-folders/rename",
- "guides/configuring-guardrails/working-with-folders/delete"
- ]
- },
- "guides/configuring-guardrails/change-window"
+ {
+ "type": "category",
+ "id": "terraform",
+ "link": "managing/terraform",
+ "items": [
+ "managing/terraform/terraform-lab",
+ "managing/terraform/terraform-faq"
]
},
+
{
"type": "category",
- "id": "using-guardrails",
- "link": "guides/using-guardrails",
+ "id": "iam",
+ "link": "managing/iam",
"items": [
- "guides/using-guardrails/ai-tools",
{
"type": "category",
- "id": "console",
- "link": "guides/using-guardrails/console",
+ "id": "iam-authentication",
+ "link": "managing/iam/authentication",
"items": [
+ "managing/iam/identity",
{
"type": "category",
- "id": "reports",
- "link": "guides/using-guardrails/console/reports",
+ "id": "directories",
+ "link": "managing/directories",
"items": [
- "guides/using-guardrails/console/reports/find-policies-in-tbd-state",
- "guides/using-guardrails/console/reports/export-policy-pack-as-csv"
+ "managing/directories/aws-sso",
+ "managing/directories/azure-ad",
+ "managing/directories/google",
+ "managing/directories/okta",
+ "managing/directories/onelogin",
+ "managing/directories/ldap-ldaps",
+ "managing/directories/local",
+ "managing/directories/pingid"
]
},
- "guides/using-guardrails/console/detail-pages"
+ "managing/iam/user-mgt",
+ "managing/iam/access-keys"
]
},
- "guides/using-guardrails/graphql",
{
"type": "category",
- "id": "iam",
- "link": "guides/using-guardrails/iam",
+ "id": "iam-permissions",
+ "link": "managing/iam/permissions",
"items": [
- "guides/using-guardrails/iam/administrators",
- "guides/using-guardrails/iam/user-mgt",
- "guides/using-guardrails/iam/access-keys",
- "guides/using-guardrails/iam/permission-assignment",
- "guides/using-guardrails/iam/advanced"
+ "managing/iam/permission-assignment"
]
},
- {
- "type": "placeholder",
- "file": "guides/using-guardrails/stacks/stack-sidebar.json"
- },
- {
- "type": "category",
- "id": "notifications",
- "link": "guides/using-guardrails/notifications",
- "items": [
- "guides/using-guardrails/notifications/filter-rules",
- "guides/using-guardrails/notifications/templates"
- ]
- },
- {
- "type": "category",
- "id": "scheduling",
- "link": "guides/using-guardrails/scheduling",
- "items": [
- "guides/using-guardrails/scheduling/db-scheduling-using-custom-tag"
- ]
- },
- "guides/using-guardrails/nunjucks",
- "guides/using-guardrails/quick-actions",
- "guides/using-guardrails/searching-filtering",
- {
- "type": "category",
- "id": "troubleshooting",
- "link": "guides/using-guardrails/troubleshooting",
- "items": [
- "guides/using-guardrails/troubleshooting/fix-invalid-controls",
- "guides/using-guardrails/troubleshooting/access-control-logs",
- "guides/using-guardrails/troubleshooting/fix-calc-policy-evaluation-errors",
- "guides/using-guardrails/troubleshooting/run-controls-using-scripts"
- ]
- }
+
+ "managing/iam/administrators",
+ "managing/iam/advanced"
+ ]
+ },
+
+
+ {
+ "type": "category",
+ "id": "notifications",
+ "link": "managing/notifications",
+ "items": [
+ "managing/notifications/filter-rules",
+ "managing/notifications/templates"
]
},
+
+ {
+ "type": "category",
+ "id": "firehose",
+ "link": "managing/firehose",
+ "items": ["managing/firehose/pipelines"]
+ },
+
+ "managing/ai-tools",
+ "managing/activity-retention",
+ "managing/change-window",
+
+
{
"type": "category",
- "id": "hosting-guardrails",
- "link": "guides/hosting-guardrails",
+ "id": "managing/faq",
+ "link": "managing/faq",
"items": [
- "guides/hosting-guardrails/architecture",
+ "managing/faq/general-faq",
{
"type": "category",
- "id": "installation",
- "link": "guides/hosting-guardrails/installation",
- "items": [
- {
- "type": "category",
- "id": "pre-installation",
- "link": "guides/hosting-guardrails/installation/pre-installation",
- "items": [
- "guides/hosting-guardrails/installation/pre-installation/checklist",
- "guides/hosting-guardrails/installation/pre-installation/networking",
- "guides/hosting-guardrails/installation/pre-installation/service-catalog",
- "guides/hosting-guardrails/installation/pre-installation/import-portfolio",
- "guides/hosting-guardrails/installation/pre-installation/external-role",
- "guides/hosting-guardrails/installation/pre-installation/admin-permissions",
- "guides/hosting-guardrails/installation/pre-installation/cost-estimate"
- ]
- },
- {
- "type": "category",
- "id": "install-tef",
- "link": "guides/hosting-guardrails/installation/install-tef",
- "items": [
- "guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc",
- "guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc"
- ]
- },
- "guides/hosting-guardrails/installation/install-ted",
- "guides/hosting-guardrails/installation/install-te",
- "guides/hosting-guardrails/installation/workspace-manager",
- "guides/hosting-guardrails/installation/workspace-login",
- {
- "type": "category",
- "id": "post-installation",
- "link": "guides/hosting-guardrails/installation/post-installation",
- "items": [
- "guides/hosting-guardrails/installation/post-installation/create-ted-critical-alarms",
- "guides/hosting-guardrails/installation/post-installation/create-te-critical-alarms"
- ]
- },
- "guides/hosting-guardrails/installation/delete-te"
- ]
- },
+ "id": "managing/faq/workspace-faq",
+ "link": "managing/faq/workspace-faq",
+ "items": ["managing/faq/workspace-faq/key_rotation"]
+ }
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "category",
+ "id": "hosting-guardrails",
+ "link": "hosting",
+ "items": [
+ "hosting/architecture",
+ {
+ "type": "category",
+ "id": "installation",
+ "link": "hosting/installation",
+ "items": [
{
"type": "category",
- "id": "updating-stacks",
- "link": "guides/hosting-guardrails/updating-stacks",
+ "id": "pre-installation",
+ "link": "hosting/installation/pre-installation",
"items": [
- "guides/hosting-guardrails/updating-stacks/update-tef",
- "guides/hosting-guardrails/updating-stacks/update-ted",
- "guides/hosting-guardrails/updating-stacks/update-workspace",
- "guides/hosting-guardrails/updating-stacks/domain-update",
- "guides/hosting-guardrails/updating-stacks/general-purpose-gp3"
+ "hosting/installation/pre-installation/checklist",
+ "hosting/installation/pre-installation/networking",
+ "hosting/installation/pre-installation/service-catalog",
+ "hosting/installation/pre-installation/import-portfolio",
+ "hosting/installation/pre-installation/external-role",
+ "hosting/installation/pre-installation/admin-permissions",
+ "hosting/installation/pre-installation/cost-estimate"
]
},
- "guides/hosting-guardrails/FAQ",
{
"type": "category",
- "id": "troubleshooting",
- "link": "guides/hosting-guardrails/troubleshooting",
+ "id": "install-tef",
+ "link": "hosting/installation/install-tef",
"items": [
- "guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync",
- "guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state",
- "guides/hosting-guardrails/troubleshooting/enable-verbose-logging",
- "guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error",
- "guides/hosting-guardrails/troubleshooting/pause-events",
- "guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-aws-console",
- "guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-guardrails-console"
+ "hosting/installation/install-tef/install-tef-into-new-vpc",
+ "hosting/installation/install-tef/install-tef-into-existing-vpc"
]
},
+ "hosting/installation/install-ted",
+ "hosting/installation/install-te",
+ "hosting/installation/workspace-manager",
+ "hosting/installation/workspace-login",
{
"type": "category",
- "id": "monitoring",
- "link": "guides/hosting-guardrails/monitoring",
+ "id": "post-installation",
+ "link": "hosting/installation/post-installation",
"items": [
- "guides/hosting-guardrails/monitoring/investigate-event-flood",
- "guides/hosting-guardrails/monitoring/diagnose-control-error",
- "guides/hosting-guardrails/monitoring/check-mod-health",
- "guides/hosting-guardrails/monitoring/workspace-health-check",
- "guides/hosting-guardrails/monitoring/monitoring-alarms",
- "guides/hosting-guardrails/monitoring/investigate-lambda-invocation"
+ "hosting/installation/post-installation/create-ted-critical-alarms",
+ "hosting/installation/post-installation/create-te-critical-alarms"
]
},
- {
- "type": "category",
- "id": "disaster-recovery",
- "link": "guides/hosting-guardrails/disaster-recovery",
- "items": [
- "guides/hosting-guardrails/disaster-recovery/architecture-options",
- "guides/hosting-guardrails/disaster-recovery/hive-restore",
- "guides/hosting-guardrails/disaster-recovery/database-upgrade",
- "guides/hosting-guardrails/disaster-recovery/restore-workspace",
- "guides/hosting-guardrails/disaster-recovery/multi-region-deployment",
- "guides/hosting-guardrails/disaster-recovery/multi-region-failover"
- ]
- }
+ "hosting/installation/delete-te"
]
},
- "guides/troubleshooting"
- ]
- },
- {
- "type": "category",
- "id": "faq",
- "link": "faq",
- "items": [
- "faq/aws-faq",
- "faq/azure-faq",
- "faq/gcp-faq",
- "faq/terraform-faq",
- "faq/general-faq",
{
"type": "category",
- "id": "faq/workspace-faq",
- "link": "faq/workspace-faq",
- "items": ["faq/workspace-faq/key_rotation"]
+ "id": "updating-stacks",
+ "link": "hosting/updating-stacks",
+ "items": [
+ "hosting/updating-stacks/update-tef",
+ "hosting/updating-stacks/update-ted",
+ "hosting/updating-stacks/update-workspace",
+ "hosting/updating-stacks/domain-update",
+ "hosting/updating-stacks/general-purpose-gp3"
+ ]
},
- "faq/guardrails-and-aws-scps"
+
+ {
+ "type": "category",
+ "id": "troubleshooting",
+ "link": "hosting/troubleshooting",
+ "items": [
+ "hosting/troubleshooting/service-catalog-out-of-sync",
+ "hosting/troubleshooting/database-instance-not-in-available-state",
+ "hosting/troubleshooting/enable-verbose-logging",
+ "hosting/troubleshooting/peer-mod-dependency-error",
+ "hosting/troubleshooting/pause-events",
+ "hosting/troubleshooting/troubleshooting-event-handlers-aws-console",
+ "hosting/troubleshooting/troubleshooting-event-handlers-guardrails-console"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "monitoring",
+ "link": "hosting/monitoring",
+ "items": [
+ "hosting/monitoring/investigate-event-flood",
+ "hosting/monitoring/diagnose-control-error",
+ "hosting/monitoring/check-mod-health",
+ "hosting/monitoring/workspace-health-check",
+ "hosting/monitoring/monitoring-alarms",
+ "hosting/monitoring/investigate-lambda-invocation"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "disaster-recovery",
+ "link": "hosting/disaster-recovery",
+ "items": [
+ "hosting/disaster-recovery/architecture-options",
+ "hosting/disaster-recovery/hive-restore",
+ "hosting/disaster-recovery/database-upgrade",
+ "hosting/disaster-recovery/restore-workspace",
+ "hosting/disaster-recovery/multi-region-deployment",
+ "hosting/disaster-recovery/multi-region-failover"
+
+ ]
+ },
+ "hosting/FAQ"
]
},
+
+
+
{
"type": "category",
"id": "reference",
@@ -547,16 +777,46 @@
"reference/filter/notifications"
]
},
+ "managing/nunjucks",
"reference/ocl",
{
"type": "category",
"id": "reference/graphql",
"link": "reference/graphql",
- "items": []
+ "items": [
+ "reference/graphql/graphql-lab"
+ ]
},
"reference/glossary"
]
},
+
+ {
+ "type": "category",
+ "id": "todo",
+ "link": "todo",
+ "items": [
+ "todo/ebs-volume-conversion",
+
+ {
+ "type": "category",
+ "id": "7-minute-labs",
+ "link": "todo/7-minute-labs",
+ "items": [
+ "todo/7-minute-labs/cli"
+ ]
+ },
+
+ "todo/regions"
+
+
+
+
+
+ ]
+},
+
+
{
"type": "external",
"id": "hub-guardrails",
diff --git a/docs/sidebar.og b/docs/sidebar.og
new file mode 100644
index 00000000..f6202187
--- /dev/null
+++ b/docs/sidebar.og
@@ -0,0 +1,570 @@
+[
+ {
+ "type": "category",
+ "link": "/",
+ "id": "index",
+ "items": []
+ },
+ {
+ "type": "category",
+ "id": "getting-started",
+ "link": "getting-started",
+ "items": [
+ {
+ "type": "category",
+ "id": "7-minute-labs",
+ "link": "getting-started/7-minute-labs",
+ "items": [
+ "getting-started/7-minute-labs/set-policy",
+ "getting-started/7-minute-labs/calc-policy",
+ "getting-started/7-minute-labs/cli",
+ "getting-started/7-minute-labs/graphql",
+ "getting-started/7-minute-labs/terraform"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-aws",
+ "link": "getting-started/getting-started-aws",
+ "items": [
+ "getting-started/getting-started-aws/prepare-account",
+ "getting-started/getting-started-aws/connect-an-account",
+ "getting-started/getting-started-aws/observe-aws-activity",
+ "getting-started/getting-started-aws/enable-policy-pack",
+ "getting-started/getting-started-aws/review-account-wide",
+ "getting-started/getting-started-aws/create-static-exception",
+ "getting-started/getting-started-aws/create-calculated-exception",
+ "getting-started/getting-started-aws/send-alert-to-email",
+ "getting-started/getting-started-aws/apply-quick-action",
+ "getting-started/getting-started-aws/enable-enforcement"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-gcp",
+ "link": "getting-started/getting-started-azure",
+ "items": [
+ "getting-started/getting-started-azure/prepare-subscription",
+ "getting-started/getting-started-azure/connect-subscription",
+ "getting-started/getting-started-azure/observe-azure-activity",
+ "getting-started/getting-started-azure/enable-policy-pack",
+ "getting-started/getting-started-azure/review-subscription-wide",
+ "getting-started/getting-started-azure/create-static-exception",
+ "getting-started/getting-started-azure/create-calculated-exception",
+ "getting-started/getting-started-azure/send-alert-to-email",
+ "getting-started/getting-started-azure/apply-quick-action",
+ "getting-started/getting-started-azure/enable-enforcement"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "getting-started-gcp",
+ "link": "getting-started/getting-started-gcp",
+ "items": [
+ "getting-started/getting-started-gcp/prepare-project",
+ "getting-started/getting-started-gcp/connect-project",
+ "getting-started/getting-started-gcp/observe-gcp-activity",
+ "getting-started/getting-started-gcp/enable-policy-pack",
+ "getting-started/getting-started-gcp/review-project-wide",
+ "getting-started/getting-started-gcp/create-static-exception",
+ "getting-started/getting-started-gcp/create-calculated-exception",
+ "getting-started/getting-started-gcp/send-alert-to-email",
+ "getting-started/getting-started-gcp/apply-quick-action",
+ "getting-started/getting-started-gcp/enable-enforcement"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "your-guardrails-org",
+ "link": "getting-started/your-guardrails-org",
+ "items": [
+ {
+ "type": "category",
+ "id": "user",
+ "link": "getting-started/your-guardrails-org/user",
+ "items": [
+ "getting-started/your-guardrails-org/user/sign-up",
+ "getting-started/your-guardrails-org/user/profile"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "organizations",
+ "link": "getting-started/your-guardrails-org/organizations",
+ "items": [
+ "getting-started/your-guardrails-org/organizations/setup",
+ "getting-started/your-guardrails-org/organizations/team",
+ "getting-started/your-guardrails-org/organizations/profile"
+ ]
+ }
+ ]
+ },
+ "getting-started/terraform-for-everything",
+ "getting-started/faq"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "concepts",
+ "link": "concepts",
+ "items": [
+ "concepts/activities",
+ "concepts/controls",
+ {
+ "type": "category",
+ "id": "guardrails",
+ "link": "concepts/guardrails",
+ "items": [
+ "concepts/guardrails/access-logging",
+ "concepts/guardrails/active",
+ "concepts/guardrails/approved",
+ "concepts/guardrails/audit-logging",
+ "concepts/guardrails/budget",
+ "concepts/guardrails/cmdb",
+ "concepts/guardrails/discovery",
+ "concepts/guardrails/encryption-at-rest",
+ "concepts/guardrails/encryption-in-transit",
+ "concepts/guardrails/public-access",
+ "concepts/guardrails/scheduling",
+ "concepts/guardrails/stacks",
+ "concepts/guardrails/configured",
+ {
+ "type": "category",
+ "id": "guardrails/tagging",
+ "link": "concepts/guardrails/tagging",
+ "items": [
+ "concepts/guardrails/tagging/dynamic-tags",
+ "concepts/guardrails/tagging/require-keys",
+ "concepts/guardrails/tagging/tag-casing",
+ "concepts/guardrails/tagging/tagging-helpers"
+ ]
+ },
+ "concepts/guardrails/trusted-access",
+ "concepts/guardrails/usage"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "iam",
+ "link": "concepts/iam",
+ "items": [
+ "concepts/iam/authentication",
+ "concepts/iam/identity",
+ "concepts/iam/permissions"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "policies",
+ "link": "concepts/policies",
+ "items": [
+ "concepts/policies/hierarchy",
+ "concepts/policies/types-categories",
+ "concepts/policies/values-settings",
+ "concepts/policies/taxonomy",
+ "concepts/policies/calculated-faq"
+ ]
+ },
+ "concepts/policy-packs",
+ "concepts/processes",
+ {
+ "type": "category",
+ "id": "resources",
+ "link": "concepts/resources",
+ "items": [
+ "concepts/resources/hierarchy",
+ "concepts/resources/types-categories",
+ "concepts/resources/discovery"
+ ]
+ }
+ ]
+ },
+ {
+ "type": "category",
+ "id": "guides",
+ "link": "guides",
+ "items": [
+ {
+ "type": "placeholder",
+ "file": "guides/aws/aws-sidebar.json"
+ },
+ {
+ "type": "placeholder",
+ "file": "guides/azure/azure-sidebar.json"
+ },
+ {
+ "type": "placeholder",
+ "file": "guides/gcp/gcp-sidebar.json"
+ },
+ {
+ "type": "placeholder",
+ "file": "guides/github/github-sidebar.json"
+ },
+ {
+ "type": "category",
+ "id": "kubernetes",
+ "link": "guides/kubernetes",
+ "items": [
+ "guides/kubernetes/import-kubernetes-cluster",
+ "guides/kubernetes/configure-queries",
+ "guides/kubernetes/decommission"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "servicenow",
+ "link": "guides/servicenow",
+ "items": [
+ "guides/servicenow/import-servicenow-instance",
+ "guides/servicenow/servicenow-to-guardrails-sync",
+ "guides/servicenow/guardrails-to-servicenow-sync"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "configuring-guardrails",
+ "link": "guides/configuring-guardrails",
+ "items": [
+ "guides/configuring-guardrails/install-mod",
+ "guides/configuring-guardrails/update-mod",
+ "guides/configuring-guardrails/uninstall-mod",
+ "guides/configuring-guardrails/auto-mod-update",
+ "guides/configuring-guardrails/mod-lambda-cleanup",
+ "guides/configuring-guardrails/account-imports",
+ {
+ "type": "category",
+ "id": "directories",
+ "link": "guides/configuring-guardrails/directories",
+ "items": [
+ "guides/configuring-guardrails/directories/aws-sso",
+ "guides/configuring-guardrails/directories/azure-ad",
+ "guides/configuring-guardrails/directories/google",
+ "guides/configuring-guardrails/directories/okta",
+ "guides/configuring-guardrails/directories/onelogin",
+ "guides/configuring-guardrails/directories/ldap-ldaps",
+ "guides/configuring-guardrails/directories/local",
+ "guides/configuring-guardrails/directories/pingid"
+ ]
+ },
+ "guides/configuring-guardrails/ebs-volume-conversion",
+ "guides/configuring-guardrails/files",
+ {
+ "type": "category",
+ "id": "firehose",
+ "link": "guides/configuring-guardrails/firehose",
+ "items": ["guides/configuring-guardrails/firehose/pipelines"]
+ },
+ {
+ "type": "category",
+ "id": "managing-policies",
+ "link": "guides/configuring-guardrails/managing-policies",
+ "items": [
+ "guides/configuring-guardrails/managing-policies/config-examples",
+ "guides/configuring-guardrails/managing-policies/OCL",
+ "guides/configuring-guardrails/managing-policies/YAML"
+ ]
+ },
+ "guides/configuring-guardrails/network-stack",
+ {
+ "type": "category",
+ "id": "policy-packs",
+ "link": "guides/configuring-guardrails/policy-packs",
+ "items": [
+ "guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource"
+ ]
+ },
+
+ "guides/configuring-guardrails/regions",
+ {
+ "type": "category",
+ "id": "guides/configuring-guardrails/working-with-folders",
+ "link": "guides/configuring-guardrails/working-with-folders",
+ "items": [
+ "guides/configuring-guardrails/working-with-folders/create",
+ "guides/configuring-guardrails/working-with-folders/rename",
+ "guides/configuring-guardrails/working-with-folders/delete"
+ ]
+ },
+ "guides/configuring-guardrails/change-window"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "using-guardrails",
+ "link": "guides/using-guardrails",
+ "items": [
+ {
+ "type": "category",
+ "id": "console",
+ "link": "guides/using-guardrails/console",
+ "items": [
+ {
+ "type": "category",
+ "id": "reports",
+ "link": "guides/using-guardrails/console/reports",
+ "items": [
+ "guides/using-guardrails/console/reports/find-policies-in-tbd-state",
+ "guides/using-guardrails/console/reports/export-policy-pack-as-csv"
+ ]
+ },
+ "guides/using-guardrails/console/detail-pages"
+ ]
+ },
+ "guides/using-guardrails/graphql",
+ {
+ "type": "category",
+ "id": "iam",
+ "link": "guides/using-guardrails/iam",
+ "items": [
+ "guides/using-guardrails/iam/administrators",
+ "guides/using-guardrails/iam/user-mgt",
+ "guides/using-guardrails/iam/access-keys",
+ "guides/using-guardrails/iam/permission-assignment",
+ "guides/using-guardrails/iam/advanced"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "stacks",
+ "link": "guides/using-guardrails/stacks",
+ "items": [
+ "guides/using-guardrails/stacks/deploy",
+ "guides/using-guardrails/stacks/destroy"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "notifications",
+ "link": "guides/using-guardrails/notifications",
+ "items": [
+ "guides/using-guardrails/notifications/filter-rules",
+ "guides/using-guardrails/notifications/templates"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "scheduling",
+ "link": "guides/using-guardrails/scheduling",
+ "items": [
+ "guides/using-guardrails/scheduling/db-scheduling-using-custom-tag"
+ ]
+ },
+ "guides/using-guardrails/nunjucks",
+ "guides/using-guardrails/quick-actions",
+ "guides/using-guardrails/searching-filtering",
+ {
+ "type": "category",
+ "id": "troubleshooting",
+ "link": "guides/using-guardrails/troubleshooting",
+ "items": [
+ "guides/using-guardrails/troubleshooting/fix-invalid-controls",
+ "guides/using-guardrails/troubleshooting/access-control-logs",
+ "guides/using-guardrails/troubleshooting/fix-calc-policy-evaluation-errors",
+ "guides/using-guardrails/troubleshooting/run-controls-using-scripts"
+ ]
+ }
+ ]
+ },
+ {
+ "type": "category",
+ "id": "hosting-guardrails",
+ "link": "guides/hosting-guardrails",
+ "items": [
+ "guides/hosting-guardrails/architecture",
+ {
+ "type": "category",
+ "id": "installation",
+ "link": "guides/hosting-guardrails/installation",
+ "items": [
+ {
+ "type": "category",
+ "id": "pre-installation",
+ "link": "guides/hosting-guardrails/installation/pre-installation",
+ "items": [
+ "guides/hosting-guardrails/installation/pre-installation/checklist",
+ "guides/hosting-guardrails/installation/pre-installation/networking",
+ "guides/hosting-guardrails/installation/pre-installation/service-catalog",
+ "guides/hosting-guardrails/installation/pre-installation/import-portfolio",
+ "guides/hosting-guardrails/installation/pre-installation/external-role",
+ "guides/hosting-guardrails/installation/pre-installation/admin-permissions",
+ "guides/hosting-guardrails/installation/pre-installation/cost-estimate"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "install-tef",
+ "link": "guides/hosting-guardrails/installation/install-tef",
+ "items": [
+ "guides/hosting-guardrails/installation/install-tef/install-tef-into-new-vpc",
+ "guides/hosting-guardrails/installation/install-tef/install-tef-into-existing-vpc"
+ ]
+ },
+ "guides/hosting-guardrails/installation/install-ted",
+ "guides/hosting-guardrails/installation/install-te",
+ "guides/hosting-guardrails/installation/workspace-manager",
+ "guides/hosting-guardrails/installation/workspace-login",
+ {
+ "type": "category",
+ "id": "post-installation",
+ "link": "guides/hosting-guardrails/installation/post-installation",
+ "items": [
+ "guides/hosting-guardrails/installation/post-installation/create-ted-critical-alarms",
+ "guides/hosting-guardrails/installation/post-installation/create-te-critical-alarms"
+ ]
+ },
+ "guides/hosting-guardrails/installation/delete-te"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "updating-stacks",
+ "link": "guides/hosting-guardrails/updating-stacks",
+ "items": [
+ "guides/hosting-guardrails/updating-stacks/update-tef",
+ "guides/hosting-guardrails/updating-stacks/update-ted",
+ "guides/hosting-guardrails/updating-stacks/update-workspace",
+ "guides/hosting-guardrails/updating-stacks/domain-update",
+ "guides/hosting-guardrails/updating-stacks/general-purpose-gp3"
+ ]
+ },
+ "guides/hosting-guardrails/FAQ",
+ {
+ "type": "category",
+ "id": "troubleshooting",
+ "link": "guides/hosting-guardrails/troubleshooting",
+ "items": [
+ "guides/hosting-guardrails/troubleshooting/service-catalog-out-of-sync",
+ "guides/hosting-guardrails/troubleshooting/database-instance-not-in-available-state",
+ "guides/hosting-guardrails/troubleshooting/enable-verbose-logging",
+ "guides/hosting-guardrails/troubleshooting/peer-mod-dependency-error",
+ "guides/hosting-guardrails/troubleshooting/pause-events",
+ "guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-aws-console",
+ "guides/hosting-guardrails/troubleshooting/troubleshooting-event-handlers-guardrails-console"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "monitoring",
+ "link": "guides/hosting-guardrails/monitoring",
+ "items": [
+ "guides/hosting-guardrails/monitoring/investigate-event-flood",
+ "guides/hosting-guardrails/monitoring/diagnose-control-error",
+ "guides/hosting-guardrails/monitoring/check-mod-health",
+ "guides/hosting-guardrails/monitoring/workspace-health-check",
+ "guides/hosting-guardrails/monitoring/monitoring-alarms",
+ "guides/hosting-guardrails/monitoring/investigate-lambda-invocation"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "disaster-recovery",
+ "link": "guides/hosting-guardrails/disaster-recovery",
+ "items": [
+ "guides/hosting-guardrails/disaster-recovery/restore",
+ "guides/hosting-guardrails/disaster-recovery/dr-testing"
+ ]
+ }
+ ]
+ },
+ "guides/troubleshooting"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "faq",
+ "link": "faq",
+ "items": [
+ "faq/aws-faq",
+ "faq/azure-faq",
+ "faq/gcp-faq",
+ "faq/terraform-faq",
+ "faq/general-faq",
+ {
+ "type": "category",
+ "id": "faq/workspace-faq",
+ "link": "faq/workspace-faq",
+ "items": ["faq/workspace-faq/key_rotation"]
+ },
+ "faq/guardrails-and-aws-scps"
+ ]
+ },
+ {
+ "type": "category",
+ "id": "reference",
+ "link": "reference",
+ "items": [
+ {
+ "type": "category",
+ "id": "reference/cli",
+ "link": "reference/cli",
+ "items": [
+ "reference/cli/installation",
+ "reference/cli/updating",
+ {
+ "type": "category",
+ "id": "reference/cli/commands",
+ "link": "reference/cli/commands",
+ "items": [
+ "reference/cli/commands/aws",
+ "reference/cli/commands/completion",
+ "reference/cli/commands/compose",
+ "reference/cli/commands/configure",
+ "reference/cli/commands/download",
+ "reference/cli/commands/file",
+ "reference/cli/commands/graphql",
+ "reference/cli/commands/inspect",
+ "reference/cli/commands/install",
+ "reference/cli/commands/login",
+ "reference/cli/commands/pack",
+ "reference/cli/commands/publish",
+ "reference/cli/commands/registry",
+ "reference/cli/commands/template",
+ "reference/cli/commands/test",
+ "reference/cli/commands/up",
+ "reference/cli/commands/vcr",
+ "reference/cli/commands/workspace"
+ ]
+ }
+ ]
+ },
+ "reference/guardrails-samples-repo",
+ {
+ "type": "category",
+ "id": "reference/terraform",
+ "link": "reference/terraform",
+ "items": ["reference/terraform/setup"]
+ },
+ {
+ "type": "category",
+ "id": "reference/filter",
+ "link": "reference/filter",
+ "items": [
+ "reference/filter/resources",
+ "reference/filter/policies",
+ "reference/filter/controls",
+ "reference/filter/notifications"
+ ]
+ },
+ "reference/ocl",
+ {
+ "type": "category",
+ "id": "reference/graphql",
+ "link": "reference/graphql",
+ "items": []
+ },
+ "reference/glossary"
+ ]
+ },
+ {
+ "type": "external",
+ "id": "hub-guardrails",
+ "link": "https://hub.guardrails.turbot.com",
+ "label": "Hub"
+ },
+ {
+ "type": "external",
+ "id": "changelog",
+ "link": "https://turbot.com/guardrails/changelog",
+ "label": "Changelog"
+ }
+]
diff --git a/docs/getting-started/7-minute-labs/cli/index.md b/docs/todo/7-minute-labs/cli/index.md
similarity index 100%
rename from docs/getting-started/7-minute-labs/cli/index.md
rename to docs/todo/7-minute-labs/cli/index.md
diff --git a/docs/getting-started/7-minute-labs/index.md b/docs/todo/7-minute-labs/index.md
similarity index 100%
rename from docs/getting-started/7-minute-labs/index.md
rename to docs/todo/7-minute-labs/index.md
diff --git a/docs/guides/configuring-guardrails/ebs-volume-conversion/index.md b/docs/todo/ebs-volume-conversion/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/ebs-volume-conversion/index.md
rename to docs/todo/ebs-volume-conversion/index.md
diff --git a/docs/todo/index.md b/docs/todo/index.md
new file mode 100644
index 00000000..0c48fa90
--- /dev/null
+++ b/docs/todo/index.md
@@ -0,0 +1,4 @@
+---
+id: todo
+title: todo
+---
\ No newline at end of file
diff --git a/docs/guides/configuring-guardrails/managing-policies/OCL/index.md b/docs/todo/managing-policies/OCL/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/OCL/index.md
rename to docs/todo/managing-policies/OCL/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/YAML/index.md b/docs/todo/managing-policies/YAML/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/YAML/index.md
rename to docs/todo/managing-policies/YAML/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/calculated-policy-builder.png b/docs/todo/managing-policies/calculated-policy-builder.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/calculated-policy-builder.png
rename to docs/todo/managing-policies/calculated-policy-builder.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/calculated-policy-setting.png b/docs/todo/managing-policies/calculated-policy-setting.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/calculated-policy-setting.png
rename to docs/todo/managing-policies/calculated-policy-setting.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/active-age.png b/docs/todo/managing-policies/config-examples/ami-management/active-age.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/active-age.png
rename to docs/todo/managing-policies/config-examples/ami-management/active-age.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/active.png b/docs/todo/managing-policies/config-examples/ami-management/active.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/active.png
rename to docs/todo/managing-policies/config-examples/ami-management/active.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/calc-policy-approved-usage.png b/docs/todo/managing-policies/config-examples/ami-management/calc-policy-approved-usage.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/calc-policy-approved-usage.png
rename to docs/todo/managing-policies/config-examples/ami-management/calc-policy-approved-usage.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/index.md b/docs/todo/managing-policies/config-examples/ami-management/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/ami-management/index.md
rename to docs/todo/managing-policies/config-examples/ami-management/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/index.md b/docs/todo/managing-policies/config-examples/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/index.md
rename to docs/todo/managing-policies/config-examples/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/engine-types.png b/docs/todo/managing-policies/config-examples/rds-db-approved/engine-types.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/engine-types.png
rename to docs/todo/managing-policies/config-examples/rds-db-approved/engine-types.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/index.md b/docs/todo/managing-policies/config-examples/rds-db-approved/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/index.md
rename to docs/todo/managing-policies/config-examples/rds-db-approved/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/instance-approved.png b/docs/todo/managing-policies/config-examples/rds-db-approved/instance-approved.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/instance-approved.png
rename to docs/todo/managing-policies/config-examples/rds-db-approved/instance-approved.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/instance-classes.png b/docs/todo/managing-policies/config-examples/rds-db-approved/instance-classes.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/rds-db-approved/instance-classes.png
rename to docs/todo/managing-policies/config-examples/rds-db-approved/instance-classes.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/access-logging-enabled.png b/docs/todo/managing-policies/config-examples/s3-access-logs/access-logging-enabled.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/access-logging-enabled.png
rename to docs/todo/managing-policies/config-examples/s3-access-logs/access-logging-enabled.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/index.md b/docs/todo/managing-policies/config-examples/s3-access-logs/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/index.md
rename to docs/todo/managing-policies/config-examples/s3-access-logs/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/log-destination.png b/docs/todo/managing-policies/config-examples/s3-access-logs/log-destination.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/log-destination.png
rename to docs/todo/managing-policies/config-examples/s3-access-logs/log-destination.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/logging-bucket.png b/docs/todo/managing-policies/config-examples/s3-access-logs/logging-bucket.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/s3-access-logs/logging-bucket.png
rename to docs/todo/managing-policies/config-examples/s3-access-logs/logging-bucket.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/config-examples/terraform-tags/index.md b/docs/todo/managing-policies/config-examples/terraform-tags/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/config-examples/terraform-tags/index.md
rename to docs/todo/managing-policies/config-examples/terraform-tags/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/create-new-policy-setting.png b/docs/todo/managing-policies/create-new-policy-setting.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/create-new-policy-setting.png
rename to docs/todo/managing-policies/create-new-policy-setting.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/exception-1.png b/docs/todo/managing-policies/exception-1.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/exception-1.png
rename to docs/todo/managing-policies/exception-1.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/exception-2.png b/docs/todo/managing-policies/exception-2.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/exception-2.png
rename to docs/todo/managing-policies/exception-2.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/exception-3.png b/docs/todo/managing-policies/exception-3.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/exception-3.png
rename to docs/todo/managing-policies/exception-3.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/exception-4.png b/docs/todo/managing-policies/exception-4.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/exception-4.png
rename to docs/todo/managing-policies/exception-4.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/exception-5.png b/docs/todo/managing-policies/exception-5.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/exception-5.png
rename to docs/todo/managing-policies/exception-5.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/index.md b/docs/todo/managing-policies/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/index.md
rename to docs/todo/managing-policies/index.md
diff --git a/docs/guides/configuring-guardrails/managing-policies/policy-setting-created.png b/docs/todo/managing-policies/policy-setting-created.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/policy-setting-created.png
rename to docs/todo/managing-policies/policy-setting-created.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/policy-setting-detail.png b/docs/todo/managing-policies/policy-setting-detail.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/policy-setting-detail.png
rename to docs/todo/managing-policies/policy-setting-detail.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/policy-setting-search-result.png b/docs/todo/managing-policies/policy-setting-search-result.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/policy-setting-search-result.png
rename to docs/todo/managing-policies/policy-setting-search-result.png
diff --git a/docs/guides/configuring-guardrails/managing-policies/policy-setting-updated.png b/docs/todo/managing-policies/policy-setting-updated.png
similarity index 100%
rename from docs/guides/configuring-guardrails/managing-policies/policy-setting-updated.png
rename to docs/todo/managing-policies/policy-setting-updated.png
diff --git a/docs/guides/configuring-guardrails/regions/index.md b/docs/todo/regions/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/regions/index.md
rename to docs/todo/regions/index.md
diff --git a/docs/guides/using-guardrails/console/control-details.png b/docs/using/console/control-details.png
similarity index 100%
rename from docs/guides/using-guardrails/console/control-details.png
rename to docs/using/console/control-details.png
diff --git a/docs/guides/using-guardrails/console/detail-pages.md b/docs/using/console/detail-pages.md
similarity index 100%
rename from docs/guides/using-guardrails/console/detail-pages.md
rename to docs/using/console/detail-pages.md
diff --git a/docs/guides/using-guardrails/console/dev-console.png b/docs/using/console/dev-console.png
similarity index 100%
rename from docs/guides/using-guardrails/console/dev-console.png
rename to docs/using/console/dev-console.png
diff --git a/docs/guides/using-guardrails/console/header-apollo.png b/docs/using/console/header-apollo.png
similarity index 100%
rename from docs/guides/using-guardrails/console/header-apollo.png
rename to docs/using/console/header-apollo.png
diff --git a/docs/guides/using-guardrails/console/index.md b/docs/using/console/index.md
similarity index 100%
rename from docs/guides/using-guardrails/console/index.md
rename to docs/using/console/index.md
diff --git a/docs/guides/using-guardrails/console/policy-setting.png b/docs/using/console/policy-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/console/policy-setting.png
rename to docs/using/console/policy-setting.png
diff --git a/docs/guides/using-guardrails/console/reports/cis-reports.png b/docs/using/console/reports/cis-reports.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/cis-reports.png
rename to docs/using/console/reports/cis-reports.png
diff --git a/docs/guides/using-guardrails/console/reports/example-filter.png b/docs/using/console/reports/example-filter.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/example-filter.png
rename to docs/using/console/reports/example-filter.png
diff --git a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-console-login.png b/docs/using/console/reports/export-policy-pack-as-csv/guardrails-console-login.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-console-login.png
rename to docs/using/console/reports/export-policy-pack-as-csv/guardrails-console-login.png
diff --git a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-export-to-csv.png b/docs/using/console/reports/export-policy-pack-as-csv/guardrails-export-to-csv.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-export-to-csv.png
rename to docs/using/console/reports/export-policy-pack-as-csv/guardrails-export-to-csv.png
diff --git a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-navigate-to-reports.png b/docs/using/console/reports/export-policy-pack-as-csv/guardrails-navigate-to-reports.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-navigate-to-reports.png
rename to docs/using/console/reports/export-policy-pack-as-csv/guardrails-navigate-to-reports.png
diff --git a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-select-policy-setting-by-resource-type.png b/docs/using/console/reports/export-policy-pack-as-csv/guardrails-select-policy-setting-by-resource-type.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-select-policy-setting-by-resource-type.png
rename to docs/using/console/reports/export-policy-pack-as-csv/guardrails-select-policy-setting-by-resource-type.png
diff --git a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-select-resource.png b/docs/using/console/reports/export-policy-pack-as-csv/guardrails-select-resource.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/guardrails-select-resource.png
rename to docs/using/console/reports/export-policy-pack-as-csv/guardrails-select-resource.png
diff --git a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/index.md b/docs/using/console/reports/export-policy-pack-as-csv/index.md
similarity index 75%
rename from docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/index.md
rename to docs/using/console/reports/export-policy-pack-as-csv/index.md
index fd9306b6..3bb1d3fc 100644
--- a/docs/guides/using-guardrails/console/reports/export-policy-pack-as-csv/index.md
+++ b/docs/using/console/reports/export-policy-pack-as-csv/index.md
@@ -1,6 +1,6 @@
---
title: Export Policy Pack as CSV
-sidebar_label: Export Policy Pack as CSV
+sidebar_label: Export Policy Pack as CSV 🛠
---
# Exporting Policy Pack as CSV
@@ -19,31 +19,31 @@ Exporting Turbot Guardrails policy settings as a CSV file enables collaboration
Log in to the Guardrails console.
-
+
## Step 2: Access Reports
Choose **Reports** from the top navigation menu.
-
+
## Step 3: Select Policies
Under **Policies**, select **Policy Settings by Resource Type**.
-
+
## Step 4: Choose Resource
Select the required resource from the **Resource** filter dropdown. For this guide, the selected resource is the `Policy Pack`.
-
+
## Step 5: Export CSV
Click the **Export to CSV** link at the top of the page to download the policy pack as a CSV file. The file will be stored in your local drive.
-
+
## Next Steps
diff --git a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-apply-tbd-filter.png b/docs/using/console/reports/find-policies-in-tbd-state/guardrails-apply-tbd-filter.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-apply-tbd-filter.png
rename to docs/using/console/reports/find-policies-in-tbd-state/guardrails-apply-tbd-filter.png
diff --git a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-console-login.png b/docs/using/console/reports/find-policies-in-tbd-state/guardrails-console-login.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-console-login.png
rename to docs/using/console/reports/find-policies-in-tbd-state/guardrails-console-login.png
diff --git a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-navigate-to-reports.png b/docs/using/console/reports/find-policies-in-tbd-state/guardrails-navigate-to-reports.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-navigate-to-reports.png
rename to docs/using/console/reports/find-policies-in-tbd-state/guardrails-navigate-to-reports.png
diff --git a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-policy-identify-cause.png b/docs/using/console/reports/find-policies-in-tbd-state/guardrails-policy-identify-cause.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-policy-identify-cause.png
rename to docs/using/console/reports/find-policies-in-tbd-state/guardrails-policy-identify-cause.png
diff --git a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-policy-values-by-state.png b/docs/using/console/reports/find-policies-in-tbd-state/guardrails-policy-values-by-state.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/guardrails-policy-values-by-state.png
rename to docs/using/console/reports/find-policies-in-tbd-state/guardrails-policy-values-by-state.png
diff --git a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/index.md b/docs/using/console/reports/find-policies-in-tbd-state/index.md
similarity index 77%
rename from docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/index.md
rename to docs/using/console/reports/find-policies-in-tbd-state/index.md
index 51c0d7f5..9663a80b 100644
--- a/docs/guides/using-guardrails/console/reports/find-policies-in-tbd-state/index.md
+++ b/docs/using/console/reports/find-policies-in-tbd-state/index.md
@@ -1,6 +1,6 @@
---
title: Find Policies in TBD State
-sidebar_label: Find Policies in TBD State
+sidebar_label: Find Policies in TBD State 🛠
---
# Find Policies in TBD State
@@ -19,29 +19,29 @@ An ideal workspace uses policies to meet business requirements through secure en
Log in to the Guardrails console.
-
+
## Step 2: Access Reports
Choose **Reports** from the top navigation menu.
-
+
## Step 3: Filter Policies by State
Under Policies, select **Policy Values by State**.
-
+
From the **State** filter dropdown, select **TBD**. This will list the policy values currently in a `TBD` state.
-
+
## Step 4: Review the Cause
Select a policy value in the `TBD` state and review the cause of the issue.
-
+
Resolve Errors and Optimize Controls
diff --git a/docs/guides/using-guardrails/console/reports/index.md b/docs/using/console/reports/index.md
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/index.md
rename to docs/using/console/reports/index.md
diff --git a/docs/guides/using-guardrails/console/reports/reports-splash.png b/docs/using/console/reports/reports-splash.png
similarity index 100%
rename from docs/guides/using-guardrails/console/reports/reports-splash.png
rename to docs/using/console/reports/reports-splash.png
diff --git a/docs/guides/using-guardrails/console/resource-details.png b/docs/using/console/resource-details.png
similarity index 100%
rename from docs/guides/using-guardrails/console/resource-details.png
rename to docs/using/console/resource-details.png
diff --git a/docs/guides/using-guardrails/searching-filtering/index.md b/docs/using/console/searching-filtering/index.md
similarity index 100%
rename from docs/guides/using-guardrails/searching-filtering/index.md
rename to docs/using/console/searching-filtering/index.md
diff --git a/docs/guides/using-guardrails/searching-filtering/query.png b/docs/using/console/searching-filtering/query.png
similarity index 100%
rename from docs/guides/using-guardrails/searching-filtering/query.png
rename to docs/using/console/searching-filtering/query.png
diff --git a/docs/guides/using-guardrails/searching-filtering/results.png b/docs/using/console/searching-filtering/results.png
similarity index 100%
rename from docs/guides/using-guardrails/searching-filtering/results.png
rename to docs/using/console/searching-filtering/results.png
diff --git a/docs/guides/using-guardrails/searching-filtering/search.png b/docs/using/console/searching-filtering/search.png
similarity index 100%
rename from docs/guides/using-guardrails/searching-filtering/search.png
rename to docs/using/console/searching-filtering/search.png
diff --git a/docs/guides/using-guardrails/searching-filtering/search2.png b/docs/using/console/searching-filtering/search2.png
similarity index 100%
rename from docs/guides/using-guardrails/searching-filtering/search2.png
rename to docs/using/console/searching-filtering/search2.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_admin.png b/docs/using/console/turbot_example_company_admin.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_admin.png
rename to docs/using/console/turbot_example_company_admin.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_controls.png b/docs/using/console/turbot_example_company_controls.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_controls.png
rename to docs/using/console/turbot_example_company_controls.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_permissions.png b/docs/using/console/turbot_example_company_permissions.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_permissions.png
rename to docs/using/console/turbot_example_company_permissions.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_policies.png b/docs/using/console/turbot_example_company_policies.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_policies.png
rename to docs/using/console/turbot_example_company_policies.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_reports.png b/docs/using/console/turbot_example_company_reports.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_reports.png
rename to docs/using/console/turbot_example_company_reports.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_reports_filter.png b/docs/using/console/turbot_example_company_reports_filter.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_reports_filter.png
rename to docs/using/console/turbot_example_company_reports_filter.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_resources.png b/docs/using/console/turbot_example_company_resources.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_resources.png
rename to docs/using/console/turbot_example_company_resources.png
diff --git a/docs/guides/using-guardrails/console/turbot_example_company_search.png b/docs/using/console/turbot_example_company_search.png
similarity index 100%
rename from docs/guides/using-guardrails/console/turbot_example_company_search.png
rename to docs/using/console/turbot_example_company_search.png
diff --git a/docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-console-login.png b/docs/using/controls/access-control-logs/guardrails-console-login.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/access-control-logs/guardrails-console-login.png
rename to docs/using/controls/access-control-logs/guardrails-console-login.png
diff --git a/docs/using/controls/access-control-logs/guardrails-control-page.png b/docs/using/controls/access-control-logs/guardrails-control-page.png
new file mode 100644
index 00000000..cb4171fe
Binary files /dev/null and b/docs/using/controls/access-control-logs/guardrails-control-page.png differ
diff --git a/docs/using/controls/access-control-logs/guardrails-copy-logs.png b/docs/using/controls/access-control-logs/guardrails-copy-logs.png
new file mode 100644
index 00000000..89c4d3bb
Binary files /dev/null and b/docs/using/controls/access-control-logs/guardrails-copy-logs.png differ
diff --git a/docs/using/controls/access-control-logs/guardrails-select-debug-level.png b/docs/using/controls/access-control-logs/guardrails-select-debug-level.png
new file mode 100644
index 00000000..0d9ef4b5
Binary files /dev/null and b/docs/using/controls/access-control-logs/guardrails-select-debug-level.png differ
diff --git a/docs/using/controls/access-control-logs/index.md b/docs/using/controls/access-control-logs/index.md
new file mode 100644
index 00000000..85d047f2
--- /dev/null
+++ b/docs/using/controls/access-control-logs/index.md
@@ -0,0 +1,67 @@
+---
+title: View Control Logs
+sidebar_label: View Control Logs 🛠
+---
+
+# View Control Logs
+
+In this guide, you will:
+- Learn how to retrieve and analyze access logs to investigate control failures in the Guardrails console.
+
+Controls enforce policies that maintain cloud resource compliance and the proper functioning of Guardrails. Healthy controls in **OK**, **Alarm**, or **Skipped** states signify a stable environment. However, when errors occur, logs offer a valuable source of information to diagnose and resolve issues effectively.
+
+Control logs are essential for tracking activities and operations within a Guardrails-managed environment. They provide detailed insights into changes, access attempts, and failures, enabling you to identify the root causes of control issues. By analyzing these logs, you can gain a deeper understanding of control failures, take corrective actions, or share the necessary details with the product support team to ensure operational efficiency.
+
+
+## Prerequisites
+
+- **Turbot/Operator** permissions at the Turbot resource level.
+- Familiarity with the Guardrails console.
+
+
+## Step 1: Login to Guardrails Console
+
+Log in to the Guardrails console.
+
+
+
+
+## Step 2: Navigate to Control
+
+Navigate to the control page to inspect the failure details. Select **VIEW LOG**.
+
+
+
+> [!NOTE]
+> `Handling...` signifies the control is in the execution state. You can still view the logs by selecting **VIEW LOG**. This example demonstrates a control in the `ERROR` state. However, logs can be viewed for analysis at any state of the control.
+
+
+## Step 3: Select Log Level
+
+From the **Level:** dropdown filter, choose **Debug and above**.
+
+
+
+
+## Step 4: Copy Logs
+
+Select the **Copy to clipboard** button and save the logs in a `.txt` file.
+
+
+
+> [!IMPORTANT]
+> If debug logs are unavailable, rerun the control to generate the logs. Refer `Step 5` based on need.
+
+## Step 5: Rerun Control
+
+If the logs are incomplete or display `Internal Error`, rerun the control to generate a fresh log.
+
+
+
+## Support
+
+If you encounter any issues, please [Open a Support Ticket](https://support.turbot.com) and attach the relevant information to assist you more efficiently:
+
+- The `.txt` file containing the copied control failure logs.
+- A screenshot of the control.
+
diff --git a/docs/using/controls/access-control-logs/run-control.png b/docs/using/controls/access-control-logs/run-control.png
new file mode 100644
index 00000000..2ae26f11
Binary files /dev/null and b/docs/using/controls/access-control-logs/run-control.png differ
diff --git a/docs/concepts/controls/control_types_categories-ex.png b/docs/using/controls/control_types_categories-ex.png
similarity index 100%
rename from docs/concepts/controls/control_types_categories-ex.png
rename to docs/using/controls/control_types_categories-ex.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-apply-policy-setting.png b/docs/using/controls/fix-invalid-controls/guardrails-apply-policy-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-apply-policy-setting.png
rename to docs/using/controls/fix-invalid-controls/guardrails-apply-policy-setting.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-console-login.png b/docs/using/controls/fix-invalid-controls/guardrails-console-login.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-console-login.png
rename to docs/using/controls/fix-invalid-controls/guardrails-console-login.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-control-ok-state.png b/docs/using/controls/fix-invalid-controls/guardrails-control-ok-state.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-control-ok-state.png
rename to docs/using/controls/fix-invalid-controls/guardrails-control-ok-state.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-controls-page.png b/docs/using/controls/fix-invalid-controls/guardrails-controls-page.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-controls-page.png
rename to docs/using/controls/fix-invalid-controls/guardrails-controls-page.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-filter-invalid.png b/docs/using/controls/fix-invalid-controls/guardrails-filter-invalid.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-filter-invalid.png
rename to docs/using/controls/fix-invalid-controls/guardrails-filter-invalid.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-navigate-to-reports.png b/docs/using/controls/fix-invalid-controls/guardrails-navigate-to-reports.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-navigate-to-reports.png
rename to docs/using/controls/fix-invalid-controls/guardrails-navigate-to-reports.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-select-controls-alerts.png b/docs/using/controls/fix-invalid-controls/guardrails-select-controls-alerts.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-select-controls-alerts.png
rename to docs/using/controls/fix-invalid-controls/guardrails-select-controls-alerts.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-select-invalid-control.png b/docs/using/controls/fix-invalid-controls/guardrails-select-invalid-control.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-select-invalid-control.png
rename to docs/using/controls/fix-invalid-controls/guardrails-select-invalid-control.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-sub-policy-page.png b/docs/using/controls/fix-invalid-controls/guardrails-sub-policy-page.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/guardrails-sub-policy-page.png
rename to docs/using/controls/fix-invalid-controls/guardrails-sub-policy-page.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/index.md b/docs/using/controls/fix-invalid-controls/index.md
similarity index 65%
rename from docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/index.md
rename to docs/using/controls/fix-invalid-controls/index.md
index 5a799d65..e4a6dd12 100644
--- a/docs/guides/using-guardrails/troubleshooting/fix-invalid-controls/index.md
+++ b/docs/using/controls/fix-invalid-controls/index.md
@@ -1,6 +1,6 @@
---
title: Fix Invalid Controls
-sidebar_label: Fix Invalid Controls
+sidebar_label: Fix Invalid Controls 🛠
---
# Fix Invalid Controls
@@ -19,50 +19,50 @@ Controls enforce policies to ensure cloud resources remain compliant and Guardra
Log in to the Guardrails console.
-
+
## Step 2: Navigate to Reports
Choose **Reports** from the top navigation menu.
-
+
## Step 3: View Control Alerts
From **Controls**, select **Alerts by Control Type**.
-
+
Select **Invalid** from the **State** filter dropdown to display all invalid controls.
-
+
## Step 4: Find Invalid Control
Select the desired invalid control from the list to view detailed information and investigate further.
-
+
The control page explains why the control is in an invalid state. In this case, the issue arises because the required sub-policies for the active control are set to **Skip**.
-
+
## Step 5: Fix Control Issues
Select the **Policies** tab to display the list of sub-policies currently in a **Skipped** state.
-
+
Select the sub-policy, choose the desired setting, and click **Create** to apply the changes.
-
+
The control re-evaluates the policies and transitions to an **OK** state if the settings are correctly applied.
-
+
## Step 6: Optimizing Controls
diff --git a/docs/concepts/controls/index.md b/docs/using/controls/index.md
similarity index 99%
rename from docs/concepts/controls/index.md
rename to docs/using/controls/index.md
index f075c02d..ba9ae137 100644
--- a/docs/concepts/controls/index.md
+++ b/docs/using/controls/index.md
@@ -17,6 +17,7 @@ Resource State + Policy Setting = Control State
As a concrete example: A cloud storage resource does not have encryption at rest configured. In Guardrails, the encryption at rest policy asserts that storage should be encrypted at rest. The encryption at rest control evaluates resource state against the policy then acts. In this case, the control will go into an `alarm` state. If the policy is set to check mode then the control will only go into `alarm`. If in enforce mode, the control will go into `alarm` and Guardrails will act to remediate the resource. When the remediation is successful, the control will rerun then go into `ok`.
+
## Control State
Controls are responsible for enforcing policy values. This introduces the concept of a **Control State**. After a control has completed running, it is assigned a state, which can depend on a variety of factors, such as the IAM permissions (i.e. can Guardrails describe the resource?), pending work (i.e. is a policy waiting to be calculated?), or simply that the evaluated policy tells the control to not do anything.
diff --git a/docs/using/controls/processes/index.md b/docs/using/controls/processes/index.md
new file mode 100644
index 00000000..d860d660
--- /dev/null
+++ b/docs/using/controls/processes/index.md
@@ -0,0 +1,60 @@
+---
+title: Processes
+sidebar_label: Processes
+---
+
+# Processes
+
+All work done by Guardrails is organized into discrete processes - API handling,
+control execution, actions, etc. Each process has a unique identifier and can
+be monitored for progress, logs and outcome. Processes provide a single point
+to track progress and information about a sequence of backend decisions and
+processing in a single place.
+
+## States
+
+Processes follow a clearly defined state machine for phases of execution:
+
+| State | Description |
+| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| Starting | Process is being started and input gathered for the Running phase. Any triggering event has been received and acknowledged to the sender. |
+| Running | Mods are doing process work. Input is passed from Guardrails and commands are sent back. |
+| Handling | The Guardrails engine is handling commands issued during the Running phase. |
+| Terminated | The process has finished, no further work will be done. Upon termination the process is immutable, with no extra log entries or changes allowed. |
+
+Ensuring consistent, reliable process execution is a complex problem with many error conditions. Some examples:
+
+| Error condition | Description | Remediation |
+| -- | -- | -- |
+| Zombie | A process that is still in "Running" state in Guardrails, but the associated function or state machine defined by the mod has actually completed without successfully informing Guardrails. | Guardrails checks periodically for zombie processes based on the time spent in Running state. If considered as a zombie, Guardrails will update the error log and terminate the process. |
+| Retryable error (e.g. throttling) | A retryable error occurred during process handling. | The process phase will be retried multiple times with backoff between attempts. If the error persists then an error is logged and the process is terminated. |
+
+
+## Log
+
+Workers may log to the process to record data points, decisions and key actions.
+
+Log entries are recorded in JSON with the following format:
+
+ {
+ "level": "info",
+ "message": "I am information.",
+ "timestamp": "2018-10-19T12:51:36",
+ "data": {
+ "ad": "hoc",
+ "json": true
+ }
+ }
+
+Log levels follow the [syslog standard](https://en.wikipedia.org/wiki/Syslog#Severity_level):
+
+| Severity | ID | Used by | Description |
+| --------- | ----------- | ----------------- | ----------- |
+| Emergency | `emergency` | Guardrails Engine | Guardrails is unavailable and automatic recovery is unlikely. |
+| Alert | `alert` | Guardrails Engine | Alert from a key component or dependency. Guardrails is unusable, but may automatically recover. |
+| Critical | `critical` | Guardrails Engine | Critical conditions. Guardrails may be unavailable or have severely degraded performance. |
+| Error | `error` | Mods | Error significant to an action, but not critical to Guardrails. Review and remediation required. |
+| Warning | `warning` | Mods | Warning that an error may occur if action is not taken. Review recommended. |
+| Notice | `notice` | Mods | Significant, but normal, events such as automated actions. |
+| Informational | `info` | Mods | Information about decisions and interim data. |
+| Debug | `debug` | Mods | Debug messages used in development only. |
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-policy-setting-created.png b/docs/using/controls/quick-actions/guardrails-policy-setting-created.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-policy-setting-created.png
rename to docs/using/controls/quick-actions/guardrails-policy-setting-created.png
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-search-quick-actions.png b/docs/using/controls/quick-actions/guardrails-search-quick-actions.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-search-quick-actions.png
rename to docs/using/controls/quick-actions/guardrails-search-quick-actions.png
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-select-new-policy-setting.png b/docs/using/controls/quick-actions/guardrails-select-new-policy-setting.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-select-new-policy-setting.png
rename to docs/using/controls/quick-actions/guardrails-select-new-policy-setting.png
diff --git a/docs/guides/using-guardrails/troubleshooting/fix-calc-policy-evaluation-errors/guardrails-select-policies.png b/docs/using/controls/quick-actions/guardrails-select-policies.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/fix-calc-policy-evaluation-errors/guardrails-select-policies.png
rename to docs/using/controls/quick-actions/guardrails-select-policies.png
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-select-quick-actions-enabled.png b/docs/using/controls/quick-actions/guardrails-select-quick-actions-enabled.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-select-quick-actions-enabled.png
rename to docs/using/controls/quick-actions/guardrails-select-quick-actions-enabled.png
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-select-setting-click-create.png b/docs/using/controls/quick-actions/guardrails-select-setting-click-create.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-select-setting-click-create.png
rename to docs/using/controls/quick-actions/guardrails-select-setting-click-create.png
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-select-turbot.png b/docs/using/controls/quick-actions/guardrails-select-turbot.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-select-turbot.png
rename to docs/using/controls/quick-actions/guardrails-select-turbot.png
diff --git a/docs/guides/using-guardrails/quick-actions/guardrails-verify-quick-actions.png b/docs/using/controls/quick-actions/guardrails-verify-quick-actions.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/guardrails-verify-quick-actions.png
rename to docs/using/controls/quick-actions/guardrails-verify-quick-actions.png
diff --git a/docs/guides/using-guardrails/quick-actions/index.md b/docs/using/controls/quick-actions/index.md
similarity index 82%
rename from docs/guides/using-guardrails/quick-actions/index.md
rename to docs/using/controls/quick-actions/index.md
index 73fb1869..bb6eae56 100644
--- a/docs/guides/using-guardrails/quick-actions/index.md
+++ b/docs/using/controls/quick-actions/index.md
@@ -33,42 +33,42 @@ This feature is currently supported across major AWS, Azure, and GCP mods. Below
Log into the Guardrails console with provided local credentials or by using any SAML based login and Select **Policies** from the top navigation menu.
-
+
Choose **Turbot** from the list.
-
+
## Step 2: Select Quick Actions
Quick actions are `Disabled` by default, To enable them, locate **Turbot > Quick Actions** policy.
-
+
Select the **Turbot > Quick Actions > Enabled** policy.
-
+
## Step 3: Enable Quick Actions
On the `Turbot > Quick Actions > Enabled` page, select **New Policy Setting**.
-
+
Select the desired `Resource` to enable quick actions, set Setting to `Enabled`, and select **Create**.
Choose the `Turbot` resource level to apply changes across the entire environment or `select an individual account for testing`.
-
+
The policy setting has been successfully created.
-
+
## Step 4: Apply Quick Actions
To apply, navigate to the desired resource page and select the appropriate action from the **Actions** button, which displays a list of available actions.
-
+
## Enable Quick Actions Permissions
@@ -81,7 +81,7 @@ For example, to grant `Turbot/Operator` the ability to enable versioning on an S
- Changing the `authorization` value from `permitted` to `forbidden` will **restrict all users** from performing the specified action.
- Wildcard characters (`*`) can be used to apply permissions across multiple actions.
-
+
```
- rule: "tmod:@turbot/aws-s3#/action/types/s3BucketVersioningEnabledQuickAction"
diff --git a/docs/guides/using-guardrails/quick-actions/quick-actions-permissions.png b/docs/using/controls/quick-actions/quick-actions-permissions.png
similarity index 100%
rename from docs/guides/using-guardrails/quick-actions/quick-actions-permissions.png
rename to docs/using/controls/quick-actions/quick-actions-permissions.png
diff --git a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/github-guardrails-samples-repo.png b/docs/using/controls/run-controls-using-scripts/github-guardrails-samples-repo.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/github-guardrails-samples-repo.png
rename to docs/using/controls/run-controls-using-scripts/github-guardrails-samples-repo.png
diff --git a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/guardrails-navigate-to-controls.png b/docs/using/controls/run-controls-using-scripts/guardrails-navigate-to-controls.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/guardrails-navigate-to-controls.png
rename to docs/using/controls/run-controls-using-scripts/guardrails-navigate-to-controls.png
diff --git a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/guardrails-retrieve-control-uri.png b/docs/using/controls/run-controls-using-scripts/guardrails-retrieve-control-uri.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/guardrails-retrieve-control-uri.png
rename to docs/using/controls/run-controls-using-scripts/guardrails-retrieve-control-uri.png
diff --git a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/guardrails-verify-control-status.png b/docs/using/controls/run-controls-using-scripts/guardrails-verify-control-status.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/guardrails-verify-control-status.png
rename to docs/using/controls/run-controls-using-scripts/guardrails-verify-control-status.png
diff --git a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/identify-controls-errors.png b/docs/using/controls/run-controls-using-scripts/identify-controls-errors.png
similarity index 100%
rename from docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/identify-controls-errors.png
rename to docs/using/controls/run-controls-using-scripts/identify-controls-errors.png
diff --git a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/index.md b/docs/using/controls/run-controls-using-scripts/index.md
similarity index 86%
rename from docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/index.md
rename to docs/using/controls/run-controls-using-scripts/index.md
index e8b66469..218589ea 100644
--- a/docs/guides/using-guardrails/troubleshooting/run-controls-using-scripts/index.md
+++ b/docs/using/controls/run-controls-using-scripts/index.md
@@ -1,6 +1,6 @@
---
title: Run Controls Using Scripts
-sidebar_label: Run Controls Using Scripts
+sidebar_label: Run Controls Using Scripts 🛠
---
# Run Controls Using Scripts
@@ -19,25 +19,25 @@ In this guide, you will:
Log into the Guardrails console with provided local credentials or by using any SAML based login and Select **Controls** from the top navigation menu.
-
+
## Step 2: Identify Control Errors
In the Controls section, filter and select the controls in an `Error` state that need to be re-run.
-
+
## Step 3: Retrieve Control Type URI
Open the control details, navigate to the **Developers** tab, and copy the `Control Type URI` for use in later steps.
-
+
## Step 4: Clone Guardrails Samples Repository
Go to [guardrails-samples](https://github.com/turbot/guardrails-samples) and clone the repository.
-
+
## Step 5: Navigate to Run-Controls Directory
@@ -105,7 +105,7 @@ The command stops once all controls have successfully run.
Check that all controls have moved to an `OK` state.
-
+
> [!NOTE]
> If you need to resolve policies that are not evaluating properly, you can use the same approach with the run-policies script instead.
diff --git a/docs/using/controls/types-categories.md b/docs/using/controls/types-categories.md
new file mode 100644
index 00000000..e8a204c5
--- /dev/null
+++ b/docs/using/controls/types-categories.md
@@ -0,0 +1,24 @@
+---
+title: Types & Categories
+sidebar_label: Types & Categories
+---
+
+# Control Types & Categories
+
+## Control Types
+
+A **Control Type** is a definition for a particular control. Each different control type is a blueprint that can be configured for resources, such the **Approved** control type for AWS S3 buckets. In this case, the control `AWS > S3 > Bucket > Approved` evaluates policy settings to determine what it means for an S3 bucket to be "Approved," and will take the action defined in the associated, identically named policy (`AWS > S3 > Bucket > Approved`).
+
+Control types are useful for filtering control objectives. Using the above example, users can drill into the `AWS`, `S3`, `Bucket`, and then `Approved` to see all Approved controls for every bucket managed by Guardrails. This process can be repeated for any control or resource.
+
+## Control Categories
+
+Guardrails control types exist for different resources and cloud providers. **Control Categories** provide an alternative to control types, allowing a vendor agnostic categorization of control types.
+
+For example, the control category `Resource > Encryption at Rest` includes many controls, such as `AWS > S3 > Bucket > Encryption at Rest`, `GCP > Compute > Disk > Encryption at Rest`, and `Azure > Storage > Storage Account > Encryption at Rest`.
+
+Control categories are typically used for reporting as well as useful aggregation and filtering of data.
+
+## Control Types and Categories - Visualized
+
+
diff --git a/docs/using/index.md b/docs/using/index.md
new file mode 100644
index 00000000..a8df128f
--- /dev/null
+++ b/docs/using/index.md
@@ -0,0 +1,38 @@
+---
+title: Using Guardrails
+---
+
+# Using Guardrails
+
+
+
+Turbot Guardrails provides a comprehensive governance platform designed to automate the discovery and remediation of compliance, security, financial, and operational objectives across enterprise cloud environments. It supports major public cloud providers and platforms, including AWS, Azure, Google Cloud, Kubernetes, and Github.
+
+Turbot Guardrails inventories your cloud [accounts], discovering [resources] on demand and tracking changes in your environment as they occur, providing a near realtime [CMDB] and an [audit log] of change activity.
+
+Once your inventory is set up, you can create [guardrails] to define your security, compliance, and operational posture. Each guardrail implements a [control] objective, such as enforcing encryption, monitoring access, and securing networking configurations. Turbot Guardrails provides over 9,000 prebuilt [policies], allowing you to customize the behavior of these controls to meet your standards and priorities.
+
+[Rollouts] help you deploy your guardrails to your enterprise in an organized, predictable, collaborative manner. Guardrails can be rolled out to your cloud accounts in phases, allowing you to preview and communicate potential issues and to warn of potential changes before they occur.
+
+Once guardrails are deployed, Guardrails can detect misconfigurations in real-time and automatically correct them ensuring that your environment remains compliant.
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/using/policies/backup-policy.png b/docs/using/policies/backup-policy.png
new file mode 100644
index 00000000..f6493ff1
Binary files /dev/null and b/docs/using/policies/backup-policy.png differ
diff --git a/docs/using/policies/calculated/calc-policy-lab/calculated-policy-test.png b/docs/using/policies/calculated/calc-policy-lab/calculated-policy-test.png
new file mode 100644
index 00000000..f79de4f3
Binary files /dev/null and b/docs/using/policies/calculated/calc-policy-lab/calculated-policy-test.png differ
diff --git a/docs/using/policies/calculated/calc-policy-lab/get-cal-policy.png b/docs/using/policies/calculated/calc-policy-lab/get-cal-policy.png
new file mode 100644
index 00000000..82c679b1
Binary files /dev/null and b/docs/using/policies/calculated/calc-policy-lab/get-cal-policy.png differ
diff --git a/docs/using/policies/calculated/calc-policy-lab/index.md b/docs/using/policies/calculated/calc-policy-lab/index.md
new file mode 100644
index 00000000..be6719fb
--- /dev/null
+++ b/docs/using/policies/calculated/calc-policy-lab/index.md
@@ -0,0 +1,215 @@
+---
+title: Calculated Policies in 7 minutes
+sidebar_label: Calculated Policies in 7 minutes 🔬
+---
+
+# Calculated Policies in 7 minutes
+
+| Goal | Use calculated policies to dynamically determine policy values |
+| ---- | -------------------------------------------------------------- |
+| Time | 7 minutes |
+
+## Overview
+
+While most policy settings can be set with a simple static value, there may be
+instances where you need more flexibility in determining the correct option.
+[Calculated policies](guides/managing-policies#using-calculated-polices) allow
+you to dynamically compute policy values using any information in the Turbot Guardrails
+CMDB.
+
+
+Any policy in Turbot Guardrails can use a calculated policy instead of a static value!
+
+
+In this exercise, you will create a calculated policy to set the
+`AWS > S3 > Bucket > Tags > Template` using the Turbot Guardrails Console.
+
+By the end of this lab, you will be able to create and test calculated policies
+in the Turbot Guardrails Console.
+
+## Prerequisites
+
+- [Install the aws and aws-s3 mods](mods/install). This lab exercise uses
+ policies in the `aws-s3` mod, so it must be installed in your Workspace.
+
+- You should be familiar with the basics of
+ [Managing Policies](guides/managing-policies). You may want to start with the
+ [Policy Settings in 7 minutes](7-minute-labs/set-policy) lab.
+
+- You must have at least one S3 bucket that has been discovered in your
+ workspace. It is recommended that you create a test bucket for this lab (or
+ re-use the bucket you created for
+ [Policy Settings in 7 minutes](7-minute-labs/set-policy))
+
+## Create/Edit the Policy Setting
+
+1. Log into the Turbot Guardrails Console as an Administrator (`Turbot/Admin` or `Turbot/Owner`), then click the **Policies** tab.
+2. Click the green **New Policy Setting** button.
+3. Search and select `AWS > S3 > Bucket > Tags > Template` as **Policy Type**.
+4. In the **Resource** field, select the test bucket created in the
+ [Prerequisites](#prerequisites) setup. You can search for it by name, or
+ **Browse** and select it.
+5. In the **Setting** section, click the link `Enable calculated mode`. Then
+ **Launch calculated policy builder**. This will allow you to create and test
+ your calculated policy.
+6. By default, the test bucket that you set in the **Resource** should be set as
+ the **Test Resource**.
+
+### Define the GraphQL input query
+
+To get information from the CMDB to use in our policy, you need to specify a
+[GraphQL](reference/graphql) Query. Copy & paste this query into the **Step 2:
+Query data using GraphQL** field:
+
+```graphql
+{
+ bucket {
+ Name
+ tags
+ }
+}
+```
+
+Note that the box to the right is populated with the results of your query
+against the **Test Resource**. For example:
+
+```json
+{
+ "bucket": {
+ "Name": "turbot-bucket-version",
+ "tags": {
+ "Company": "Vandelay Industries",
+ "Department": "Sales",
+ "Cost Center": "314159"
+ }
+ }
+}
+```
+
+### Create a template to format the results
+
+The `AWS > S3 > Bucket > Tags > Template` expects the tags to be formatted yaml
+object as a set of `key: value` pairs. You can use a
+[nunjucks](https://mozilla.github.io/nunjucks/) template to transform the query
+results into the format expected by the Policy Type.
+
+Copy & paste this template into the **Step 3: Transform using Jinja2 Template**
+field. For example:
+
+```yaml
+Company: "Vandelay Industries"
+Department:
+ "{% if $.bucket.tags['Department'] in ['Sales', 'IT', 'Marketing', 'HR'] %}{{
+ $.bucket.tags['Department'] }}{% else %}Non-Compliant Tag{% endif %}"
+Cost Center:
+ "{% if $.bucket.tags['Cost Center'] %}{{ $.bucket.tags['Cost Center'] }}{%
+ else %}Non-Compliant Tag{% endif %}"
+Environment:
+ "{% if $.bucket.tags['Environment'] in ['Dev', 'QA', 'Prod', 'Temp'] %}{{
+ $.bucket.tags['Environment'] }}{% else %}Non-Compliant Tag{% endif %}"
+```
+
+The template uses standard [nunjucks](https://mozilla.github.io/nunjucks/),
+allowing you to use conditional logic, iterate over items, and perform complex
+transformations of the data.
+
+Notice that the results of rendering your template with the data from the input
+query are shown to the right of the template. The box at the bottom shows the
+final, rendered policy value after validation against the schema for the policy
+type. 
+
+Click **Create** to create this setting (or **Update** if you are updating an
+existing setting).
+
+The policy value for this bucket will not be calculated. Any changes to the data
+in the input query will cause this policy to be re-calculated bases on the new
+values.
+
+Note that you created this setting on the bucket itself, thus only this bucket
+will be affected. If you made the setting at a higher level in the hierarchy, it
+would apply to every bucket below. For example, setting this calculated policy
+at the AWS Account level would cause every S3 bucket in the account to calculate
+_its own_ value, based on _its own_ data in the CMDB.
+
+## Expand your query
+
+1. Search and select `AWS > S3 > Bucket > Tags > Template` policy setting, and
+ click **EDIT** to update it.
+
+2. Update the Graphql. Make the following changes to the query. _For this
+ exercise, you should type these changes -- do not cut and paste_.
+
+```graphql
+{
+ // highlight-start
+ region {
+ Name
+ }
+ // highlight-end
+ bucket {
+ Name
+ tags
+ }
+}
+```
+
+
+
+
+
+
+The GraphQL available in calculated policies is a super-set of the
+[Turbot Guardrails GraphQL API](reference/graphql). The API is extended with dynamic
+queries for the Turbot Guardrails Resource Type that automatically pivot based on the
+context of the current resource. Notice in the example query that we added
+`region` to the query - Guardrails assumes that we mean the `region` resource in
+which _this bucket resides_. Likewise, you may use `account` and `folder` to get
+information about account and folder above the bucket in the hierarchy.
+
+You can discover the schema for these resources via auto-complete, or by viewing
+the schema definition in the **Inspect** tab of the [mod documentation](https://hub.guardrails.turbot.com/#mods).
+The `bucket` query refers to the
+[S3 Bucket Schema](mods/turbot/aws-s3/inspect#/definitions/bucket), as an
+example.
+
+You can also view the schema by looking at the **Explore** page on an existing
+resource. Occasionally, attributes may exist in the CMDB that are not explicitly
+defined in the schema definition. You can use `get` to retrieve these items.
+
+1. Go to the **Explore** page for your test bucket resource. Notice that there
+ is a `Grantee` attribute for this resource.
+2. View the
+ [S3 Bucket Schema definition](mods/turbot/aws-s3/inspect#/definitions/bucket).
+ Notice that `Grantee` is not explicitly defined as an attribute.
+3. To query the `Grantee` attribute, you must use a `get` query. Edit your query
+ as follows:
+
+```graphql
+{
+ region {
+ Name
+ }
+ bucket {
+ Name
+ tags
+ grantee: get(path: "Acl.Grants[0].Grantee") //highlight-line
+ }
+}
+```
+
+4. Notice that the `grantee` is now added to your query results.
+ 
+
+The combination of GraphQL and Nunjucks make calculated policies powerful and
+flexible. Any Turbot Guardrails policy can be calculated, using any data in the entire
+CMDB!
+
+## Further Reading
+
+- [Introduction to GraphQL](https://graphql.org/learn/)
+- [Nunjucks Templating Documentation](https://mozilla.github.io/nunjucks/templating.html)
+- [Turbot Guardrails GraphQL API Reference](reference/graphql)
+- [Turbot Guardrails Filter Language Reference](reference/filter)
+- [Managing Policies Guide](guides/managing-policies)
+- [Policy Settings in 7 minutes](7-minute-labs/set-policy)
+- [Mod Documentation](https://hub.guardrails.turbot.com/#mods)
diff --git a/docs/using/policies/calculated/calc-policy-lab/update-cal-policy.png b/docs/using/policies/calculated/calc-policy-lab/update-cal-policy.png
new file mode 100644
index 00000000..9d192517
Binary files /dev/null and b/docs/using/policies/calculated/calc-policy-lab/update-cal-policy.png differ
diff --git a/docs/using/policies/calculated/calculated-faq.md b/docs/using/policies/calculated/calculated-faq.md
new file mode 100644
index 00000000..9df68ed3
--- /dev/null
+++ b/docs/using/policies/calculated/calculated-faq.md
@@ -0,0 +1,247 @@
+---
+title: Calculated Policies FAQ
+sidebar_label: Calculated Policies FAQ
+---
+
+# Calculated Policies FAQ
+
+---
+
+- [What is a calculated policy?](#what-is-a-calculated-policy)
+- [How do calculated policies work?](#how-do-calculated-policies-work)
+- [Which policy can I turn into a calculated policy?](#which-policy-can-i-turn-into-a-calculated-policy)
+- [Are there any limitations to calculated policies?](#are-there-any-limitations-to-calculated-policies)
+- [How do I set a calculated policy?](#how-do-i-set-a-calculated-policy)
+- [How can I reference "strange" variables in a calculated policy?](#how-can-i-reference-strange-variables-in-a-calculated-policy)
+- [How do I add Terraform to calculated policy templates?](#how-do-i-add-terraform-to-calculated-policy-templates)
+
+---
+
+## What is a calculated policy?
+
+Customers often need to take remediation action based on specific business
+rules. For example, a static S3 bucket must be attached to a CloudFront
+distribution. Calculated policies encode that business logic in an executable
+form.
+
+## How do calculated policies work?
+
+Calculated policies are composed of a GraphQL query to get information about a
+resource and a Nunjucks template to specify the business logic. The resource
+data feeds into the template, which outputs strings that match policy values.
+Calculated policies are always run from the context of the resource itself. The
+Guardrails Samples Repo has
+[examples](https://github.com/turbot/guardrails-samples/tree/main/policy_packs) of
+what can be done.
+
+On resource discovery or an event, Guardrails will evaluate a calculated policy in
+the same way as a normal policy.
+
+## Which policy can I turn into a calculated policy?
+
+All policies can be made into calculated policies.
+
+The most common policies used for implementing custom business logic are the
+policy pairs of `Active`, and `Active > Age` then `Approved` and
+`Approved > Usage`. The `Active` and `Approved` policies specify what action to
+take, whether raise and alarm (Check) or delete the offending resource
+(Enforce). The business logic for deciding resource age or approved status is
+encoded in the `Active > Age` and `Approved > Usage` policies.
+
+Active and Approved controls are standard for all resources.
+
+## Are there any limitations to calculated policies?
+
+Calculated policies can only take the actions encoded in existing controls.
+`Active` and `Approved` controls are great for removing unapproved resources or
+to raise alarms for an administrator. Guardrails has implemented many common
+remediations, such as encryption at rest, tagging, and resource access policies.
+If the desired remediation action isn't currently available, reach out to
+[Guardrails support](mailto:help@turbot.com) with your use case!
+
+## How do I set a calculated policy?
+
+In the example below, we will investigate how to set a VPC Endpoint approved
+policy to `Not Approved` if the VPC Endpoint AWS policy has a principal value
+set to `*` (You will need an existing VPC endpoint under Guardrails management to
+test this calculated policy).
+
+1. In your AWS account locate an existing VPC endpoint and make note of its ID
+ (e.g. vpce-05b1912865c21251f).
+
+1. Navigate to the account where the policy will be set, then click on the
+ `Policies` tab, then select the `New Setting` button:
+
+1. Once the Create Policy screen opens up, browse to
+ `AWS > VPC > Endpoint > Approved > Usage`, click `Go` and then `Next`.
+
+1. Expand the `Scope` drop down menu by clicking on it.
+
+1. Search or browse to select the level at which the policy will be set. (e.g
+ Navigate to a region in your AWS Account). Once the proper level is showing,
+ click `Go`.
+
+1. The policy wizard is currently in Standard mode. (e.g. showing the basic
+ options of `Approved`, `Not approved`, or `Approved if AWS > VPC > Enabled`).
+
+1. To switch to calculated policy mode: Click on the `Switch to calculated mode`
+ link. Once switched the layout of the `Edit Policy Setting` dialog box
+ changes with some additional fields.
+
+1. Note that `Policy Type` and `Resource Scope` were already set in steps 3 & 4.
+
+1. In the `Setting` field paste the VPC Endpoint ID that you made note of at the
+ start. If the endpoint has been discovered by Guardrails searching on the
+ vpce-xxx... id will find it quickly and allow you to select it.
+
+1. Our calculated policy is evaluating the a policy attached to a VPC Endpoint,
+ so we query to return only the policy data. Use the following GraphQL example
+ for your query:
+ ```
+ {
+ resource{
+ stmts: get(path: "PolicyDocument.Statement")
+ }
+ }
+ ```
+1. Validate that the query result window show a valid result for your VPC
+ endpoint. A default endpoint policy will have a result set that looks like
+ this:
+
+ ```
+ {
+ "resource": {
+ "stmts": [
+ {
+ "Action": "*",
+ "Effect": "Allow",
+ "Resource": "*",
+ "Principal": "*"
+ }
+ ]
+ }
+ }
+ ```
+
+ Note the square bracket in the response - this indicates that the returned
+ data is an array, and thus will affect the structure of the policy template.
+
+1. Calculated policies use
+ [Nunjucks template format](https://mozilla.github.io/nunjucks/templating.html)
+ to evaluate custom logic and return one of the expected values for this
+ policy. In this case the allowed values are: `Not approved`, `Approved`,
+ `Approved if AWS > VPC > Enabled`. The following template checks to see if
+ any overly broad settings exist in the attached policy:
+ ```
+ {% set starValue = "False" %} {# Initialize a value to False #}
+ {% for statement in $.resource.stmts %} {# Iterate through all statements in the policy #}
+ {% if statement.Principal == "*" %}
+ {% set starValue = "True" %}
+ {% endif %}
+ {% endfor %}
+ {% if starValue == "True" %} {# If true, the policy is in violation #}
+ "Not approved"
+ {% else %}
+ "Approved"
+ {% endif %}
+ ```
+1. Verify that the query and template are set and verified by Guardrails to evaluate
+ correctly; the block text below the template field will show the evaluated
+ value for the example VPC endpoint you selected, but each VPC endpoint will
+ be individually evaluated by Guardrails at runtime.
+
+1. Click the `Create` button to save your calculated policy, it will immediately
+ take effect and evaluate if the current VPC endpoints are configured
+ correctly.
+
+## How can I reference variables that include characters in a calculated policy?
+
+Most variables referenced in calculated policies are trivial, such as `stage`,
+`data`, or `name`. However, some cloud resources include attributes with
+characters. These include any attribute with a hyphen (`-`) or in some specific
+cases, where the attribute is only characters (`*/*`).
+
+Let's assume we are doing the following query and template for the policy
+`AWS > API Gateway > Stage > Approved > Usage`:
+
+```graphql
+{
+ stage {
+ methodSettings
+ }
+}
+```
+
+```json
+{
+ "stage": {
+ "methodSettings": {
+ "*/*": {
+ "loggingLevel": "INFO",
+ "cachingEnabled": false,
+ "metricsEnabled": true,
+ "dataTraceEnabled": false,
+ "cacheTtlInSeconds": 300,
+ "cacheDataEncrypted": false,
+ "throttlingRateLimit": 10,000,
+ "throttlingBurstLimit": 5000,
+ "requireAuthorizationForCacheControl": true,
+ "unauthorizedCacheControlHeaderStrategy": "SUCCEED_WITH_RESPONSE_HEADER"
+ }
+ }
+ }
+}
+```
+
+The goal is to make an evaluation based off the `loggingLevel` attribute. To
+call this attribute, we need to use the following syntax in the nunjucks
+template:
+
+`$.stage.methodSettings['*/*'].loggingLevel`
+
+We can do the same things for attributes that contain hyphens, like so:
+
+`$.bucket.turbot.tags['this-tag-has-hyphens']`
+
+## How do I add Terraform to calculated policy templates?
+
+Using a policy such as `AWS > Backup > Source > Stack`, it is possible to create
+a calculated policy template that is Terraform. For example,
+
+```hcl
+resource "aws_iam_role" "{{ $.region.metadata.aws.accountId }}_ec2_backup_role" {
+ name = "turbot_ec2_backup_role"
+ assume_role_policy = ""
+}
+```
+
+While the calculated policy will be in the ok state (Assuming the query is
+valid), the control `AWS > Backup > Source` will return invalid:
+
+```
+Failed to convert the stack source from HCL to JSON
+
+Command failed: PATH=$PATH:. hcl2json
+
+Failed to convert file: :1,104-122: Invalid single-argument block definition;
+
+A single-line block definition must end with a closing brace immediately after its single argument definition.
+```
+
+To remedy this, simply use the pipe character (`|`) at the start of the
+terraform resource definition in the calculated policy template:
+
+```hcl
+|
+ resource "aws_iam_role" "{{ $.region.metadata.aws.regionName }}_ec2_backup_role" {
+ name = "turbot_ec2_backup_role"
+ assume_role_policy = ""
+ }
+```
+
+## Additional Reading
+
+- [Calculated Policy 7 minute lab](7-minute-labs/calc-policy)
+- [Guardrails Samples Repo with Policy Packs](https://github.com/turbot/guardrails-samples/tree/main/policy_packs)
+- [Policies concepts page](concepts/policies)
+- [Azure resource tagging example with calculated policies and Terraform](guides/managing-policies/config-examples/azure-tags)
diff --git a/docs/using/policies/calculated/create-calc-setting/index.md b/docs/using/policies/calculated/create-calc-setting/index.md
new file mode 100644
index 00000000..81e36b44
--- /dev/null
+++ b/docs/using/policies/calculated/create-calc-setting/index.md
@@ -0,0 +1,100 @@
+---
+title: Create a Calculated Policy Setting
+sidebar_label: Create a Calculated Policy Setting 🛠
+---
+
+# Create a Calculated Policy Setting
+
+While most policy settings can be set with a simple static value, there may be
+instances where more flexibility is needed in determining the correct option.
+[Calculated policies](concepts/policies/values-settings#calculating-policy-values-for-a-resource)
+allow you to dynamically compute the policy value using information available in
+the Guardrails CMDB.
+
+Any policy in Guardrails can use a calculated policy instead of a static value!
+
+## Calculated Policy Taxonomy
+
+What defines a calculated policy?
+
+1. A [GraphQL](reference/graphql) query. This query automatically pivots to the
+ current resource, simplifying the query syntax. For example, if you query
+ `resource`, Guardrails knows you mean _this (the current) resource_, and querying
+ `region` means _the region for this (the current) resource_:
+
+```graphql
+{
+ resource {
+ tags
+ }
+ region {
+ Name
+ }
+}
+```
+
+2. A [Nunjucks](https://mozilla.github.io/nunjucks/) template to define logic,
+ parse the query response, and eventually output a value. For example:
+
+```
+{% if $.resource.tags['data-classification'] == "temp" %}
+"Enforce: Disabled"
+{% else %}
+"Enforce: Enabled"
+{% endif %}
+```
+
+## Create a Calculated Policy Setting [Guardrails Console]
+
+You can create a policy setting in the Guardrails Console in the same way that you
+can
+[create a simple policy setting](guides/managing-policies#creating-simple-policy-settings),
+however instead of entering a value for the **Setting**, click **Enable
+calculated mode** and click **Launch calculated policy builder**.
+
+To create a calculated policy, navigate to the **Create Policy Setting** page.
+Select **Enable calculated mode** then **Launch calculated policy builder**.
+
+1. Select a **Test Resource** that is used to verify the query.
+2. Enter a valid **GraphQL Input Query**. The query Output box will update in
+ real time.
+3. Enter a valid **Nunjucks Template**. Once again, this is logic that can be
+ used to parse the query and then output a value based on template logic.
+4. Verify that the final computed policy value in the **Result** box is correct
+ and has passed validation.
+ 
+
+5. If desired, change the **Test Resource** to verify against other resources.
+6. Click **Update** to set the calculated policy.
+7. Click **Create** to create your new policy setting.
+ 
+
+## Creating a Policy Setting [Terraform]
+
+You can manage policy settings with Terraform using the
+[turbot_policy_setting](https://www.terraform.io/docs/providers/turbot/r/policy_setting.html)
+resource by specifying a `template` and `template_input`. Syntax here is VERY
+important. Note the `EOT` encapsulating both the template and template_input!
+
+```hcl
+# AWS > S3 > Bucket > Versioning
+resource "turbot_policy_setting" "s3_bucket_versioning" {
+ resource = turbot_policy_pack.baseline.id
+ type = "tmod:@turbot/aws-s3#/policy/types/bucketVersioning"
+ template_input = < Age` policy be
+calculated. However, this can sometimes result in the `Active` control going
+into an `invalid` state, as they require at least one of the sub policies not be
+in `Skip`. To solve this problem, a calc policy can be placed on the `Active`
+policy with similar logic to the `Active > Age` policy. This way, evaluation of
+the `Active` control as a whole will go to `Skipped` and avoid the `invalid`
+state.
+
+## Multi-query Calculated Policies
+
+The below Terraform excerpt shows the YAML array of GraphQL+Nunjucks templates.
+
+```yaml
+- |
+ {
+ account {
+ turbot {
+ id
+ }
+ }
+ }
+- |
+ {
+ account {
+ turbot {
+ id
+ }
+ }
+ trails: resources(filter: "resourceId:{{ $.account.turbot.id }} resourceTypeId:'tmod:@turbot/aws-cloudtrail#/resource/types/trail' $.Status.IsLogging:true $.IsMultiRegionTrail:true limit:300") {
+ items {
+ trailName: get(path: "Name")
+ cloudWatchLogsLogGroupArn: get(path: "CloudWatchLogsLogGroupArn")
+ eventSelectors: get(path: "EventSelectors")
+ }
+ }
+ }
+```
+
+Notes:
+
+- The YAML `- |` symbols are essential as this indicates that this is an array
+ of queries and the strings in each array element are multi-line. These `- |`
+ array indicators should be on their own lines. YAML is also particular about
+ indentation.
+- Only the results of the final query are sent to the control. Any intermediate
+ results must also be included in the final query. The example shows how this
+ is done.
+- GraphQL permits multiple `resources()` queries when they have labels. The
+ `trails:` label shows how this is done.
+- A full example can be found in the
+ [Guardrails Samples Repo](https://github.com/turbot/guardrails-samples/blob/main/policy_packs/aws/ec2/enforce_encryption_at_rest_is_enabled_for_ebs_volumes/README.md).
+
+## Additional Information
+
+- [Calculated Policy 7 minute lab](7-minute-labs/calc-policy)
+- [Guardrails Samples Repo with Policy Packs](https://github.com/turbot/guardrails-samples/tree/main/policy_packs)
+- [Policies concepts page](concepts/policies)
+- [AWS resource tagging example with calculated policies and Terraform](https://github.com/turbot/guardrails-samples/tree/main/policy_packs/aws/ec2/enforce_instances_use_amis_with_approved_tags)
+- [Calculated Policy FAQ](/guardrails/docs/concepts/policies/calculated-faq)
diff --git a/docs/using/policies/create-exception/exception-1.png b/docs/using/policies/create-exception/exception-1.png
new file mode 100644
index 00000000..ac365b3e
Binary files /dev/null and b/docs/using/policies/create-exception/exception-1.png differ
diff --git a/docs/using/policies/create-exception/exception-2.png b/docs/using/policies/create-exception/exception-2.png
new file mode 100644
index 00000000..113f0319
Binary files /dev/null and b/docs/using/policies/create-exception/exception-2.png differ
diff --git a/docs/using/policies/create-exception/exception-3.png b/docs/using/policies/create-exception/exception-3.png
new file mode 100644
index 00000000..4b3ba600
Binary files /dev/null and b/docs/using/policies/create-exception/exception-3.png differ
diff --git a/docs/using/policies/create-exception/exception-4.png b/docs/using/policies/create-exception/exception-4.png
new file mode 100644
index 00000000..151dd6d3
Binary files /dev/null and b/docs/using/policies/create-exception/exception-4.png differ
diff --git a/docs/using/policies/create-exception/exception-5.png b/docs/using/policies/create-exception/exception-5.png
new file mode 100644
index 00000000..81d0016a
Binary files /dev/null and b/docs/using/policies/create-exception/exception-5.png differ
diff --git a/docs/using/policies/create-exception/index.md b/docs/using/policies/create-exception/index.md
new file mode 100644
index 00000000..7fdf3715
--- /dev/null
+++ b/docs/using/policies/create-exception/index.md
@@ -0,0 +1,41 @@
+---
+title: Create an Exception
+sidebar_label: Create an Exception 🛠
+---
+
+# Create an Exception
+
+The Guardrails [Resource Hierarchy](concepts/policies/hierarchy) allows you to
+define a policy setting in a single place and have it enforced on all descendant
+resources. However, there are occasions when the policy setting should not (or
+cannot) be enforced on specific resources. **Exceptions** allow you to override
+a required setting on a resource lower in the policy hierarchy.
+
+
+To create an exception, you must have Turbot/Admin permission on the resource where the required setting is defined.
+
+
+Exceptions can be created in the Guardrails Console from the **Policy Setting
+Hierarchy** page:
+
+1. From the home page, search the resource for which you wish to create an
+ exception. Click on the **Resource**. Resource details page displayed.
+ 
+2. Click **Policies** tab for the resource (under the resource name, not at the
+ top of the window). Note that this page is filtered to show only the
+ policies at the resource level. 
+3. Search and click on the policy setting to open the **Policy Value** page.
+ 
+ 
+
+ Notice that the detail page for a policy value shows the current value as well as where the value is inherited from (if it is inherited).
+
+4. From the policy value page, click the **Create Setting** link.
+5. Enter the information in the **Create Policy Setting** page, and click
+ **Create**. This creates the policy setting on the resource.
+6. The policy type will automatically fill, but be sure to verify that it is as
+ expected and that the resource in the resource field is correct.
+7. Once verified, select the correct setting (or input the value if required)
+ and click **Create**! Once created, you will see a page showing both the
+ `Required` setting as well as the new `Exception`.
+ 
diff --git a/docs/using/policies/create-setting/create-new-policy-setting.png b/docs/using/policies/create-setting/create-new-policy-setting.png
new file mode 100644
index 00000000..e8af0492
Binary files /dev/null and b/docs/using/policies/create-setting/create-new-policy-setting.png differ
diff --git a/docs/using/policies/create-setting/index.md b/docs/using/policies/create-setting/index.md
new file mode 100644
index 00000000..af0ad3d2
--- /dev/null
+++ b/docs/using/policies/create-setting/index.md
@@ -0,0 +1,125 @@
+---
+title: Create a Policy Setting
+sidebar_label: Create a Policy Setting 🛠
+---
+
+# Create a Policy Setting
+
+
+[Polices](concepts/policies) allow you to define configuration settings in
+Guardrails and apply them across your environment. Guardrails' hierarchical structure
+providers a powerful but simple mechanism for centralizing policy
+administration, along with managing exceptions.
+
+
+
+## Policy Settings in the Guardrails Console
+
+You can create a policy setting in the Guardrails Console from the **Policies** tab.
+
+1. Log into Guardrails with `Turbot/Admin` permissions, then click the **Policies**
+ tab.
+
+2. Click the **New Policy Setting** button.
+ 
+
+3. Select the
+ **[Policy Type](concepts/policies/types-categories#policy-types)**. For
+ example, `AWS > EC2 > Instance > Approved`.
+
+4. Select the **Resource** where the policy setting will live. The setting will
+ affect all resources at the specified level and below in the
+ [policy hierarchy](concepts/policies/hierarchy).
+
+5. Select the appropriate setting. Some policies have predefined settings, but
+ others accept arrays with strings. The format and acceptable values depend on
+ the policy type. The right side of the window contains the policy overview,
+ recommendations, as well as the allowed values.
+
+6. Select the
+ **[Precedence](concepts/policies/hierarchy#precedence-rules-required-vs-recommended)**
+ for this setting. Default setting is `Required`.
+ 
+
+7. If desired, click **Add note**. Often this is used to designate change
+ control identifiers such as change order ticket numbers.
+
+8. If desired, click **Add expiration** to set an expiration date. The policy
+ will expire after the defined time elapses.
+
+9. Click **Create** to create your new setting. The policy will immediately go
+ into effect. Be careful when applying policies that are capable of changing
+ or removing cloud resources!
+ 
+
+
+
+## Policy Settings with Terraform
+
+
+
+You can manage policy settings with Terraform using the
+[turbot_policy_setting](https://www.terraform.io/docs/providers/turbot/r/policy_setting.html)
+resource.
+
+```hcl
+# Setting value to "Enforce: Enabled" to enable versioning for buckets
+# AWS > S3 > Bucket > Versioning
+resource "turbot_policy_setting" "s3_bucket_versioning" {
+ resource = turbot_folder.id
+ type = "tmod:@turbot/aws-s3#/policy/types/bucketVersioning"
+ value = "Enforce: Enabled"
+}
+```
+
+
diff --git a/docs/using/policies/create-setting/policy-setting-created.png b/docs/using/policies/create-setting/policy-setting-created.png
new file mode 100644
index 00000000..5c088202
Binary files /dev/null and b/docs/using/policies/create-setting/policy-setting-created.png differ
diff --git a/docs/using/policies/create-setting/policy-setting-detail.png b/docs/using/policies/create-setting/policy-setting-detail.png
new file mode 100644
index 00000000..35cbec80
Binary files /dev/null and b/docs/using/policies/create-setting/policy-setting-detail.png differ
diff --git a/docs/using/policies/create-setting/policy-setting-search-result.png b/docs/using/policies/create-setting/policy-setting-search-result.png
new file mode 100644
index 00000000..21aab6d3
Binary files /dev/null and b/docs/using/policies/create-setting/policy-setting-search-result.png differ
diff --git a/docs/using/policies/create-setting/policy-setting-updated.png b/docs/using/policies/create-setting/policy-setting-updated.png
new file mode 100644
index 00000000..71a955ca
Binary files /dev/null and b/docs/using/policies/create-setting/policy-setting-updated.png differ
diff --git a/docs/using/policies/default-policy.png b/docs/using/policies/default-policy.png
new file mode 100644
index 00000000..385543ec
Binary files /dev/null and b/docs/using/policies/default-policy.png differ
diff --git a/docs/using/policies/exception.png b/docs/using/policies/exception.png
new file mode 100644
index 00000000..e83f4b37
Binary files /dev/null and b/docs/using/policies/exception.png differ
diff --git a/docs/concepts/policies/hierarchy.md b/docs/using/policies/hierarchy.md
similarity index 100%
rename from docs/concepts/policies/hierarchy.md
rename to docs/using/policies/hierarchy.md
diff --git a/docs/concepts/policies/index.md b/docs/using/policies/index.md
similarity index 66%
rename from docs/concepts/policies/index.md
rename to docs/using/policies/index.md
index 2f4c84fc..439117e9 100644
--- a/docs/concepts/policies/index.md
+++ b/docs/using/policies/index.md
@@ -21,6 +21,8 @@ In Guardrails, policies provide:
Guardrails Policies can be managed using the Guardrails UI, Guardrails API or software
configuration management tools.
+
+
+
## Key Concepts
@@ -69,6 +73,7 @@ effect.
applicable resource inherits the value, and the relevant control will check and/
or remediate the resource.
+
+
+
+## Policy Types & Categories
+
+### Policy Types
+
+A **Policy Type** defines a specific policy that may be configured for
+resources. For example, `AWS > S3 > Bucket > Approved`.
+
+Each policy type targets a set of
+[Resource Types](concepts/resources/types-categories#resource-types).
+
+ The policy type AWS > S3 > Bucket > Approved
targets a resource type of AWS > S3 > Bucket
, thus every instance of AWS > S3 > Bucket
will have an AWS > S3 > Bucket > Approved
policy. Each of these instances may have its own policy setting, and will have its own policy value.
+
+
+Valid values for a policy type are defined through it's JSON schema.
+
+ The policy type AWS > S3 > Bucket > Approved
has
+a specific enumerated list of valid values: `Skip`, `Check: Approved`, `Enforce: Delete unapproved if new & empty`.
+
+
+Policy types are defined in a type hierarchy.
+
+ The Approved
policy type is actually a child of
+the AWS > S3 > Bucket
resource type and has child policies such as Regions
with a full path of AWS > S3 > Bucket >
+Approved > Regions
.
+
+
+Policy types are defined in [Mods](https://hub.guardrails.turbot.com/#mods).
+
+### Policy Categories
+
+Guardrails may include hundreds or thousands of policy types covering similar
+concepts (e.g. Approved, Data Protection) across various services (e.g. AWS,
+Azure). The policy type hierarchy provides grouping of policies, but in a
+structured service oriented manner. **Policy Categories** provide an alternate,
+vendor agnostic, categorization of policy types.
+
+ The policy category Turbot > Approved
includes many Approved
style policies including AWS > S3 > Bucket > Approved
.
+
+
+Policy categories are typically used for reporting, providing useful aggregation
+and filtering of data.
+
+### Example - Policy Types and Categories
+
+
diff --git a/docs/using/policies/inherit-1.png b/docs/using/policies/inherit-1.png
new file mode 100644
index 00000000..31b64721
Binary files /dev/null and b/docs/using/policies/inherit-1.png differ
diff --git a/docs/using/policies/inherit-2.png b/docs/using/policies/inherit-2.png
new file mode 100644
index 00000000..c60359dd
Binary files /dev/null and b/docs/using/policies/inherit-2.png differ
diff --git a/docs/using/policies/inherit-3.png b/docs/using/policies/inherit-3.png
new file mode 100644
index 00000000..acac93cc
Binary files /dev/null and b/docs/using/policies/inherit-3.png differ
diff --git a/docs/using/policies/inherit-4.png b/docs/using/policies/inherit-4.png
new file mode 100644
index 00000000..2fc05e51
Binary files /dev/null and b/docs/using/policies/inherit-4.png differ
diff --git a/docs/using/policies/inherit-5.png b/docs/using/policies/inherit-5.png
new file mode 100644
index 00000000..d9856851
Binary files /dev/null and b/docs/using/policies/inherit-5.png differ
diff --git a/docs/using/policies/policy-pack-2.png b/docs/using/policies/policy-pack-2.png
new file mode 100644
index 00000000..339b7cef
Binary files /dev/null and b/docs/using/policies/policy-pack-2.png differ
diff --git a/docs/using/policies/policy-pack.png b/docs/using/policies/policy-pack.png
new file mode 100644
index 00000000..e9827809
Binary files /dev/null and b/docs/using/policies/policy-pack.png differ
diff --git a/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-console-login.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-console-login.png
new file mode 100644
index 00000000..3be50851
Binary files /dev/null and b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-console-login.png differ
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-add.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-add.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-add.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-add.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-manage.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-manage.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-manage.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-manage.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-policy-pack-save.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-policy-pack-save.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-policy-pack-save.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-policy-pack-save.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-resource.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-resource.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-resource.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-resource.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-resources-tab.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-resources-tab.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-select-resources-tab.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-select-resources-tab.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-verify-controls.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-verify-controls.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-verify-controls.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-verify-controls.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-verify-policy.png b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-verify-policy.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/guardrails-verify-policy.png
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/guardrails-verify-policy.png
diff --git a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/index.md b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/index.md
similarity index 67%
rename from docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/index.md
rename to docs/using/policies/policy-packs/attach-policy-pack-to-resource/index.md
index aa5b1a1e..7dd786bf 100644
--- a/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource/index.md
+++ b/docs/using/policies/policy-packs/attach-policy-pack-to-resource/index.md
@@ -1,6 +1,6 @@
---
title: Attach Policy Pack to Resource
-sidebar_label: Attach Policy Pack to Resource
+sidebar_label: Attach Policy Pack to Resource 🛠
---
# Attach Policy Pack to Specific Resource
@@ -19,43 +19,43 @@ In this guide, you will:
Log into the Guardrails console.
-
+
## Step 2: Navigate to Resources
Choose **Resources** from the top navigation menu.
-
+
## Step 3: Select Resource
Search for and select the desired resource. In this example, we have selected an EC2 Volume.
-
+
## Step 4: Associate Policy Pack
From the resource detail page, click **MANAGE** in the Policy Packs section to proceed.
-
+
Select **Add** from the dialog box.
-
+
Select the desired policy pack and click **Save** to apply it to the resource.
-
+
## Step 5: Verify Control
The newly attached policy pack should now be visible under the **Policies** tab of the resource.
-
+
The newly applied control should now be visible under the **Controls** tab of the resource.
-
+
## Next Steps
diff --git a/docs/guides/configuring-guardrails/policy-packs/index.md b/docs/using/policies/policy-packs/create/index.md
similarity index 97%
rename from docs/guides/configuring-guardrails/policy-packs/index.md
rename to docs/using/policies/policy-packs/create/index.md
index 3826ada8..15e010f3 100644
--- a/docs/guides/configuring-guardrails/policy-packs/index.md
+++ b/docs/using/policies/policy-packs/create/index.md
@@ -1,6 +1,6 @@
---
-title: Policy Packs
-sidebar_label: Policy Packs
+title: Create a Policy Pack
+sidebar_label: Create a Policy Pack 🛠
---
# Policy Packs
@@ -16,7 +16,7 @@ sidebar_label: Policy Packs
1. Finish by clicking the green "Create" button
-
+
**Tip**: It is most useful to create Policy Packs (and other Guardrails configuration) as code. See [below](#create-a-policy-pack-as-code) for details.
diff --git a/docs/guides/configuring-guardrails/policy-packs/policies-page.png b/docs/using/policies/policy-packs/create/policies-page.png
similarity index 100%
rename from docs/guides/configuring-guardrails/policy-packs/policies-page.png
rename to docs/using/policies/policy-packs/create/policies-page.png
diff --git a/docs/concepts/policy-packs/index.md b/docs/using/policies/policy-packs/index.md
similarity index 100%
rename from docs/concepts/policy-packs/index.md
rename to docs/using/policies/policy-packs/index.md
diff --git a/docs/concepts/policy-packs/policy-packs-none.png b/docs/using/policies/policy-packs/policy-packs-none.png
similarity index 100%
rename from docs/concepts/policy-packs/policy-packs-none.png
rename to docs/using/policies/policy-packs/policy-packs-none.png
diff --git a/docs/concepts/policy-packs/policy-packs-updated.png b/docs/using/policies/policy-packs/policy-packs-updated.png
similarity index 100%
rename from docs/concepts/policy-packs/policy-packs-updated.png
rename to docs/using/policies/policy-packs/policy-packs-updated.png
diff --git a/docs/using/policies/policy_types_categories-ex.png b/docs/using/policies/policy_types_categories-ex.png
new file mode 100644
index 00000000..90ae08b2
Binary files /dev/null and b/docs/using/policies/policy_types_categories-ex.png differ
diff --git a/docs/getting-started/7-minute-labs/set-policy/default-policy-value.png b/docs/using/policies/set-policy-lab/default-policy-value.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/default-policy-value.png
rename to docs/using/policies/set-policy-lab/default-policy-value.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/detail-note-expire.png b/docs/using/policies/set-policy-lab/detail-note-expire.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/detail-note-expire.png
rename to docs/using/policies/set-policy-lab/detail-note-expire.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/enforce-tag.png b/docs/using/policies/set-policy-lab/enforce-tag.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/enforce-tag.png
rename to docs/using/policies/set-policy-lab/enforce-tag.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/index.md b/docs/using/policies/set-policy-lab/index.md
similarity index 98%
rename from docs/getting-started/7-minute-labs/set-policy/index.md
rename to docs/using/policies/set-policy-lab/index.md
index 4c7ba220..a3be5855 100644
--- a/docs/getting-started/7-minute-labs/set-policy/index.md
+++ b/docs/using/policies/set-policy-lab/index.md
@@ -1,9 +1,6 @@
---
title: Policy Settings in 7 minutes
-template: Documentation
-nav:
- title: Policy Settings
- order: 10
+sidebar_label: Policy Settings in 7 minutes 🔬
---
# Policy Settings in 7 minutes
diff --git a/docs/getting-started/7-minute-labs/set-policy/policy-hierarchy.png b/docs/using/policies/set-policy-lab/policy-hierarchy.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/policy-hierarchy.png
rename to docs/using/policies/set-policy-lab/policy-hierarchy.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/policy-note-expiration.png b/docs/using/policies/set-policy-lab/policy-note-expiration.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/policy-note-expiration.png
rename to docs/using/policies/set-policy-lab/policy-note-expiration.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/search-bucket-step1.png b/docs/using/policies/set-policy-lab/search-bucket-step1.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/search-bucket-step1.png
rename to docs/using/policies/set-policy-lab/search-bucket-step1.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/search-bucket-step2.png b/docs/using/policies/set-policy-lab/search-bucket-step2.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/search-bucket-step2.png
rename to docs/using/policies/set-policy-lab/search-bucket-step2.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/search-bucket-step3.png b/docs/using/policies/set-policy-lab/search-bucket-step3.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/search-bucket-step3.png
rename to docs/using/policies/set-policy-lab/search-bucket-step3.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/settings-values.png b/docs/using/policies/set-policy-lab/settings-values.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/settings-values.png
rename to docs/using/policies/set-policy-lab/settings-values.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/tags-template.png b/docs/using/policies/set-policy-lab/tags-template.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/tags-template.png
rename to docs/using/policies/set-policy-lab/tags-template.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/values-detail.png b/docs/using/policies/set-policy-lab/values-detail.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/values-detail.png
rename to docs/using/policies/set-policy-lab/values-detail.png
diff --git a/docs/getting-started/7-minute-labs/set-policy/values-record.png b/docs/using/policies/set-policy-lab/values-record.png
similarity index 100%
rename from docs/getting-started/7-minute-labs/set-policy/values-record.png
rename to docs/using/policies/set-policy-lab/values-record.png
diff --git a/docs/using/policies/sf-inject.png b/docs/using/policies/sf-inject.png
new file mode 100644
index 00000000..7bffe0c7
Binary files /dev/null and b/docs/using/policies/sf-inject.png differ
diff --git a/docs/using/policies/taxonomy.md.og b/docs/using/policies/taxonomy.md.og
new file mode 100644
index 00000000..f136e1a4
--- /dev/null
+++ b/docs/using/policies/taxonomy.md.og
@@ -0,0 +1,255 @@
+---
+title: Taxonomy
+sidebar_label: Taxonomy
+---
+
+# Taxonomy of Policies
+
+There's a number of dimensions that can be used to describe a policy. They are:
+
+- the values the policy accepts
+- whether it depends on other policies
+- and if it's calculated or not.
+
+Respectively, these are Simple policies, Compound policies and Calculated
+policies. In the course of building policies to satisfy a particular control
+objective, all three types may be used
+
+In ascending order of complexity: Simple, Compound, Calculated, Calculated
+Simple, Calculated Compound.
+
+- **Simple**: A policy that takes a single value without any dependent policies.
+
+ - Simple policies can have the following values:
+ - Enumerated values
+ - Text field
+ - [OCL](guides/managing-policies/OCL) [OCL Reference](reference/ocl)
+ - [YAML](guides/managing-policies/YAML)
+ - [HCL/Terraform](guides/network-stack)
+
+- **Compound**: A policy that depends on values in other policies to determine
+ what to do. A common examples is the `Active` collections of policies. (Other
+ examples of policy collections are `Approved`, `Configured`, `Logging`, and
+ `Permissions` to name a few.) On its own the `Active` policy dictates what to
+ do when an inactive resource is found. It relies on the `Active > Age` and
+ `Active > Last Modified` child policies to determine if the resource is
+ active.
+
+- **Calculated**: Calculated policies are most often used when a customer needs
+ to implement business logic when evaluating a resource. In contrast to Simple
+ and Compound policies, a calculated policy can implement custom logic based on
+ CMDB information. Any policy in Guardrails can be made into a calculated policy.
+
+- **Multi-query Calculated**: Some calculated policies benefit from or require
+ multiple stages of refinement of input data. For example: A control objective
+ on a particular network resource type depends on the presence of other
+ resources in the same virtual network. A single-query calc policy approach
+ would grab all resources of that resource type for the entire workspace then
+ filter that huge list in the Nunjucks template. Essentially asking "Return all
+ resources of this resource type everywhere." In large environments, this can
+ result in thousands or tens of thousands of `items`. Calc policy GraphQL
+ results are hard limited to 300 results with no paging possible. The
+ multi-query approach instead starts with the question "What Virtual Network is
+ this resource in?" then asks "In this virtual network specifically, what
+ network resources are available?". Now, instead of thousands of `items`, the
+ calc policy only has to deal with a few relevant resources. The benefit of
+ multi-query is that policy developers are assured they get exactly the data
+ they need with the cost of some added complexity in their policies.
+
+## Examples
+
+### Simple Policy Example
+
+Consider
+[`AWS > CloudWatch > Alarm > CMDB`](mods/turbot/aws-cloudwatch/inspect#/policy/types/alarmCmdb)
+as an example of a simple policy. It accepts one of three policy values: `Skip`,
+`Enforce: Enabled`, `Enforce: Disabled`. Selecting one of these values is all
+that's required.
+
+### Compound Policy Example
+
+Let's look at the
+[`AWS > CloudWatch > Alarm > Active`](mods/turbot/aws-cloudwatch/inspect#/policy/types/alarmActive)
+policy collection. The patterns described below will hold for other compound
+policies. The collection includes with these (truncated for readability) value
+sets:
+
+- `AWS > CloudWatch > Alarm > Active`
+
+```
+Skip
+Check: Active
+Enforce: Delete inactive with 1 day warning
+Enforce: Delete inactive with 3 days warning
+Enforce: Delete inactive with 7 days warning
+```
+
+- `AWS > CloudWatch > Alarm > Active > Age`
+
+```
+Skip
+Force inactive if age > 1 day
+Force inactive if age > 3 days
+Force inactive if age > 7 days
+```
+
+- `AWS > CloudWatch > Alarm > Active > Last Modified`
+
+```
+Skip
+Active if last modified <= 1 day
+Active if last modified <= 3 days
+Active if last modified <= 7 days
+```
+
+We can see that the `Active` policy is the only one that asserts what Guardrails
+should do with an out of compliance resource. It will `Skip`, `Check` or
+`Enforce`. The `Age` and `Last Modified` policies make assertions about the
+state of the resource itself. Remember that `Skip` means "ignore" or "do not
+evaluate" to Guardrails, and that almost all policies default to `Skip`.
+
+Setting the `Active` policy alone will put the `Active` control into an
+`Invalid` state because dependent policies of `Active > Age` and
+`Active > Last Modified` are in `Skip`. There's no information for the `Active`
+policy to make a decision on. If we set `Active > Age` to some value other than
+`Skip`, then `Active` can make a decision.
+
+## Calculated Policies
+
+Any policy in Guardrails can be turned into a
+[calculated policy](faq/calculated-policies). A calculated policy is used
+anytime the basic action provided by Guardrails needs to be dependent on some other
+information. A common example is to make a resource's tag key/value dependent on
+whether the resource is in a production or nonproduction environment. More
+complex organizational business rules are often implemented in calculated
+policies.
+
+Calculated policies rely on three things: The information contained in the CMDB
+for the target resource, the GraphQL query to access that information and the
+Nunjucks template to evaluate it.
+
+CMDB: Definitions for a resource's CMDB entry can be found in the Mods
+Repository documentation. For our CloudWatch Alarm example, we would start with
+the [Alarm](mods/turbot/aws-cloudwatch/inspect#/resource/types/alarm) resource
+summary then go to the
+[Alarm resource definition](mods/turbot/aws-cloudwatch/inspect#/definitions/alarm).
+The easiest way to explore is to create an instance of the resource you want to
+work on, then look at the data provided in the Overview tab.
+
+GraphQL: Use the Developer console in your Guardrails workspace to explore the
+`resource` query. Under the hood, the calculated policy dialog is making a
+similar query. Provided you have an example resource already, navigate to that
+resource in the Guardrails console. Go to the Overview tab then look for `id` under
+the `turbot` section. Include that long number in the `id` field of the resource
+query in the Developer Console.
+
+When working on calculated policies, make sure to select a target resource. The
+below examples won't make sense if you don't pick a resource.
+
+A simple starter query in the Developer Console might look like:
+
+```
+query SimpleResourceQuery {
+ resource(id: "196925434872486") {
+ data
+ turbot {
+ id
+ akas
+ }
+ }
+}
+```
+
+The equivalent calculated policy query is:
+
+```
+{
+ resource {
+ data
+ turbot {
+ id
+ akas
+ }
+ }
+}
+```
+
+Note the implicit inclusion of the resource ID that the calculated policy takes
+care of for you.
+
+Nunjucks: The
+[Nunjucks docs](https://mozilla.github.io/nunjucks/templating.html) describe the
+full capabilities of what it can do. Developers familiar with string
+manipulation, `if-else`, `for` and `range` should be able to orient quickly. A
+deep discussion of how to script with Nunjucks is outside the scope of this
+guide.
+
+Familiarity with the CMDB data for the target resource, GraphQL and Nunjucks is
+essential to quickly making progress on calculated policies. Be aware that
+sometimes a deep understanding of how the cloud provider represents a resource
+is required. Data that appears in intuitive places in the provider's UI may not
+be intuitively placed in the underlying data structure.
+
+## Compound Calculated Policies
+
+Calculated compound policies: Any policy in Guardrails can be made into a calculated
+policy. A common compound policy configuration is to have the `Active` policy
+statically set to `Check` or `Enforce` then have the `Active > Age` policy be
+calculated. However, this can sometimes result in the `Active` control going
+into an `invalid` state, as they require at least one of the sub policies not be
+in `Skip`. To solve this problem, a calc policy can be placed on the `Active`
+policy with similar logic to the `Active > Age` policy. This way, evaluation of
+the `Active` control as a whole will go to `Skipped` and avoid the `invalid`
+state.
+
+## Multi-query Calculated Policies
+
+The below Terraform excerpt shows the YAML array of GraphQL+Nunjucks templates.
+
+```yaml
+- |
+ {
+ account {
+ turbot {
+ id
+ }
+ }
+ }
+- |
+ {
+ account {
+ turbot {
+ id
+ }
+ }
+ trails: resources(filter: "resourceId:{{ $.account.turbot.id }} resourceTypeId:'tmod:@turbot/aws-cloudtrail#/resource/types/trail' $.Status.IsLogging:true $.IsMultiRegionTrail:true limit:300") {
+ items {
+ trailName: get(path: "Name")
+ cloudWatchLogsLogGroupArn: get(path: "CloudWatchLogsLogGroupArn")
+ eventSelectors: get(path: "EventSelectors")
+ }
+ }
+ }
+```
+
+Notes:
+
+- The YAML `- |` symbols are essential as this indicates that this is an array
+ of queries and the strings in each array element are multi-line. These `- |`
+ array indicators should be on their own lines. YAML is also particular about
+ indentation.
+- Only the results of the final query are sent to the control. Any intermediate
+ results must also be included in the final query. The example shows how this
+ is done.
+- GraphQL permits multiple `resources()` queries when they have labels. The
+ `trails:` label shows how this is done.
+- A full example can be found in the
+ [Guardrails Samples Repo](https://github.com/turbot/guardrails-samples/blob/main/policy_packs/aws/ec2/enforce_encryption_at_rest_is_enabled_for_ebs_volumes/README.md).
+
+## Additional Information
+
+- [Calculated Policy 7 minute lab](7-minute-labs/calc-policy)
+- [Guardrails Samples Repo with Policy Packs](https://github.com/turbot/guardrails-samples/tree/main/policy_packs)
+- [Policies concepts page](concepts/policies)
+- [AWS resource tagging example with calculated policies and Terraform](https://github.com/turbot/guardrails-samples/tree/main/policy_packs/aws/ec2/enforce_instances_use_amis_with_approved_tags)
+- [Calculated Policy FAQ](/guardrails/docs/concepts/policies/calculated-faq)
diff --git a/docs/using/policies/types-categories.md.og b/docs/using/policies/types-categories.md.og
new file mode 100644
index 00000000..8c664207
--- /dev/null
+++ b/docs/using/policies/types-categories.md.og
@@ -0,0 +1,50 @@
+---
+title: Policy Types & Categories
+sidebar_label: Types & Categories
+---
+
+# Policy Types & Categories
+
+### Policy Types
+
+A **Policy Type** defines a specific policy that may be configured for
+resources. For example, `AWS > S3 > Bucket > Approved`.
+
+Each policy type targets a set of
+[Resource Types](concepts/resources/types-categories#resource-types).
+
+ The policy type AWS > S3 > Bucket > Approved
targets a resource type of AWS > S3 > Bucket
, thus every instance of AWS > S3 > Bucket
will have an AWS > S3 > Bucket > Approved
policy. Each of these instances may have its own policy setting, and will have its own policy value.
+
+
+Valid values for a policy type are defined through it's JSON schema.
+
+ The policy type AWS > S3 > Bucket > Approved
has
+a specific enumerated list of valid values: `Skip`, `Check: Approved`, `Enforce: Delete unapproved if new & empty`.
+
+
+Policy types are defined in a type hierarchy.
+
+ The Approved
policy type is actually a child of
+the AWS > S3 > Bucket
resource type and has child policies such as Regions
with a full path of AWS > S3 > Bucket >
+Approved > Regions
.
+
+
+Policy types are defined in [Mods](https://hub.guardrails.turbot.com/#mods).
+
+### Policy Categories
+
+Guardrails may include hundreds or thousands of policy types covering similar
+concepts (e.g. Approved, Data Protection) across various services (e.g. AWS,
+Azure). The policy type hierarchy provides grouping of policies, but in a
+structured service oriented manner. **Policy Categories** provide an alternate,
+vendor agnostic, categorization of policy types.
+
+ The policy category Turbot > Approved
includes many Approved
style policies including AWS > S3 > Bucket > Approved
.
+
+
+Policy categories are typically used for reporting, providing useful aggregation
+and filtering of data.
+
+### Example - Policy Types and Categories
+
+
diff --git a/docs/concepts/policies/values-settings.md b/docs/using/policies/values-settings.md
similarity index 100%
rename from docs/concepts/policies/values-settings.md
rename to docs/using/policies/values-settings.md
diff --git a/docs/using/resources/activities/index.md b/docs/using/resources/activities/index.md
new file mode 100644
index 00000000..eee7b6a5
--- /dev/null
+++ b/docs/using/resources/activities/index.md
@@ -0,0 +1,64 @@
+---
+title: Resource Activity
+sidebar_label: Activity
+---
+
+# Resource Activity
+
+Cloud infrastructure constantly changes to meet the demands of modern
+applications. One of the fundamental assumptions of Guardrails is that the
+management and governance of these applications must also be dynamic - Guardrails
+responds in real time to changes in your environment to assure that your
+applications continue to operate securely and reliably. The Activity page
+provides visibility into the changes that are occurring in your environment.
+
+Activities represent significant events in the lifecycle of your
+infrastructure, including:
+
+- History of change for a resource (e.g. my-bucket).
+- A log of state changes and actions performed by a control (e.g. my-bucket
+ Tags).
+- Changes to policy settings, and the specific policy values they update.
+- Records of permission grants, activations, deactivations and revocations.
+
+ Guardrails creates a Bucket created
activity when it detects that a new S3 Bucket has been created.
+This activity includes the bucket name, the creation time, and the person who created it, as well as detailed log information.
+
+
+Guardrails maintains a history of all activities that you can search and filter,
+providing an audit trail of everything that occurs in your environment. Guardrails
+activities contain detailed information about who made the change, the
+state/value before and after, the timestamp, and other important information.
+You can use the activity pane to determine who made a change, the difference
+between the before and after values, and the subsequent related events. In
+addition, you can view patterns in activity to help determine impacts, systemic
+problems, and other trends.
+
+## Activity
+
+Activity logs are displayed throughout the Guardrails user interface. These are
+available and browsable on demand, including historical information.
+
+Activities may be filtered and queried using the
+[Guardrails filter language](reference/filter)
+
+## Activity Types
+
+| Item | Action | Activity Type | Description |
+| ---------------- | ------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Action | Notify | `action_notify` | When a Guardrails action invokes a `notify` command during a run. |
+| Control | Notify | `control_notify` | When a Guardrails control invokes a `notify` command during a run. |
+| Control | Updated | `control_updated` | When a Guardrails control is updated. Notifications will be sent if and only if a control changes state, i.e. `ok` -> `alarm`, `invalid` -> `ok`, etc. If the control updates but the state does NOT change, no notification will be generated. |
+| Favorite | Created | `favorite_created` | When a favorite is created for a resource. |
+| Favorite | Deleted | `favorite_deleted` | When a favorite is deleted for a resource. |
+| Grant Activation | Created | `active_grants_created` | When a Guardrails grant is activated. |
+| Grant Activation | Deleted | `active_grants_deleted` | When a Guardrails grant is deleted. |
+| Grant | Created | `grant_created` | When a Guardrails grant is created. By default in the UI "Activate for immediate use" is checked. In that case, a `grant_created` notification is generated followed by `active_grants_created`. |
+| Grant | Deleted | `grant_deleted` | When a Guardrails grant is deleted. |
+| Policy Setting | Created | `policy_setting_created` | When a new Guardrails policy setting is created. |
+| Policy Setting | Deleted | `policy_setting_deleted` | When an existing Guardrails policy setting is deleted. |
+| Policy Setting | Updated | `policy_setting_updated` | When an existing Guardrails policy setting is updated. |
+| Policy Value | Updated | `policy_value_updated` | When a Guardrails policy value is updated. |
+| Resource | Created | `resource_created` | When a new resource is created in Guardrails. |
+| Resource | Deleted | `resource_deleted` | When a resource in Guardrails is deleted. |
+| Resource | Updated | `resource_updated` | When a resource in Guardrails is updated. |
diff --git a/docs/concepts/resources/discovery.md b/docs/using/resources/discovery.md.OG
similarity index 100%
rename from docs/concepts/resources/discovery.md
rename to docs/using/resources/discovery.md.OG
diff --git a/docs/using/resources/files/file-amis.png b/docs/using/resources/files/file-amis.png
new file mode 100644
index 00000000..58e52934
Binary files /dev/null and b/docs/using/resources/files/file-amis.png differ
diff --git a/docs/using/resources/files/index.md b/docs/using/resources/files/index.md
new file mode 100644
index 00000000..07558378
--- /dev/null
+++ b/docs/using/resources/files/index.md
@@ -0,0 +1,247 @@
+---
+title: Files
+sidebar_label: Files
+---
+
+# Guardrails File
+
+Organizations often want to add custom data or metadata to the Configuration
+Management Database (CMDB) for use in Guardrails policies, as well as referencing
+arbitrary metadata across a wide range of resource types. To facilitate this,
+Guardrails introduced a resource type called a **Guardrails File**.
+
+## File Properties
+
+A Guardrails File can be used to reference data across a Guardrails environment.
+
+- A File resource can contain any arbitrary data. Customers will often utilize
+ JSON schema for easy reference.
+- A File resource can be a child of the root Turbot resource or a
+ [Guardrails Folder](working-with-folders).
+- The AKA of a File resource is user definable.
+- A File has a title and a description, both of which will be stored in the
+ Guardrails File resource metadata.
+- Users can update the Guardrails File using standard [GraphQL](reference/graphql)
+ or the [Guardrails Terraform Provider](reference/terraform). This can be
+ configured a variety of ways depending on the organizations requirements.
+ - Use a trigger to update the Guardrails File whenever asset data in an inventory
+ management tool changes.
+ - Write a shell script to pull data from a third party API and update the File
+ with the Guardrails CLI.
+ - Manually update the File via Terraform.
+ - Write a Lambda to update the File via the GraphQL API using DynamoDB
+ streams.
+
+Guardrails Files are extremely valuable tools in a Guardrails admin's toolkit, and can
+aid in the deployment and management of a large number of resources.
+
+## Example Files
+
+A typical Guardrails File stores data that can be referenced across a Guardrails
+environment, and as briefly mentioned above, can also be retrieved using the
+Guardrails API.
+
+Currently, Guardrails Files can be created either via a GraphQL mutation, Terraform,
+or the Console.
+
+### GraphQL
+
+The following mutation can be used to create a Guardrails File via
+[GraphQL](reference/graphql).
+
+Mutation:
+
+```graphql
+mutation CreateResource($input: CreateResourceInput!) {
+ createResource(input: $input) {
+ data
+ metadata
+ trunk {
+ title
+ }
+ turbot {
+ akas
+ id
+ tags
+ }
+ }
+}
+```
+
+Variables:
+
+```JSON
+{
+ "input": {
+ "parent": "tmod:@turbot/turbot#/",
+ "akas": [
+ "guardrailsFile"
+ ],
+ "data": {
+ "group": {
+ "prod": "PROD",
+ "dev": "DEV"
+ }
+ },
+ "metadata": {
+ "title": "Guardrails File",
+ "description": "Example Guardrails File"
+ },
+ "type": "tmod:@turbot/turbot#/resource/types/file"
+ }
+}
+```
+
+This will create a Guardrails file called `Guardrails File`, with the aka `guardrailsFile`,
+attached to the root Turbot resource.
+
+### Terraform
+
+Administrators can use [Terraform](reference/terraform) to easily deploy and
+manage Guardrails Files.
+
+```hcl
+resource "turbot_resource" "example_turbot_file" {
+ parent = "tmod:@turbot/turbot#/"
+ type = "tmod:@turbot/turbot#/resource/types/file"
+ akas = ["guardrailsFile"]
+ data = < VPC > Security Group >
+Ingress Rules > Approved**. We want to allow specific cidr ranges if specific
+tags match:
+
+```hcl
+resource "turbot_policy_setting" "security_group_ingress_rules_approved_rules" {
+ resource = turbot_policy_pack.test_smart_folder.id
+ type = "tmod:@turbot/aws-vpc-security#/policy/types/securityGroupIngressRulesApprovedRules"
+template_input = <
+
+
## Discoverable Resources
The vast majority of resources in Guardrails are created to represent resources in
diff --git a/docs/using/resources/index.md b/docs/using/resources/index.md
new file mode 100644
index 00000000..fa1c2c43
--- /dev/null
+++ b/docs/using/resources/index.md
@@ -0,0 +1,60 @@
+---
+title: Resources
+sidebar_label: Resources
+---
+
+# Resources
+
+**Resources** represent objects that are managed by Guardrails. Typically, these are
+mapped to resources in the cloud service, such as an AWS S3 bucket, a GCP
+compute instance, or an Azure SQL database. Information about Guardrails resources
+is stored in the CMDB.
+
+Once you [connect an integration](/guardrails/docs/guides), Guardrails will begin [discovering resources](#discovery-and-cmdb) and adding them to the CMDB.
+
+
+
+## Discovery and CMDB
+
+Discovery & CMDB controls are used in combination to find new resources and track changes to them over time.
+
+Discovery is Guardrails' method for automatically searching virtual infrastructure,
+systems or applications to build a structured, searchable data representation.
+For example, resources in an AWS Account are discovered and stored in Guardrails.
+
+Each resource type registers a `Discovery` control on it's parent type. The
+`Discovery` control is designed to find all instances of the resource types from
+the parent and upsert them into the Guardrails CMDB.
+
+The Resource type AWS > SQS > Queue
defines a
+control AWS > SQS > Queue > Discovery
with a target resource type of AWS > Region
.
+
+
+In effect, the parent resource is responsible for creating its children.
+
+Discovered resources are always mapped to [Resource Types](#resource-types) and stored in the [Resource Hierarchy](#resource-hierarchy).
+
+
+Each resource type also registers a `CMDB` control on itself. The `CMDB` control
+queries the source for the latest and complete details about the resource.
+
+ The resource type AWS > SQS > Queue
defines a
+control AWS > SQS > Queue > CMDB
with a target resource type of AWS > SQS > Queue
.
+
+
+In effect, a resource is considered to be an adult child, looking after itself.
+
+### Real-time Updates
+
+While Discovery and CMDB controls can find existing resources and update their details, Guardrails is designed to react in real-time to resource changes. Depending on the [integration](), you may have a choice between event handlers or event pollers for updating resources.
+
+- **Event Handlers** use the eventing system for the cloud provider to **push** updates to Turbot Guardrails whenever a create, update or delete event occurs. Event handlers typically require a bit more setup, but also more timely updates than polling.
+- **Event Pollers** query the events from the cloud providers audit log to **pull** updates in to Turbot Guardrails. Polling occurs at regular intervals. It is generally less timely than event handlers, but usually requires little to no configuration
+
+
+ The sqs.amazonaws.com:CreateQueue
event is received by Guardrails and
+handled with an immediate CMDB upsert. This triggers the CMDB control for the new AWS > SQS > Queue
resource, which then fetches full details using the AWS APIs.
+
+
+ The sqs.amazonaws.com:DeleteQueue
event is received by Guardrails and handled with an immediate CMDB deletion. No further queries to the AWS APIs are required.
+
diff --git a/docs/concepts/resources/resource-hierarchy2.png b/docs/using/resources/resource-hierarchy2.png
similarity index 100%
rename from docs/concepts/resources/resource-hierarchy2.png
rename to docs/using/resources/resource-hierarchy2.png
diff --git a/docs/using/resources/resource_types_categories-ex.png b/docs/using/resources/resource_types_categories-ex.png
new file mode 100644
index 00000000..6b88144d
Binary files /dev/null and b/docs/using/resources/resource_types_categories-ex.png differ
diff --git a/docs/using/resources/resources-home.png b/docs/using/resources/resources-home.png
new file mode 100644
index 00000000..9388c6e6
Binary files /dev/null and b/docs/using/resources/resources-home.png differ
diff --git a/docs/using/resources/resources-lab/index.md b/docs/using/resources/resources-lab/index.md
new file mode 100644
index 00000000..24ea9e06
--- /dev/null
+++ b/docs/using/resources/resources-lab/index.md
@@ -0,0 +1,4 @@
+---
+title: Resources in 7 Minutes
+sidebar_label: Resources in 7 Minutes 🔬
+---
\ No newline at end of file
diff --git a/docs/concepts/resources/types-categories.md b/docs/using/resources/types-categories.md
similarity index 100%
rename from docs/concepts/resources/types-categories.md
rename to docs/using/resources/types-categories.md
diff --git a/docs/guides/configuring-guardrails/working-with-folders/confirm-delete-folder.png b/docs/using/resources/working-with-folders/confirm-delete-folder.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/confirm-delete-folder.png
rename to docs/using/resources/working-with-folders/confirm-delete-folder.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/confirm-to-delete.png b/docs/using/resources/working-with-folders/confirm-to-delete.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/confirm-to-delete.png
rename to docs/using/resources/working-with-folders/confirm-to-delete.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/create-folder-1.png b/docs/using/resources/working-with-folders/create-folder-1.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/create-folder-1.png
rename to docs/using/resources/working-with-folders/create-folder-1.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/create-folder-2.png b/docs/using/resources/working-with-folders/create-folder-2.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/create-folder-2.png
rename to docs/using/resources/working-with-folders/create-folder-2.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/create-resource-1.png b/docs/using/resources/working-with-folders/create-resource-1.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/create-resource-1.png
rename to docs/using/resources/working-with-folders/create-resource-1.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/create.md b/docs/using/resources/working-with-folders/create.md
similarity index 77%
rename from docs/guides/configuring-guardrails/working-with-folders/create.md
rename to docs/using/resources/working-with-folders/create.md
index be3ce569..63eea6e5 100644
--- a/docs/guides/configuring-guardrails/working-with-folders/create.md
+++ b/docs/using/resources/working-with-folders/create.md
@@ -1,6 +1,6 @@
---
title: Creating a Folder
-sidebar_label: Creating a Folder
+sidebar_label: Creating a Folder 🛠
---
# Creating a Folder
@@ -24,21 +24,21 @@ Log in to the Guardrails console using your local credentials or via SAML-based
On the **Home** page, select the **Resources** card, then navigate to the resource that will act as the `parent` of the new folder. In this example, a new folder is created at the **Turbot** level, but you can also create sub-folders under an existing folder.
-
+
On the far right, select **New**, then choose **Folder** from the **Resource Type** dropdown menu.
-
+
Enter a **Name** and **Description** for the folder. Click **Create**.
-
+
## Step 2: Review
- [ ] Validate that the folder has been created by navigating to the resource path and selecting the **Resources** tab.
-
+
That's it! The folder is created immediately and will be visible in the UI.
diff --git a/docs/guides/configuring-guardrails/working-with-folders/delete.md b/docs/using/resources/working-with-folders/delete.md
similarity index 76%
rename from docs/guides/configuring-guardrails/working-with-folders/delete.md
rename to docs/using/resources/working-with-folders/delete.md
index 73b8b6a9..3521ffb5 100644
--- a/docs/guides/configuring-guardrails/working-with-folders/delete.md
+++ b/docs/using/resources/working-with-folders/delete.md
@@ -1,6 +1,6 @@
---
title: Deleting a Folder
-sidebar_label: Deleting a Folder
+sidebar_label: Deleting a Folder 🛠
---
# Deleting a Folder
@@ -23,23 +23,23 @@ Log in to the Guardrails console using your local credentials or via SAML-based
Navigate to the **Resources** tab, locate the **folders** section, and select the folder you wish to rename.
-
+
## Step 2: Delete the Folder
Select the folder you want to delete. Select **Actions**, then choose **Remove from Turbot**.
-
+
A confirmation dialog will appear. *Read the prompt carefully*. Type the folder's **full name** to confirm the deletion, then click **Delete**.
-
+
## Step 3: Review
- [ ] Validate that the folder has been successfully deleted by navigating to the resource path and confirming that it no longer appears in the **Resources** section.
-
+
That's it! The folder is deleted immediately and will no longer be viewable in the UI.
diff --git a/docs/guides/configuring-guardrails/working-with-folders/find-folder-from-resources.png b/docs/using/resources/working-with-folders/find-folder-from-resources.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/find-folder-from-resources.png
rename to docs/using/resources/working-with-folders/find-folder-from-resources.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/folder-name-edit-1.png b/docs/using/resources/working-with-folders/folder-name-edit-1.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/folder-name-edit-1.png
rename to docs/using/resources/working-with-folders/folder-name-edit-1.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/folder-name-edit-2.png b/docs/using/resources/working-with-folders/folder-name-edit-2.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/folder-name-edit-2.png
rename to docs/using/resources/working-with-folders/folder-name-edit-2.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/folder-name-update.png b/docs/using/resources/working-with-folders/folder-name-update.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/folder-name-update.png
rename to docs/using/resources/working-with-folders/folder-name-update.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/index.md b/docs/using/resources/working-with-folders/index.md
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/index.md
rename to docs/using/resources/working-with-folders/index.md
diff --git a/docs/guides/configuring-guardrails/working-with-folders/remove-from-turbot.png b/docs/using/resources/working-with-folders/remove-from-turbot.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/remove-from-turbot.png
rename to docs/using/resources/working-with-folders/remove-from-turbot.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/rename.md b/docs/using/resources/working-with-folders/rename.md
similarity index 75%
rename from docs/guides/configuring-guardrails/working-with-folders/rename.md
rename to docs/using/resources/working-with-folders/rename.md
index 7bd0f1f0..3fb4f492 100644
--- a/docs/guides/configuring-guardrails/working-with-folders/rename.md
+++ b/docs/using/resources/working-with-folders/rename.md
@@ -1,6 +1,6 @@
---
title: Renaming a Folder
-sidebar_label: Renaming a Folder
+sidebar_label: Renaming a Folder 🛠
---
# Renaming a Folder
@@ -24,23 +24,23 @@ Log in to the Guardrails console using your local credentials or via SAML-based
Navigate to the **Resources** tab, locate the **folders** section, and select the folder you wish to rename.
-
+
## Step 2: Rename the Folder
Click **Edit**.
-
+
Enter the new folder name as required and select **Update**.
-
+
## Step 3: Review
- [ ] Validate that the folder name has been updated by navigating to the **Resources** tab and confirming the new name appears correctly in the folder section.
-
+
That's it! The folder name is updated immediately.
diff --git a/docs/guides/configuring-guardrails/working-with-folders/review-folder-delete.png b/docs/using/resources/working-with-folders/review-folder-delete.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/review-folder-delete.png
rename to docs/using/resources/working-with-folders/review-folder-delete.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/review-folder-name-edit.png b/docs/using/resources/working-with-folders/review-folder-name-edit.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/review-folder-name-edit.png
rename to docs/using/resources/working-with-folders/review-folder-name-edit.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/review-folder.png b/docs/using/resources/working-with-folders/review-folder.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/review-folder.png
rename to docs/using/resources/working-with-folders/review-folder.png
diff --git a/docs/guides/configuring-guardrails/working-with-folders/update-folder.png b/docs/using/resources/working-with-folders/update-folder.png
similarity index 100%
rename from docs/guides/configuring-guardrails/working-with-folders/update-folder.png
rename to docs/using/resources/working-with-folders/update-folder.png
diff --git a/docs/using/standard/access-logging.md b/docs/using/standard/access-logging.md
new file mode 100644
index 00000000..6949e80e
--- /dev/null
+++ b/docs/using/standard/access-logging.md
@@ -0,0 +1,137 @@
+---
+title: Access Logging Guardrails
+sidebar_label: Access Logging
+---
+
+# Access Logging Guardrails
+
+## Overview
+
+Access logging guardrails allow administrators to enable and store access
+logging information for cloud resources. Access logs are great to help
+understand the nature of requests to a particular resource, though it must be
+noted that they are
+[often not guaranteed delivery](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html).
+From a best practices security standpoint, it is almost always recommended to
+have access logging configured if there is an option to do so.
+
+Guardrails Access Logging policies can be found directly under the service in the
+hierarchy:
+
+- `{Provider} > {service} > {resource} > Access Logging`
+
+
+
+ AWS > S3 > Bucket > Access Logging
+ AWS > EC2 > Application Load Balancer > Access Logging
+ AWS > EC2 > Classic Load Balancer > Access Logging
+ AWS > EC2 > Network Load Balancer > Access Logging
+
+
+
+Below is the list of allowed values for a generic Access Logging policy. This is
+not comprehensive as different resource types might have slightly different
+verbage:
+
+```
+ Skip
+ Check: Disabled
+ Check: Enabled
+ Check: Enabled to Access Logging > Bucket
+ Enforce: Disabled
+ Enforce: Enabled to Access Logging > Bucket
+```
+
+The Access Logging guardrail has a number of policy sub-settings to determine
+what Guardrails is checking for. The format of these policy types is
+`{Provider} > {service} > {resource} > Access Logging > {Items}`. For example:
+
+```
+ {Provider} > {service} > {resource} > Access Logging > Bucket
+ {Provider} > {service} > {resource} > Access Logging > Key Prefix
+```
+
+### Policy Types Description
+
+| Policy | Description |
+| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
+| `{Provider} > {service} > {resource} > Audit Logging` | Allows you to check or enforce access logging requirement for the resource. |
+| `{Provider} > {service} > {resource} > Audit Logging > Bucket` | The name of a S3 bucket to which the resource access logs is stored. |
+| `{Provider} > {service} > {resource} > Audit Logging > Key Prefix` | Define a folder (optional) inside S3 bucket to which the resource access logs is stored. |
+
+**Notes**:
+
+- The `AWS > S3 > Bucket > Access Logging` control will skip any buckets that
+ are created as part of the `AWS > Turbot > Logging > Bucket` stack.
+- For S3 access logs, the target bucket must be in the same region as the source
+ bucket.
+- Server access logs are delivered to the target bucket by a delivery account
+ called the
+ [Log Delivery group](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html).
+ The S3 log delivery group must have access to `write objects` and
+ `read bucket ACL`.
+- Similarly for EC2 load balancers, the bucket must have proper access granted.
+ AWS provides documentation for
+ [Application Load Balancers (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html),
+ [Network Load Balancers (NLB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html),
+ and
+ [Classic Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/access-log-collection.html)
+ for prerequisite steps prior to enabling Access Logging.
+- For more details refer
+ [Enabling Amazon S3 server access logging](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html).
+- [Access log requests are delivered on a best-effort basis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html).
+ AWS recommends that you use access logs to understand the nature of the
+ requests, not as a complete accounting of all requests. It is good to keep
+ this in mind when dealing with access logging in other cloud providers, too.
+
+## Access Logging for Guardrails Managed Buckets
+
+Guardrails provides policies to allow the automatic creation of logging buckets for
+use in services that require them. Guardrails logging bucket creation is managed by
+a stack, `AWS > Turbot > Logging > Bucket`, and is targeted at AWS regions. For
+more information, refer
+[Stacks and Configured guardrail](concepts/guardrails/configured).
+
+The Guardrails Access Logging guardrail has a number of policy sub-settings to
+determine the attributes of the access logging check. The format of these policy
+types is `{Provider} > Turbot > Logging > Bucket > Access Logging > {Items}`:
+
+```
+ {Provider} > Turbot > Logging > Bucket > Access Logging
+ {Provider} > Turbot > Logging > Bucket > Access Logging > Bucket
+ {Provider} > Turbot > Logging > Bucket > Access Logging > Key Prefix
+```
+
+Example family of policies:
+
+
+
+ AWS > Turbot > Logging > Bucket > Access Logging
+ AWS > Turbot > Logging > Bucket > Access Logging > Bucket
+ AWS > Turbot > Logging > Bucket > Access Logging > Key Prefix
+
+
+
+Example policy values:
+
+
+
+ # AWS > Turbot > Logging > Bucket > Access Logging
+ - Disabled
+ - Enabled
+
+
+
+| Policy | Description |
+| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `{Provider} > Turbot > Logging > Bucket > Access Logging` | Allows you to enable or disable access logging requirement for the services. |
+| `{Provider} > Turbot > Logging > Bucket > Access Logging > Bucket` | The name of a S3 bucket to which the services access logs is stored. |
+| `{Provider} > Turbot > Logging > Bucket > Access Logging > Key Prefix` | Define a folder(Optional) inside S3 bucket to which the services access logs is stored. |
+
+**Note**:
+
+- Server access logs are delivered to the target bucket by a delivery account
+ called the
+ [Log Delivery group](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html).
+ The S3 log delivery group must have access to `write objects` and
+ `read bucket ACL`.
diff --git a/docs/using/standard/active.md b/docs/using/standard/active.md
new file mode 100644
index 00000000..df1c1138
--- /dev/null
+++ b/docs/using/standard/active.md
@@ -0,0 +1,169 @@
+---
+title: Active Guardrails
+sidebar_label: Active
+---
+
+# Active Guardrails
+
+## Overview
+
+The Active guardrail flags whether the resource is in active use, and if not,
+has the ability to delete/cleanup the resource. When running an automated
+compliance environment, it's common to end up with a wide range of alarms that
+are difficult and time consuming to clear. The Active guardrail brings
+automated, well-defined control to this process.
+
+The Active guardrail is completely independent of the Approved guardrail. For
+example, an Approved resource may actually be Inactive - e.g. an S3 bucket
+created 2 years ago with no items and no usage. Similarly, an Unapproved
+resource may be Active - e.g. an S3 bucket in an unapproved region that is still
+receiving active traffic.
+
+In general, Approved is considered more at the point of resource creation while
+Active is considered more as the resource reaches the end of it's useful life.
+
+The Active guardrail checks the status of the defined Active policies for the
+resource, raises an alarm, and takes the defined enforcement action. Each Active
+sub-policy can calculate a status of active, inactive or skipped. Generally, if
+the resource appears to be Active for any reason it will be considered Active.
+Note the contrast with Approved, where if the resource appears to be Unapproved
+for any reason it will be considered Unapproved.
+
+The core Active policy has a consistent form: `{service} > {resource} > Active`
+
+
+
+ AWS > S3 > Bucket > Active
+ AWS > SNS > Topic > Active
+ AWS > EC2 > Instance > Active
+
+
+
+The values for this policy reflect how it should be checked and the action to
+take if the resource is not active. The basic form is:
+
+```
+ Skip
+ Check: Active
+ Enforce: {action} inactive with {period} warning
+```
+
+
+
{` # AWS > S3 > Bucket Active
+ - Skip
+ - Check: Active
+ - Enforce: Delete with 1 day warning
+ - Enforce: Delete with 3 days warning
+ - Enforce: Delete with 7 days warning
+ - Enforce: Delete with 14 days warning
+ - Enforce: Delete with 30 days warning
+ - Enforce: Delete with 60 days warning
+ - Enforce: Delete with 90 days warning
+ - Enforce: Delete with 180 days warning
+ - Enforce: Delete with 365 days warning`}
+
+
+The alarm lifecycle is as follows:
+
+- If Active, the status is OK.
+- If Inactive, the status is ALARM and the warning period starts.
+- If Inactive and the warning period has expired, the enforcement action is
+ taken.
+- The enforcement action is typically a delete, which will then automatically
+ cleanup the alarm. If it fails, the alarm will remain in ALARM or ERROR state.
+
+The Active guardrail and policy have a number of sub-settings to determine the
+attributes of the Active check. The format of these policy types is
+`{service} > {resource} > Active > {Items}`:
+
+```
+ {service} > {resource} > Active > Status
+ {service} > {resource} > Active > Last Modified
+ {service} > {resource} > Active > Recently Used
+ {service} > {resource} > Active > Age
+```
+
+Each of these policies defines rules or settings to determine if that specific
+area or attribute of the resource is Active. Per above, if **any** Active
+sub-check returns active then the overall resource is active.
+
+
+
+ AWS > IAM > Access Key > Active > Age
+ AWS > IAM > Access Key > Active > Status
+ AWS > IAM > Access Key > Active > Last Modified
+ AWS > IAM > Access Key > Active > Recently Used
+
+
+
+## Guardrails Resource Active Evaluation
+
+For an Active control, the status is based on the evaluation of the child policy
+conditions. This happens in the following order:
+
+1. If any of the **Active > \*** policies evaluate to `Force Active`, the
+ resource is `Active`.
+2. If any of the **Active > \*** policies evaluate to `Force Inactive`, the
+ resource is `Inactive`.
+3. If any of the **Active > \*** policies evaluate to `Active`, the resource is
+ `Active`.
+4. If any of the **Active > \*** policies evaluate to `Inactive`, the resource
+ is `Inactive`.
+5. If all **Active > \*** policies evaluates to `Skip`, the control will be in
+ `Skipped`.
+
+For example, if one policy evaluates to `Inactive`, but another evaluates to
+`Force Active`, the resulting control will deem the resource `Active`.
+
+Active controls are designed to be slow to decide, but forceful in action. This
+is in contrast to the `Approved` family of policies, guardrails, and controls,
+which are designed to be fast to decide, but weak in action.
+
+### Example: AWS > EC2 > Instance > Active
+
+First, assume that the instance is 60 days old, but it was last modified only 15
+days ago (i.e. tags on the instance were changed). The following policies have
+been configured in Guardrails:
+
+- **AWS > EC2 > Instance > Active > Age** is set to
+ `Force inactive if age > 60 days`.
+- **AWS > EC2 > Instance > Active > Last Modified** is set to
+ `Active if last modified <= 30 days`.
+- **AWS > EC2 > Instance > Active > Budget** is set to
+ `Force inactive if Budget > State is Over or higher`.
+- **AWS > Account > Budget > State** is set to `Under`.
+- **AWS > EC2 > Instance > Active** is set to `Check: Active`.
+
+In order, these policies will evaluate to `Active` (age is equal to 60 days),
+`Active` (modified within the last 30 days) and `Active` (As Account spending is
+below the budget and the current state is under). Using the rules above, the
+final result is that the instance is `Active`. The last policy in the list tells
+the `AWS > EC2 > Instance > Active` control how to evaluate the result. In this
+case, the control is simply checking the instance for being active or not. The
+policy evaluation of `Active` results in the control being in the **OK** state.
+
+### Example: AWS > EC2 > Volume > Active
+
+First, assume that the volume is 170 days old, but it was last modified 58 days
+ago (i.e. tags on the volume were changed). The volume is available and not
+attached to any instance. The following policies have been configured in Guardrails:
+
+- **AWS > EC2 > Volume > Active > Age** is set to
+ `Force inactive if age > 180 days`.
+- **AWS > EC2 > Volume > Active > Last Modified** is set to
+ `Active if last modified <= 60 days`.
+- **AWS > EC2 > Volume > Active > Attached** is set to
+ `Force inactive if unattached`.
+- **AWS > EC2 > Volume > Active > Budget** is set to `Skip`.
+- **AWS > EC2 > Volume > Active** is set to
+ `Enforce: Detach, snapshot and delete inactive with 7 days warning`.
+
+In order, these policies will evaluate to `Active` (age is less than 180 days) ,
+`Active` (modified within the last 60 days) and `Force inactive` as the volume
+is not attached. Using the rules above, the final result is that the volume is
+`Force inactive`. The last policy in the list tells the
+`AWS > EC2 > Volume > Active` control how to evaluate the result. The policy
+evaluation of `Force inactive` results in the control being in the **ALARM**
+state. In this case, the control is going to take action and will schedule
+volume deletion in 7 days from the date of alarm. A snapshot will get created
+prior to deleting the volume.
diff --git a/docs/using/standard/approved.md b/docs/using/standard/approved.md
new file mode 100644
index 00000000..95a1a6b4
--- /dev/null
+++ b/docs/using/standard/approved.md
@@ -0,0 +1,224 @@
+---
+title: Approved Guardrails
+sidebar_label: Approved
+---
+
+# Approved Guardrails
+
+## Overview
+
+The Approved guardrail is used to verify whether a particular resource is
+allowed to exist, and to take an appropriate action if required (shutdown,
+delete, etc).
+
+The Approved guardrail is completely independent of the Active guardrail. For
+example, an Approved resource may actually be Inactive - e.g. an S3 bucket
+created 2 years ago with no items and no usage. Similarly, an Unapproved
+resource may be Active - e.g. an S3 bucket in an unapproved region that is still
+receiving active traffic.
+
+In general, Approved is considered more at the point of resource creation, while
+Active is considered more as the resource reaches the end of its useful life.
+
+The Approved guardrail checks the status of the defined Approved sub-policies
+for the resource. If the resource is not approved according to _any_ of these
+policies, this control raises an alarm and takes the defined enforcement action.
+
+For any enforcement actions that specify `if new`, e.g.,
+`Enforce: Delete unapproved if new`, this control will only run the enforcement
+actions for resources created within the last 60 minutes.
+
+The core Approved policy has a consistent form:
+`{service} > {resource} > Approved`
+
+
+
+ AWS > S3 > Bucket > Approved
+ AWS > SNS > Topic > Approved
+ AWS > EC2 > Instance > Approved
+
+
+
+The Approved guardrail and policy have a number of sub-settings to determine the
+attributes of the Approved check. The format of these policy types is
+`{service} > {resource} > Approved > {Items}`:
+
+```
+ {service} > {resource} > Approved > Regions
+ {service} > {resource} > Approved > Usage
+
+```
+
+Each of these policies defines rules or settings to determine if that specific
+area or attribute of the resource is Approved. Per above, **all** approval tests
+must pass - if any Approved sub-check returns `unapproved` then the overall
+resource is unapproved.
+
+### Example Guardrail: AWS > EC2 > Instance > Approved
+
+The `AWS > EC2 > Instance > Approved` policy determine the action to take if an
+instance is not approved. You can set the policy to skip (don't run at all), to
+check whether unapproved instances exist and raise an alarm, or to enforce that
+unapproved instances are stopped and/or terminated.
+
+The Approved sub-policies allow you to set the rules for which instance types,
+regions, encryption settings, AMI IDs, Publishers of AMIs etc are approved:
+
+
+
+ AWS > EC2 > Instance > Approved > Instance Types
+ AWS > EC2 > Instance > Approved > Public IP
+ AWS > EC2 > Instance > Approved > Regions
+ AWS > EC2 > Instance > Approved > Usage
+ AWS > EC2 > Instance > Approved > Image > AMI IDs
+ AWS > EC2 > Instance > Approved > Image > Publishers
+
+
+
+### Example Guardrail: AWS > VPC > Security Group > Egress Rules > Approved
+
+Organizations need to keep a close eye on egress security group rules, but at
+scale it can become difficult to track, check, and remediate security groups.
+Using Guardrails' egress approved policies, we can define allowed ports, CIDR
+blocks, minimum bitmask, and more. Guardrails will check or remediate when
+violations are detected.
+
+
+
+ AWS > VPC > Security Group > Egress Rules > Approved
+ AWS > VPC > Security Group > Egress Rules > Approved > Rules
+ AWS > VPC > Security Group > Egress Rules > Approved > Minimum Bitmask
+ AWS > VPC > Security Group > Egress Rules > Approved > Prohibited Ports
+ AWS > VPC > Security Group > Egress Rules > Approved > CIDR Ranges
+ AWS > VPC > Security Group > Egress Rules > Approved > Maximum Port Range
+ AWS > VPC > Security Group > Egress Rules > Approved > Compiled Rules
+
+
+
+The base policy, `AWS > VPC > Security Group > Egress Rules > Approved`, is
+usually the last one to be set, but is also the most important. This tells
+Turbot Guardrails HOW to act - the rest of the policies tell Turbot Guardrails what is valid and what
+is not within security group egress rules.
+
+Let's assume that we want to reject any egress rule pointing to 0.0.0.0/0 and
+approve anything else. Additionally, we want to set a minimum bitmask of 4 and
+maximum port range as 10.
+
+First, set the approved sub policies. Doing this allows us to enable all of the
+sub policies at once. If we had enabled the approved policy first, each
+subsequent setting triggers control runs. This can get noisy, messy, and could
+generate false positives (or negatives).
+
+- `AWS > VPC > Security Group > Egress Rules > Approved > Minimum Bitmask` set
+ to `4`.
+- `AWS > VPC > Security Group > Egress Rules > Approved > Maximum Port Range`
+ set to `10`.
+
+For the `AWS > VPC > Security Group > Egress Rules > Approved > Rules` policy,
+we will define the following block:
+
+```ocl
+# Reject any rule from 0.0.0.0/0
+REJECT $.turbot.cidr:0.0.0.0/0
+
+# Approve everything else.
+APPROVE *
+```
+
+Once these are created, we are ready to enable Guardrails' auto remediation of
+security group egress rules! Simply set the policy
+`AWS > VPC > Security Group > Egress Rules > Approved` to
+`Enforce: Delete unapproved`.
+
+Immediately following the creation of the `Approved` policy, Guardrails will begin
+running controls against all security groups that have the setting applied!
+Guardrails will continue to monitor new and existing security groups and take
+remediation action if necessary!
+
+### Custom Checks
+
+You can create your own custom checks against resource attributes in the
+Approved control using the `Approved > Custom` policy. These custom checks would
+be a part of the evaluation of the Approved control. Custom messages can also be
+added which are then displayed in the control details table.
+
+For instance, let's assume we want to have the `AWS > KMS > Key > Approved`
+control to alarm if automatic key rotation is not enabled for the key by
+checking the `KeyRotationStatus` attribute.
+
+Using the calculated policy builder, set the
+`AWS > KMS > Key > Approved > Custom` policy to:
+
+Input query:
+
+```graphql
+{
+ resource {
+ KeyRotationStatus: get(path: "KeyRotationStatus")
+ }
+}
+```
+
+Template:
+
+```nunjucks
+{% if $.resource.KeyRotationStatus %}
+ "Approved"
+{% else %}
+ "Not approved"
+{% endif %}
+```
+
+To add a custom key and message, both of which will then show up in the details
+table, update the template to:
+
+```nunjucks
+{% if $.resource.KeyRotationStatus %}
+ result: Approved
+ message: Key rotation is enabled
+ title: Key Rotation Status
+{% else %}
+ result: Not approved
+ message: Key rotation is disabled
+ title: Key Rotation Status
+{% endif %}
+```
+
+The Custom policy can be used to check multiple attributes as well by setting
+the policy value to a list of objects. For instance, to check if the key is
+enabled and automatic key rotation is enabled, use the following input query and
+template:
+
+Input query:
+
+```graphql
+{
+ resource {
+ KeyRotationStatus: get(path: "KeyRotationStatus")
+ KeyState: get(path: "KeyState")
+ }
+}
+```
+
+Template:
+
+```nunjucks
+{% if $.resource.KeyRotationStatus %}
+ - result: Approved
+ message: Key rotation is enabled
+ title: Key Rotation Status
+{% else %}
+ - result: Not approved
+ message: Key rotation is disabled
+ title: Key Rotation Status
+{% endif %}
+{% if $.resource.KeyState === "Enabled" %}
+ - result: Approved
+ message: Key is enabled
+ title: Key State
+{% else %}
+ - result: Not approved
+ message: Key is disabled
+ title: Key State
+{% endif %}
+```
diff --git a/docs/using/standard/audit-logging.md b/docs/using/standard/audit-logging.md
new file mode 100644
index 00000000..fda5738a
--- /dev/null
+++ b/docs/using/standard/audit-logging.md
@@ -0,0 +1,103 @@
+---
+title: Audit Logging Guardrails
+sidebar_label: Audit Logging
+---
+
+# Audit Logging Guardrails
+
+## Overview
+
+Audit Logging guardrails allow administrators to enable logging on the cluster
+and databases. With Turbot Guardrails Audit Logging policies, administrators can define
+where to store the logs depending on the resource. The Audit Logging control can
+audit or enforce those policies, giving centralized control over data that is
+stored, such as data subject to compliance or regulatory requirements.
+
+The core Audit Logging policy has a consistent form:
+`{Provider} > {service} > {resource} > Audit Logging`
+
+
+
+ AWS > Redshift > Cluster > Audit Logging
+ Azure > PostgreSQL > Server > Audit Logging
+
+
+
+Below are the list of allowed values for the Audit Logging policy. Depending on
+the resource type it can be different. The basic form is:
+
+```
+ Skip
+ Check: Disabled
+ Check: Enabled
+ Check: Enabled to Audit Logging > Bucket
+ Enforce: Disabled
+ Enforce: Enabled to Audit Logging > Bucket
+ Check: Audit Logging > *
+ Enforce: Audit Logging > *
+```
+
+
+
+ # AWS > Redshift > Cluster > Audit Logging
+ - Skip
+ - Check: Disabled
+ - Check: Enabled
+ - Check: Enabled to Audit Logging > Bucket
+ - Enforce: Disabled
+ - Enforce: Enabled to Audit Logging > Bucket
+
+
+ # Azure > PostgreSQL > Server > Audit Logging
+ - Skip
+ - Check: Audit Logging > *
+ - Enforce: Audit Logging > *
+
+
+
+The Audit Logging guardrail for AWS resources has a number of policy
+sub-settings to determine the attributes of the audit logging check. The format
+of these policy types is
+`{Provider} > {service} > {resource} > Audit Logging > {Items}`:
+
+```
+ {Provider} > {service} > {resource} > Audit Logging > User Activity Logging
+ {Provider} > {service} > {resource} > Audit Logging > Bucket
+ {Provider} > {service} > {resource} > Audit Logging > Key Prefix
+```
+
+The Audit Logging guardrail for Azure resources have a number of policy
+sub-settings to determine the attributes of the audit logging check. The format
+of these policy types is
+`{Provider} > {service} > {resource} > Audit Logging > {Items}`:
+
+```
+ {Provider} > {service} > {resource} > Audit Logging > Log Checkpoints
+ {Provider} > {service} > {resource} > Audit Logging > Log Retention Days
+ {Provider} > {service} > {resource} > Audit Logging > Log Duration
+ {Provider} > {service} > {resource} > Audit Logging > Log Connections
+ {Provider} > {service} > {resource} > Audit Logging > Log Disconnections
+```
+
+### Policy Types Description
+
+| Policy | Description |
+| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `{Provider} > {service} > {resource} > Audit Logging` | Allows you to check or enforce audit logging requirement for the resource. |
+| `{Provider} > {service} > {resource} > Audit Logging > User Activity Logging` | Define the user activity audit logging settings required for the resource. |
+| `{Provider} > {service} > {resource} > Audit Logging > Bucket` | The name of a S3 bucket to which the resource audit logs is stored. |
+| `{Provider} > {service} > {resource} > Audit Logging > Key Prefix` | Define a folder(Optional) inside S3 bucket to which the resource audit logs is stored. |
+| `{Provider} > {service} > {resource} > Audit Logging > Log Checkpoints` | Sets desired value for each checkpoint. |
+| `{Provider} > {service} > {resource} > Audit Logging > Log Retention Days` | Sets the number of days a log file is saved for. |
+| `{Provider} > {service} > {resource} > Audit Logging > Log Duration` | Sets the desired value to log the duration of each completed SQL statement. |
+| `{Provider} > {service} > {resource} > Audit Logging > Log Connections` | Sets the desired value to log each successful connection. |
+| `{Provider} > {service} > {resource} > Audit Logging > Log Disconnections` | Sets the desired value to log end of a session, including duration. |
+
+**Note**:
+
+- The `Audit Logging` control evaluates and take actions if and only if the
+ parameter group of the cluster is not the default and is not shared with any
+ other cluster. If these conditions are not met, the control is set in the
+ `invalid` state.
+- The S3 bucket configured to inject the logs must exist in the same region as
+ the cluster and the Redshift service must be allowed write access.
diff --git a/docs/using/standard/budget.md b/docs/using/standard/budget.md
new file mode 100644
index 00000000..15ce12e1
--- /dev/null
+++ b/docs/using/standard/budget.md
@@ -0,0 +1,164 @@
+---
+title: Budget Guardrails
+sidebar_label: Budget
+---
+
+# Budget Guardrails
+
+## Overview
+
+Budget guardrails provide a mechanism for tracking current spend against
+a planned target, and taking appropriate actions to help control cost.
+
+Current and forecast spend APIs are used to get information on the budget. This
+is currently available for AWS only.
+
+## Policy Types
+
+Budget policies can be broadly classified into two categories:
+
+- Account-level settings for the target and the current spend etc, as well as
+ permission settings in lockdown policies to restrict access.
+- Service/ Resource-level settings for taking action based on the budget state.
+ These are defined in specific services and leverage existing controls such as
+ `Active` and `Approved
+
+### Policy Types Description
+
+| Policy | Description |
+| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `AWS > Account > Budget > Enabled` | Determine whether budget reporting is enabled for the account or not. |
+| `AWS > Account > Budget > Target` | The budget target for the AWS Account in US Dollars. |
+| `AWS > Account > Budget > State` | Calculates the current status of the set budget. The default policy setting is generally sufficient. |
+| `AWS > Account > Permissions > Lockdown > Budget` | Configure lockdown policies to restrict APIs based on the budget state (when the current spend exceeds a defined threshold). |
+| `AWS > Account > Permissions > Lockdown > Budget > Restricted APIs` | A list of APIs that is restricted when the budget reaches the defined state. |
+| `{provider} > {service} > {resource type} > Active > Budget` | The policy allows you to force {resource type} to the inactive status based on the current budget state, as defined in `AWS > Account > Budget > State`. |
+| `{provider} > {service} > {resource type} > Approved > Budget` | The policy allows you to set {resource type} to Not approved based on the current budget state, as defined in `AWS > Account > Budget > State`. |
+
+### Policy Types Definition
+
+#### Account Level Policies
+
+- Account-level policies appear under `AWS > Account > Budget` in the type
+ hierarchies, and are used to set and/ or view settings, values, and
+ definitions that are shared by all services.
+- The state of the budget is determined by the interaction of several account
+ level policies:
+ - The `Budget > Enabled` policy allows you to enable or disable budget
+ checking. If set to `Skip` (the default), The budget control should not look
+ up the budget data in the account.
+- The `Budget > State` policy a calculated value by default. It reflects the
+ current state of the actual and forecast spend, as compared to the budget
+ target set. The resource-level budget policies will use this policy to
+ determine the actions to minimize cost.
+- The `Budget > Target` policy allows you to set the budget (allowed spend) for
+ the account. The `Budget > State` will be set in relation to this amount.
+
+#### Budget States
+
+- Guardrails defines named budget states. The enforcement policies and controls will
+ refer to these states and will use the current state to determine when to take
+ action.
+- The states are as follows:
+
+| State | Description |
+| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `Shutdown` | Budget is completely spent, or trending significantly over. No more money is available. All spending must cease, even if it results in degraded service. |
+| `Critical` | Budget is completely spent, or trending significantly over. Urgent action is needed to reduce spend. |
+| `Over` | Current or forecast spend exceeds the budget target. |
+| `On target` | Current and forecast spend are in line with the budget target. No action is required. |
+| `Under` | Current and forecast spend are lower than projected. |
+| `Unused` | Current and forecast spend is so low that it appears that the account may not be in-use. |
+| `Unknown` | Current and forecast spend is unknown for the account. |
+
+**Note**:
+
+- The default value for `AWS > Account > Budget > Target` is -1. If the policy
+ value for the `AWS > Account > Budget > Enabled` policy is not Skip, and the
+ `AWS > Account > Budget > Target` is < 0, the control should move to an
+ `invalid` state, and informing the user to set the
+ `AWS > Account > Budget > Target` policy to a positive integer value.
+
+#### Account Level Preventive - Permissions
+
+- Account level preventive policies can be set to enforce preventative controls
+ via AWS lockdown policies.
+- You can enable lockdowns via the
+ `AWS > Account > Permissions > Lockdown > Budget` policy.
+- You can specify which api actions will be locked via the
+ `AWS > Account > Permissions > Lockdown > Budget > Restricted APIs` policy,
+ which allows you to set a list of IAM actions that are prevented for each
+ state. For example:
+
+```yaml
+critical:
+ - ec2:RunInstance
+ - ec2:StartInstance
+ - rds:StartDB*
+ - redshift:createcluster
+```
+
+#### Resource Level Policies
+
+- The budget policies defined as part of the `Active` control is used to
+ determine whether the resource is `active` or `inactive` based on the current
+ budget state of the account.
+- The budget policies defined as part of the `Approved` control is used to
+ determine whether the resource is `approved` or `unapproved` based on the
+ current budget state of the account.
+
+The **Active > Budget** policy has a consistent form: {Provider} > {service} >
+{resource} > Active > Budget
+
+
+
+ AWS > EC2 > Instance > Active > Budget
+ AWS > RDS > DB Cluster > Active > Budget
+ AWS > Redshift > Cluster > Active > Budget
+
+
+
+The values for this policy reflect when it should be `inactive`. The basic form
+is:
+
+```
+ Skip
+ Force inactive if Budget > State is Over or higher
+ Force inactive if Budget > State is Critical or higher
+ Force inactive if Budget > State is Shutdown
+```
+
+The **Approved > Budget** policy has a consistent form: {Provider} > {service} >
+{resource} > Approved > Budget
+
+
+
+ AWS > EC2 > Instance > Approved > Budget
+ AWS > RDS > DB Cluster > Approved > Budget
+ AWS > Redshift > Cluster > Approved > Budget
+
+
+
+The values for this policy reflect when it should be `unapproved`. The basic
+form is:
+
+```
+ Skip
+ Unapproved if Budget > State is Over or higher
+ Unapproved if Budget > State is Critical or higher
+ Unapproved if Budget > State is Shutdown
+```
+
+### Example: AWS > Account > Budget > Enabled
+
+First, assume that the monthly actual spent becomes $ 1001. The following
+policies have been configured in Guardrails:
+
+- **AWS > Account > Budget > Enabled** is set to
+ `Check: Budget > State is on Target or below`.
+- **AWS > Account > Budget > Targe** is set to `1000`.
+- **AWS > Account > Budget > State** is calculated to `Over`.
+
+In order, these policies will evaluate account spending is over the budget and
+has entered the `Over` state. The policy evaluation of `Budget > Enabled`
+results the control being in **ALARM** state.
diff --git a/docs/using/standard/cmdb.md b/docs/using/standard/cmdb.md
new file mode 100644
index 00000000..d885bb1f
--- /dev/null
+++ b/docs/using/standard/cmdb.md
@@ -0,0 +1,32 @@
+---
+title: CMDB Guardrails
+sidebar_label: CMDB
+---
+
+# CMDB Guardrails
+
+## Overview
+
+The CMDB control is responsible for populating and updating all the attributes
+for that resource type in the Guardrails CMDB.
+
+ The Resource Type AWS > SQS > Queue
defines a
+Control AWS > SQS > Queue > CMDB
with a target Resource Type of AWS > SQS > Queue
.
+
+
+### Policies to control CMDB
+
+CMDB controls have an associated policy that allows them to be enforced or
+skipped. Note, however, that if CMDB is set to `Skip` for a resource, then it
+will not exist in the CMDB, and _no controls that target it will run_.
+
+ The AWS > S3 > Bucket > CMDB
policy may be set to `Skip` or `Enforce: Enabled`
+
+
+CMDB controls also use the `Region` policy associated with the resource. If
+region is not in `Regions` policy, the CMDB control should delete the resource
+from the CMDB (since we don’t want to capture any resources in that region, we
+should also cleanup).
+
+ The AWS > S3 > Bucket > CMDB
will add/modify a resource in the CMDB if the resource is in region specified in AWS > S3 > Bucket > Regions
, and delete it from the CMDB if it is not.
+
diff --git a/docs/using/standard/configured.md b/docs/using/standard/configured.md
new file mode 100644
index 00000000..45448499
--- /dev/null
+++ b/docs/using/standard/configured.md
@@ -0,0 +1,510 @@
+---
+title: Stacks and Configured Guardrails
+sidebar_label: Stack/Configured
+---
+
+# Stacks and the Configured Guardrails
+
+> [!IMPORTANT]
+> This document pertains to the legacy `Stack` and `Configured` controls. Consider migrating to the [Stack [Native] Controls](/guardrails/docs/concepts/guardrails/stacks) for [even more power and flexibility!](/guardrails/docs/concepts/guardrails/stacks#stack-native-controls-vs-legacy-stacks--configured-controls).
+
+
+## Overview
+
+Guardrails provides a mechanism for managing resource configuration using Terraform.
+Guardrails **Stack** and **Configured** controls allow you to define the
+configuration for a resource or set of resources using standard Terraform HCL.
+Guardrails can apply your configuration whenever resources change, enforcing your
+standards and preventing configuration drift.
+
+- A **Stack** is a set of resources configured via a terraform source from
+ Guardrails.
+- A resource can configure itself using terraform via its **Configured**
+ control.
+
+
+A resource does not need to be configured by a Guardrails stack or configured policy to be managed by other guardrails.
+
+
+### Stacks
+
+A Guardrails **Stack** is a set of resources managed by Turbot Guardrails using Terraform.
+Guardrails uses stacks to deploy, configure, and manage sets of related resources.
+
+Each stack has a single `Source` policy that specifies the Terraform
+configuration source code. When the stack control runs, resources will be
+created, modified or deleted per the `Source`.
+
+Stacks are responsible for the creation and deletion of multiple resources. Once
+created, the resources are responsible for updating themselves via the
+[Configured control](#configured-control). Changes to the underlying resources
+will trigger the resource's Configured control to run. The Configured control
+will use the `Source` from the parent stack to re-apply its configuration,
+keeping it configured per the policy.
+
+
+After being created by the AWS > Turbot > Event Handlers
stack, the configuration of a the turbot_aws_api_handler
SNS Topic is managed by its AWS > SNS > Topic > Configured
control. If the topic is modified, the AWS > SNS > Topic > Configured
control will re-apply its configuration using the terfafrom source defined in the AWS > Turbot > Event Handlers > Source
policy
+
+
+#### Stack Terraform Version
+
+Guardrails Stacks supports up to the most recent
+[Terraform 0.15 version](https://github.com/hashicorp/terraform/blob/v0.15/CHANGELOG.md),
+which is 0.15.5. Using the policy family `* > * > Terraform Version`, users can
+define which version of Terraform to use. The policy
+`Turbot > Stack Terraform Version [Default]` can be used to define the Terraform
+version across all stack policies.
+
+**Notes**:
+
+- While the policy allows administrators to specify any version of Terraform,
+ only the "oldest" minor version for each patch is valid. I.e. `0.11.*` and
+ `0.11.12` are valid values, but `0.11.10` is not. In general, it is
+ recommended to use `*` in conjunction with the patch version.
+- Guardrails supports the different syntax of each version, but does NOT support the
+ use of new features or modules.
+
+Supported values for the policy `* > * > Terraform Version`:
+
+- `0.11.*` or `0.11.14`
+- `0.12.*` or `0.12.28`
+- `0.13.*` or `0.13.0-beta3`
+- `0.14.*` or `0.14.11`
+- `0.15.*` or `0.15.5`
+- `*` This value will use the latest version of Terraform.
+
+#### Guardrails-Defined Stacks
+
+Guardrails provides pre-defined stacks to assist with common setup and configuration
+tasks. Guardrails-defined stacks manage common resources required to operate Guardrails,
+as well as resources used as containers or defaults for other controls.
+
+Guardrails-defined stacks typically appear under `{provider} > Turbot` in the policy
+type hierarchy.
+
+
+Guardrails-defined stacks include:
+
+ - GCP > Turbot > Event Handlers
+ - Azure > Turbot > Event Handlers
+ - AWS > Turbot > Event Handlers
+ - AWS > Turbot > Audit Trail
+ - AWS > Turbot > Logging
+ - AWS > Turbot > OS Management
+ - AWS > Turbot > Service Roles
+
+
+
+The `Source` policy is read-only for Guardrails-defined stacks, and is generated by
+Guardrails. Sub-policies of the stack allow you to change common parameters,
+providing a simple interface for customizing resources created by the stack.
+Modifying a stack policy will result in changes in the stack source policy,
+which in turn will run the stack to apply the changes.
+
+
+The
AWS > Turbot > Logging > Bucket
stack creates and manages S3 buckets used by multiple AWS services for logging. This stack is configured per the
AWS > Turbot > Logging > Bucket > Source>
policy, which is generated using policies that allow you to set options to customime the bucket name, tags, and other properties:
+
+
+ - AWS > Turbot > Logging > Bucket > Default Encryption
+ - AWS > Turbot > Logging > Bucket > Name
+ - AWS > Turbot > Logging > Bucket > Name > Prefix
+ - AWS > Turbot > Logging > Bucket > Regions
+ - AWS > Turbot > Logging > Bucket > Tags
+ - AWS > Turbot > Logging > Bucket > Versioning
+
+
+
+### User-Defined Stacks
+
+User-defined stacks are custom Guardrails stacks built entirely from user-defined
+Terraform source. With user-defined stacks, you can describe your configuration
+using standard Terraform syntax, and let Guardrails manage applying the
+configuration, re-applying the configuration in response to changes on the
+resources or policies, and automatically configuring new resources as they are
+added.
+
+#### Stack Polices
+
+Stack behavior is controlled by the `Stack` policy and sub-policies.
+
+| Policy | Description |
+| ---------------------------- | ----------------------------------------------------------------------- |
+| **Stack** | Determine whether to run the stack in check mode, enforce mode, or skip |
+| **Stack > Source** | The Terraform configuration source code that should be applied |
+| **Stack > Variables** | `.tfvar`-style variable overrides |
+| **Stack > Secret Variables** | `.tfvar`-style variable overrides for sensitive variables |
+
+The `Stack` policy determines what action the control will take:
+
+| Value | Description |
+| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **Skip** | The control will not run |
+| **Check: Configured** | A Terraform plan will be generated. If the planned configuration does not match the current configuration, the control will alarm. |
+| **Enforce: Configured** | A Terraform plan will be generated. If the planned configuration does not match the current configuration, the control will apply the configuration. |
+
+The `Stack > Source` policy contains the Terraform configuration code that
+should be applied.
+
+Note that the stack expects to continue to manage any resources that were
+created in the stack - if you delete a resource from the Terraform configuration
+in the `Source` policy, the stack control will destroy the resource. For
+example, if you wish to destroy all the objects created by the stack, set the
+`Source` policy to `{}`, and leave the `Stack` policy set to
+`Enforce: Configured`.
+
+The `Stack > Variables` policy can contain variable definitions in Terraform
+HCL, in the same way that they would use a
+[.tfvars file](https://www.terraform.io/docs/configuration/variables.html#variable-definitions-tfvars-files).
+
+Like `Stack > Variables`, the `Stack > Secret Variables` policy can contain
+variable definitions. This policy will be marked `secret` in Guardrails, and is
+meant for parameters that are sensitive or confidential.
+
+The `Variables` and `Secret Variables` policies are merged into a single set of
+variables that are passed as a `tfvars` file to Terraform by the stack control.
+
+The `Variables` and `Secret Variables` are not required, however separating the
+variables from the configuration will simplify using stacks in Guardrails:
+
+- As a best practice, you should only enter an immediate value in the
+ `Stack > Source`. If calculated policies are required to get input data for
+ the stack, the `Stack > Variables` should use a calculated policies to get the
+ data and pass it in as Terraform variables.
+
+ - This makes the source easily testable outside of Guardrails, as it is not a
+ calculated policy
+ - Rendering the input variables in nunjucks is much simpler than rendering the
+ whole Terraform source
+
+- Using map or object variables allows you to create a map policy in the
+ `Variables` with configuration information that can be used in all child
+ resource stacks. If a new item is added, the variables can be updated without
+ updating the terraform configuration.
+
+
+
+### User-Defined Stack Controls
+
+Guardrails typically provides custom stack policies at the
+account/project/subscription for managing global resources:
+
+- `AWS > Account > Stack`
+- `GCP > Project > Stack`
+- `Azure > Subscription > Stack`
+
+Stacks also target a Region or Resources Group, allowing you to manage locally
+scoped resources as well:
+
+- `AWS > Region > Stack`
+- `GCP > Region > Stack`
+- `Azure > Resource Group > Stack`
+
+Guardrails also provides service-level stacks for some services. This allows you to
+organize and separate your stack configurations by the types of resources that
+they manage. The services stacks target the region or resource group for
+regional services, and the "global" region for global services (Route53, IAM,
+etc).
+
+- `AWS > VPC > Stack`
+- `AWS > SSM > Stack`
+
+#### Example - standard IAM service roles and users
+
+Many organizations rely on 3rd party software or SaaS products that requires IAM
+users or roles to access their accounts. Performance monitoring tools are an
+example -- typically, an IAM cross-account role has to be created in all AWS
+accounts in the enterprise to allow the tool access.
+
+You can use Guardrails Stacks to simplify the creation and management of these
+roles across all of your AWS Accounts. Using a Stack targeting AWS accounts,
+simply define the configuration for the IAM role using Terraform. Guardrails will
+create it in all your AWS accounts. If the vendor adds new features that require
+additional access for the role, you can simply modify the `Stack > Source`
+policy, and Guardrails will deploy the changes. If you add new AWS Accounts, Guardrails
+automatically runs your stack, making it consistent and compliant with your
+standards.
+
+1. Enter the Terraform configuration in the `AWS > Account > Stack > Source`
+ policy. For example:
+
+```hcl
+resource "aws_iam_role" "monitoring_role" {
+ name = "my_monitoring_role"
+
+ assume_role_policy = < Account > Stack` policy to `Enforce: Configured`
+
+Guardrails will apply the Terraform source, creating the custom role and policy, and
+then assigning the policy to the role.
+
+### Configured Control
+
+Every resource in Guardrails can manage its own configuration in its own
+**Configured** control. For resources that are configured by a stack, it is the
+Configured control that keeps the resource configured per the stack source.
+Resources that are not managed by a stack can define their own configuration in
+their own `Configuration > Source`.
+
+
+Every resource in Guardrails can manage its own configuration in its own
Configured policy:
+
+ - AWS > EC2 > Instance > Configured
+ - AWS > VPC > Security Group > Configured
+ - AWS > DynamoDB > Table > Configured
+
+
+
+Resources that are not part of a stack can define their own Terraform
+configuration using the standard `Configured` policies:
+
+| Policy | Description |
+| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **{resource} > Configured** | Determine how to configure this resource. Note that If the resource is managed by another stack, then the Skip/Check/Enforce values here are ignored and inherit from the stack that owns it |
+| **{resource} > Configured > Source** | The Terraform source used to configure this resource |
+| **{resource} > Configured > Precedence** | An ordered list of who is allowed to claim this resource. A stack cannot claim this resource if it is already claimed by another stack at a higher level of precedence. |
+
+The `Configured` policy determines the overall behavior of the control. Note
+that resources that are part of a stack are controled by the corresponding
+`Stack` policy, and the `Configured` policy setting will have no effect.
+
+| Value | Description |
+| ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **Skip (unless claimed by a stack)** | Do not manage this resource via the configured control (unless it is managed by another stack) |
+| **Check: Per Configured > Source (unless claimed by a stack)** | Check the resource configuration against the `Source` policy, and alarm if it is not configured correctly (unless it is managed by another stack) |
+| **Enforce: Per Configured > Source (unless claimed by a stack)** | Apply the configuration in the`Source` policy (unless it is managed by another stack) |
+
+The `Configured > Source` policy should specify the Terraform source used to
+configure this resource.
+
+The `Configured > Precedence` policy allows you to define what stack may own
+this resource. A resource can only be configured by a single stack (at a time),
+and the [claim precedence](#resource-claiming) defines the rules for determining
+who can configure the resource.
+
+### Resource Claiming
+
+Guardrails determines the Terraform resource state dynamically. This allows Guardrails
+to manage existing resources via Terraform, even if they were not created by
+Guardrails! While this is an extremely powerful capability, this may not always be
+the desired behavior - sometimes you may NOT want to Guardrails to manage a resource
+in a Terraform stack if it already exists. **Claim Precedence** allows you to
+define whether a resource can be claimed by a stack, and the order of priority
+for ownership.
+
+The `Precedence` policy defines an ordered list of who is allowed to claim a
+resource. The list is ordered by precedence from highest to lowest. - A stack
+cannot claim a resource if it is already claimed by another stack at a higher
+level of precedence. If this occurs the stack that tries to claim it should
+become invalid - The stack will not be able to create or delete resources -
+Although the stack is invalid, the individual resources will be able to continue
+to manage themselves using the stack source.
+
+- If the stack that attempts to claim the resource does not match any item in
+ the list, it cannot claim it. Note that this implies that an empty list means
+ the resource cannot be claimed by any stack. If this occurs the stack that
+ tries to claim it should become invalid.
+
+- The list is comprised of Guardrails control type references, as well as special
+ constants.
+ - The following constants are available:
+ - **current** - The current stack (usually the one that created it)
+ - **source** - The **Configured > Source** sub-policy
+ - The references will allow wildcards following standard bash globbing.
+ - Note that '\*' matches any character except '/'; you should use '\*\*' to
+ match recursively:
+ ```
+ @turbot/turbot-iam#/control/types/**
+ @turbot/aws-vpc**
+ @turbot/**
+ ```
+ - Using glob wildcards, it is possible that the current (owning) stack, and
+ the new stack attempting to claim the resource BOTH match the same rule.
+ When this occurs, the new stack will **_not_** be able to claim the resource
+ - Using this pessimistic claim model prevents fighting - If the new stack
+ was allowed to claim the resource, the next time the old stack ran, it
+ would **_also_** be able to claim it, and the two stacks would fight
+ infinitely.
+ - This means that `**` by itself is the same as `current` when a resource
+ has already been claimed -- `["**"]` is identical to `["current","**"]`
+ - The stack attempting to claim the resource will become invalid at this
+ point, providing a notification to the user of the conflict
+ - Example: Consider a precedence list as follows:
+ ```
+ @turbot/**
+ @myCompany/**
+ current
+ source
+ ```
+ - my resource is currently configured by:
+ `@turbot/aws-vpc#/control/types/my-stack`
+ - another stack, `@turbot/aws-ec2#/control/types/my-other-stack`, attempts
+ to claim this resource
+ - In this case, both items are matched by the first entry: `turbot/**`.
+ The current stack wins - `@turbot/aws-ec2#/control/types/my-other-stack`
+ **_cannot_** claim the resource
+
+#### Claim Precedence Examples
+
+- No one can claim me:
+
+ ```yaml
+ [] #empty list
+ ```
+
+- Anyone can claim me if I have never been claimed:
+ ```yaml
+ - **
+ ```
+- I can be configured via Source, but not claimed via a stack
+
+ ```yaml
+ - source
+ ```
+
+- Guardrails wins, but custom stacks are allowed:
+
+ ```yaml
+ - @turbot/**
+ - current
+ - source
+ - **
+ ```
+
+- Guardrails wins, but only if not already claimed:
+
+ ```yaml
+ - current
+ - @turbot/**
+ - source
+ - **
+ ```
+
+- Can only be configured by Guardrails, or as a custom (non-configured resource):
+
+ ```yaml
+ - @turbot/**
+ ```
+
+- Internal controls > Guardrails > Custom:
+ ```yaml
+ - @mycompany/**
+ - @turbot/**
+ - current
+ - source
+ - **
+ ```
diff --git a/docs/using/standard/data-protection.md.not-yet-implemented b/docs/using/standard/data-protection.md.not-yet-implemented
new file mode 100644
index 00000000..6670964e
--- /dev/null
+++ b/docs/using/standard/data-protection.md.not-yet-implemented
@@ -0,0 +1,127 @@
+---
+title: Data Protection Guardrails
+sidebar_label: Data Protection
+---
+
+## Overview
+
+The aim of Data Protection is to mitigate or eliminate risk of data loss due to user error, corruption (both accidental and intentional) and system/media failure.
+
+The cloud enables us to store and process massive data sets with a plethora of tools and technologies. These capabilities have rendered traditional backup and recovery tools ineffective. As the size of data has increased, techniques such as snapshots become necessary to meet backup and (perhaps more importantly) restore SLAs. These data protection mechanisms are often cloud and service specific, making it a challenge for organizations to audit and enforce standards, best practices, and regulatory compliance.
+
+Guardrails helps organizations address data protection challenges with policies that can:
+* Check & Enforce service-specific snapshot and backup settings, such as retention periods and backup windows
+* Automate the process of scheduling backups and snapshots
+* Provide a consistent, easy to use set of backup schedules and retentions, with built-in backoff rotations (daily/weekly/monthly/yearly etd)
+* Provide default policies to assist teams in setting appropriate schedules and retentions
+* Enforce **mandatory minimum** retention policies, while allowing teams to exceed those retentions.
+* Automate offsite backup copies with technologies like cross-region snapshots
+* Assist in meeting regulatory and compliance requirements
+
+
+## General Guidelines
+
+Policies related to snapshots, backups, snapshot replication, etc will appear as **Data Protection** under the resource to which the policies apply
+
+Data Protection policies use names consistent with those of the underlying service . For example:
+* DynamoDB uses the term "Backup", thus the policies should be: `AWS > DynamoDB > Table > Data Protection > Managed Backups`
+* Redshift uses the term "Snapshot", thus the policies should be: `AWS > Redshift > Cluster > Data Protection > Manage Snapshots`
+* RDS Uses multiple terms:
+* RDS uses "Backup" to refer to the daily automated snapshots that can be used for point-in-time restore. Such policies would reside under: `AWS > RDS > DB Instance > Data Protection > Backup`
+* RDS uses "Snapshot" to refer to manual snapshots. Policies where Guardrails would manage these should reside under: `AWS > RDS > DB Instance > Data Protection > Managed Snapshots`
+
+
+## Guardrails Managed Backups/Snapshots
+Guardrails has many policies to assist in the configuration of backups, snapshots, and other options that are built in to cloud services. Many times, however, these options are insufficient to meet an organizations data protection requirements. Guardrails has its own capability to automate scheduling and retention of backups/snapshots for many cloud resources. We typically use the term **Managed** to refer to these entities.
+
+
+
+ AWS > DynamoDB > Table > Data Protection > Managed Backups
+ GCP > Compute > Disk > Data Protection > Managed Snapshots
+
+
+
+Backup schedules and retentions for Guardrails-managed backups/snapshots are combined in a single policy called **Schedule**. These schedules will include implicit backoffs (Grandfather/father/son models).
+
+In addition to the configurable backup schedule, there is a separately configurable schedule to set a **minimum** backup and retention level. This policy will be called **Minimum Schedule**, and will have similar values to the **Schedule** policy. This allows an organization to set a minimum level of data protection, while giving the individual teams the ability to exceed these minimum to meet their needs.
+
+The effective schedule will be the merger of the **Schedule** and **Minimum Schedule** policies. This effective schedule will
+ * Use the more frequent schedule from the two policies. If one is hourly, and the other is daily, the hourly schedule should be used.
+ * Use the longer retention value at each level. If one policy specifies 4 weekly and the other 8, use 8.
+
+
+
+ AWS > EBS > Disk > Data Protection > Managed Snapshots
+ AWS > EBS > Disk > Data Protection > Managed Snapshots > Schedule
+ AWS > EBS > Disk > Data Protection > Managed Snapshots > Minimum Schedule
+
+
+
+In addition, Guardrails provides default schedules to allow an organization to set schedules and minimum schedules across multiple services. These policies are:
+- `{provider} > Data Protection > Default Schedule`
+- `{provider} > Data Protection > Default Minimum Schedule`
+
+
+
+## Schedules and Retention
+Many Data Protection policies specify a backup and retention schedule. To simplify configuration, Guardrails provides a consistent list of possible schedules:
+
+| Name | Hours | Hours12 | Days | Weeks | Months | Quarters | Years |
+|------| ------|------|------|------|------|------|------|
+| Daily for 3 days | - | - | 3 | - | - | - | - |
+| Daily for 7 days | - | - | 7 | - | - | - | - |
+| Daily for 14 days | - | - | 14 | - | - | - | - |
+| Daily for 30 days | - | - | 30 | - | - | - | - |
+| Daily for 90 days | - | - | 90 | - | - | - | - |
+| Daily for 365 days | - | - | 365 | - | - | - | - |
+| Daily with backoff to 3 months | - | - | 14 | 8 | 3 | - | - |
+| Daily with backoff to 1 year | - | - | 30 | 12 | 12 | - | 1 |
+| Daily with backoff to 3 years | - | - | 30 | 12 | 12 | 8 | 3 |
+| Daily with backoff | - | - | 30 | 12 | 12 | 8 | 999|
+| Hourly with backoff to 7 days | 24 | 6 | 7 | - | - | - | - |
+| Hourly with backoff to 14 days | 72 | 14 | 14 | - | - | - | - |
+| Hourly with backoff to 1 month | 72 | 14 | 14 | 4 | 1 | - | - |
+| Hourly with backoff to 3 months | 72 | 14 | 14 | 4 | 3 | - | - |
+| Hourly with backoff to 1 year | 72 | 14 | 30 | 12 | 12 | - | 1 |
+| Hourly with backoff to 3 years | 72 | 14 | 30 | 12 | 12 | 8 | 3 |
+| Hourly with backoff | 72 | 14 | 30 | 12 | 12 | 8 | 999|
+
+### Assumptions
+* The scheduler uses the timezone of the region in which the resource resides.
+* Hourlies are taken anywhere in the hour
+* The "Hour12" is the last hourly before noon, and the last hourly of the day
+* The "Daily" is the last one of the day
+* The "Monthly" is the Daily on the last day of the month
+* The "Quarter" is the Daily on the last day of the quarter
+* The "Yearly" is the Daily on the last day of the year
+
+
+## Guardrails Managed Remote Copies
+
+For some resources, Guardrails also has capabilities to automate copying snapshots to another region and/or account, and to manage the scheduling and retention of these backups/snapshots for cloud resources. We use the term **Copies** to refer to these entities.
+
+ **Copies** will exist as sub-policies under the snapshot types to which they apply.
+
+
+
+ AWS > RDS > DB Instance > Data Protection > Managed Snapshots > Copies
+ AWS > RDS > DB Instance > Data Protection > Backup > Copies
+
+
+
+Snapshots will be copied after they are created in the primary region.
+Snapshots will have their own retention policies, separate from those if the originating snapshot. These policies will use the same **Schedule** and **Minimum Schedule** format as the **Managed Snapshots**.
+
+Remote snapshot copies require a region be specified. This should be included in a sub-policy called **Region**.
+
+Most remote snapshot copies require a KMS key be specified it copying an encrypted snapshot. This should be included in a sub-policy called **Encryption Key**. An empty string will mean no encryption.
+
+
+
+
+ AWS > RDS > DB Instance > Data Protection > Managed Snapshots > Copies > Schedule
+ AWS > RDS > DB Instance > Data Protection > Managed Snapshots > Copies > Minimum Schedule
+ AWS > RDS > DB Instance > Data Protection > Managed Snapshots > Copies > Region
+ AWS > RDS > DB Instance > Data Protection > Managed Snapshots > Copies > Encryption Key
+
+
diff --git a/docs/using/standard/discovery.md b/docs/using/standard/discovery.md
new file mode 100644
index 00000000..0176e7ea
--- /dev/null
+++ b/docs/using/standard/discovery.md
@@ -0,0 +1,39 @@
+---
+title: Discovery Guardrails
+sidebar_label: Discovery
+---
+
+# Discovery Guardrails
+
+## Overview
+
+The `Discovery` control is tasked with identifying instances for a particular
+resource. If there are any resources that are not captured in the CMDB as part
+of the events that AWS triggers, Guardrails will capture them through the Discovery
+controls.
+
+A Discovery control is run on the parent resource (e.g. an AWS Region) to
+periodically search for new target resources (e.g. S3 Buckets) and save them to
+the Guardrails CMDB.
+
+Once discovered, the resource is then responsible for tracking changes to itself
+through the CMDB control.
+
+ The Resource Type AWS > SQS > Queue
defines a
+Control AWS > SQS > Queue > Discovery
with a target Resource Type of AWS > Region
.
+
+
+### Policies to control Discovery
+
+Discovery controls are enforced or skipped based on the associated CMDB policy.
+
+ The AWS > S3 > Bucket > Discovery
control relies on the value of the AWS > S3 > Bucket > CMDB
policy for its configuration. AWS > S3 > Bucket > CMDB
may be set to `Skip` or `Enforce: Enabled`
+
+
+Discovery controls also use the `Region` policy associated with the resource. If
+region is not in `Regions` policy, the CMDB control should delete the resource
+from the CMDB (since we don’t want to capture any resources in that region, we
+should also cleanup).
+
+ The AWS > S3 > Bucket > Discovery
control will search for S3 buckets in a the regions specified in AWS > S3 > Bucket > Regions
, and will add any buckets it finds to the CMDB as AWS > S3 > Bucket
resources.
+
diff --git a/docs/using/standard/encryption-at-rest.md b/docs/using/standard/encryption-at-rest.md
new file mode 100644
index 00000000..3c939194
--- /dev/null
+++ b/docs/using/standard/encryption-at-rest.md
@@ -0,0 +1,131 @@
+---
+title: Encryption at Rest Guardrails
+sidebar_label: Encryption at Rest
+---
+
+
+# Encryption at Rest Guardrails
+
+## Overview
+
+Most corporations already have standards around data encryption. These vary from
+detailed rules that classify data by sensitivity and provide encryption
+requirements for each, to more general guidelines like "encrypt everything!".
+Guardrails provides a simple yet flexible platform for the implementation and
+auditing of these standards, whatever they may be.
+
+**Encryption at Rest** refers specifically to the encryption of data when
+written to an underlying storage system. All the major cloud vendors provide
+options for encryption of the data that they store on your behalf. Often, the
+details vary by service; within a given cloud provider, the encryption options
+may be different for their object storage, relational databases, no-sql
+databases, file servers, etc. While the details may differ, the type of options
+are generally the same:
+
+- Encryption Level: is it enabled? Is it the correct algorithm/type?
+- Key Management: what key should be used?
+
+Guardrails generally solves these with 2 policies:
+
+- `Encryption at Rest`: This policy allows you check or enforce the minimum or
+ actual level of encryption required for the service. The option values are
+ ordered from least secure to most secure. Note that in these policies, Guardrails
+ considers a customer managed key more secure than a default key managed by the
+ vendor.
+- `Encryption At Rest > Customer Managed Key`: This allows you to specify the
+ key to be used for encryption (assuming you have set the "Encryption at Rest")
+ policy to use a customer managed key.
+
+For services that support changing the encryption level and/or key, Guardrails can
+enforce your standard and change the encryption on the fly. These policies can
+be found directly under the service in the hierarchy:
+
+- `{Provider} > {Service} > {Resource} > Encryption at Rest`
+- `{Provider} > {Service} > {Resource} > Encryption at Rest > Customer Managed Key`
+
+
+
+ AWS > S3 > Bucket > Encryption at Rest
+ AWS > S3 > Bucket > Encryption at Rest > Customer Managed Key
+ GCP > Storage > Bucket > Encryption at Rest
+ GCP > Storage > Bucket > Encryption at Rest > Customer Managed Key
+
+
+
+Some services only allow you to set the encryption options when the resource is
+created. While you may not be able to change the encryption level on the fly in
+this case, you may want to take some other action such as stopping, detaching,
+or deleting the resource. Guardrails provides these capabilities in the "Approved"
+policies:
+
+- `{Provider} > {Service} > {Resource} > Approved > Encryption at Rest`
+- `{Provider} > {Service} > {Resource} > Approved > Encryption at Rest > Customer Managed Key`
+
+
+
+ AWS > EC2 > Volume > Approved > Encryption at Rest
+ AWS > EC2 > Volume > Approved > Encryption at Rest > Customer Managed Key
+ GCP > BigQuery > Table > Approved > Encryption at Rest
+ GCP > BigQuery > Table > Approved > Encryption at Rest > Customer Managed Key
+
+
+
+## General Guidelines
+
+Most Encryption At Rest policies have options for using a custom key. This will
+be defined in a sub policy `Encryption At Rest > Customer Managed Key`
+
+### Values
+
+Encryption at Rest value names are consistent where possible, though all of the
+implementations support different values:
+
+- The term `{provider) Managed Key` refers to encryption using default keys
+ (Microsoft managed keys, AWS managed keys)
+- The term `Customer Managed Key` refers to non-default keys (customer keys in
+ KMS or KeyVault)
+- When using an policy specifies “or higher”, the values list will appear in
+ order from least secure to most secure
+
+Note that policies may not contain all of these possible values depending on the
+implementation, and there may be other values specific to a service/resource .
+Most `Check` policies have a matching `Enforce` policy. A notable exception is
+that we don't use `Enforce: None or higher` as it would never take an action.
+
+| Value | Description |
+| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `Skip` | Skip |
+| `Check: None` | Check that encryption is NOT enabled |
+| `Check: None or higher` | will always pass, but notes that we have explicitly checked it, not just skipped |
+| `Check: {Provider} managed key` | Check that encryption is enabled and set to use the providers default key (Microsoft key, aws/ebs service key, etc) |
+| `Check: {Provider} managed key or higher` | Check that encryption is enabled with either a default key or a custom key (which Guardrails considers more secure) |
+| `Check: Customer managed key` | Check that encryption is enabled using **any** customer managed key (A custom KMS/KeyVault key, not a Microsoft/AWS/google default key) |
+| `Check: Encryption at Rest > Customer Managed Key` | Check that encryption is enabled using the customer managed key that is defined in the sub-policy for this resource |
+| `Enforce: None` | Disable encryption at rest |
+| `Enforce: {Provider} managed key` | **Always** set the the encryption to the provider managed key. |
+| `Enforce: {Provider} managed key or higher` | Set the the encryption to the provider managed key unless it is already set using a customer managed key, which Guardrails considers a higher encryption level |
+| `Enforce: Customer managed key` | Check that encryption is enabled using **ANY** customer managed key. If not, then set it using the key defined in the sub-policy for this resource. |
+| `Enforce: Encryption at Rest > Customer Managed Key` | Set the encryption to use the key defined in the sub-policy for this resource, regardless of the current setting. |
+
+
+
+ # AWS > S3 > Bucket > Encryption at Rest
+ - Skip
+ - "Check: None"
+ - "Check: None or higher"
+ - "Check: AWS SSE"
+ - "Check: AWS SSE or higher"
+ - "Check: AWS managed key"
+ - "Check: AWS managed key or higher"
+ - "Check: Customer managed key"
+ - "Check: Encryption at Rest > Customer Managed Key"
+ - "Enforce: None"
+ - "Enforce: None or higher"
+ - "Enforce: AWS SSE"
+ - "Enforce: AWS SSE or higher"
+ - "Enforce: AWS managed key"
+ - "Enforce: AWS managed key or higher"
+ - "Enforce: Customer managed key"
+ - "Enforce: Encryption at Rest > Customer Managed Key"
+
+
diff --git a/docs/using/standard/encryption-in-transit.md b/docs/using/standard/encryption-in-transit.md
new file mode 100644
index 00000000..5731e538
--- /dev/null
+++ b/docs/using/standard/encryption-in-transit.md
@@ -0,0 +1,77 @@
+---
+title: Encryption in Transit Guardrails
+sidebar_label: Encryption in Transit
+---
+
+# Encryption in Transit Guardrails
+
+## Overview
+
+Most corporations already have standards around data encryption. These vary from
+detailed rules that classify data by sensitivity and provide encryption
+requirements for each, to more general guidelines like "encrypt everything!".
+Guardrails provides a simple yet flexible platform for the implementation and
+auditing of these standards, whatever they may be.
+
+**Encryption in Transit** refers specifically to the encryption of data while
+data moves between your site and the cloud provider or between two services.
+This protection is achieved by encrypting the data before transmission;
+authenticating the endpoints; and decrypting and verifying the data on arrival.
+All the major cloud vendors provide options for encryption of the data that they
+transfer on your behalf.
+
+Guardrails generally solves these with below policy:
+
+- `Encryption in Transit`: This policy allows you check or enforce the minimum
+ or actual level of encryption required for the resource.
+
+For service resources that support the encryption, Guardrails can enforce your
+organization standard and change the encryption on the fly. These policies can
+be found directly under the service in the hierarchy:
+
+- `{Provider} > {Service} > {Resource} > Encryption in Transit`
+
+
+
+ AWS > S3 > Bucket > Encryption in Transit
+ AWS > Redshift > Cluster > Encryption in Transit
+ Azure > Storage > Storage Account > Encryption in Transit
+ Azure > PostgreSQL > Server > Encryption in Transit
+
+
+
+The values for this policy are consistent across all resource types. The basic
+form is:
+
+```
+ Skip
+ Check: Disabled
+ Check: Enabled
+ Enforce: Disabled
+ Enforce: Enabled
+```
+
+### Policy Values
+
+Note that policies may not contain all of these possible values depending on the
+implementation, and there may be other values specific to a service/resource.
+Most `Check` policies have a matching `Enforce` policy.
+
+| Value | Description |
+| ------------------- | --------------------------------------------------------------------------------------- |
+| `Skip` | Skip |
+| `Check: Disabled` | Check that encryption is NOT enabled |
+| `Check: Enabled` | Check that encryption is enabled |
+| `Enforce: Disabled` | Check that encryption is disabled. If not, then set it using the right parameter/policy |
+| `Enforce: Enabled` | Check that encryption is enabled. If not, then set it using the right parameter/policy |
+
+
+
+ # AWS > S3 > Bucket > Encryption in Transit
+ - Skip
+ - Check: Disabled
+ - Check: Enabled
+ - Enforce: Disabled
+ - Enforce: Enabled
+
+
diff --git a/docs/using/standard/index.md b/docs/using/standard/index.md
new file mode 100644
index 00000000..fd953eaf
--- /dev/null
+++ b/docs/using/standard/index.md
@@ -0,0 +1,32 @@
+---
+title: Standard Controls
+sidebar_label: Standard Controls
+---
+
+# Standard Controls
+
+Turbot Guardrails [Policies](concepts/policies) and [Controls](concepts/controls) provide a
+flexible framework for auditing and enforcing configuration across hundreds of
+cloud services, networking, OS, and DB tiers. While this model is extensible,
+there are many guardrails that are common and consistent across resources.
+
+| Guardrail | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [Access Logging](using/standard/access-logging) | Monitor and enable access logging on various cloud resources. |
+| [Active](using/standard/active) | Use a variety of criteria to determine if a cloud resource is Active, i.e. number of days the resource has existed, and take action (shutdown, delete, alarm, etc). |
+| [Approved](using/standard/approved) | Verify whether a particular resource is allowed to exist and take an appropriate action if not (shutdown, delete, alarm, etc). |
+| [Audit Logging](using/standard/audit-logging) | Audit Logging configuration tools for cloud resources. |
+| [Budget](using/standard/budget) | A mechanism for tracking current spend against a planned target and taking appropriate action to control cost. |
+| [CMDB](using/standard/cmdb) | Responsible for populating and updating all the attributes for that resource type in the Guardrails CMDB. |
+| [Discovery](using/standard/discovery) | Mechanism by which Guardrails initially adds a resource to the CMDB. |
+| [Encryption at Rest](using/standard/encryption-at-rest) | A mechanism to manage data encryption at rest (i.e. AWS S3 Buckets). |
+| [Encryption in Transit](using/standard/encryption-in-transit) | A mechanism to manage data encryption in transit (i.e. AWS S3 Buckets). |
+| [Public Access](using/standard/public-access) | Configure public access settings on cloud resources. |
+| [Scheduling](using/standard/scheduling) | Define schedules to control cloud resource usage. |
+| [Stacks/ Configured](using/standard/configured) | [DEPRECATED] Manage resource configuration using Terraform. |
+| [Stacks [Native]](using/standard/stacks) | Manage resource configuration using OpenTofu (open source Terraform). |
+| [Tagging](using/standard/tagging) | Tagging of both Guardrails resources, such as a folder, and Cloud Provider resources, such as an Azure Subscription or AWS EC2 instance. |
+| [Trusted Access](using/standard/trusted-access) | Trusted Access allow you to define whom and what you trust and enforce those limitations on your cloud resources. |
+| [Usage](using/standard/usage) | Generate alarms if the number of resources in a specific service exceeds a set amount. |
+
+
diff --git a/docs/using/standard/public-access.md b/docs/using/standard/public-access.md
new file mode 100644
index 00000000..c019ccc5
--- /dev/null
+++ b/docs/using/standard/public-access.md
@@ -0,0 +1,103 @@
+---
+title: Public Access Guardrails
+sidebar_label: Public Access
+---
+
+# Public Access Guardrails
+
+## Overview
+
+As the number of cloud resources in environments expands, it becomes
+increasingly difficult to ensure a tight network perimeter. Public
+Access Guardrails monitor cloud resources for possible misconfigurations, such
+as exposed RDS instances or S3 buckets. Not only can the guardrail generate an
+alarm for immediate action, it can _take_ the action itself (in the RDS example,
+sets the attribute `PubliclyAccessible` on an RDS instance to `False`.)
+
+To Guardrails, a resource is public if it shared in such a way that anyone can
+access it - it is not restricted to a discrete list of entities, or from a
+limited network boundary. Additionally, many cloud resources, such as the RDS
+instance, have an attribute that can be toggled to allow or block public access.
+
+The core Public Access policy has a consistent form:
+`{Provider} > {service} > {resource} > Publicly Accessible`
+
+
+
+ AWS > Redshift > Cluster > Publicly Accessible
+ AWS > RDS > DB Instance > Publicly Accessible
+
+
+
+The basic form of the above policies is as follows:
+
+```
+Skip
+Check: {resource} is not publicly accessible
+Enforce: {resource} is not publicly accessible
+```
+
+
+
+ # AWS > Redshift > Cluster > Cluster Publicly Accessible
+ - Skip
+ - Check: Cluster is not publicly accessible
+ - Enforce: Cluster is not publicly accessible
+
+
+
+### Example: Enforce all RDS instances to be not publicly accessible
+
+RDS instances have a option Publicly Accessible attribute that can be set to
+`Publicly Accessible` at any time. In this example, we want to ensure that no
+RDS instance is set to `Publicly Accessible`, and if it is, change the value
+from `Publicly Accessible` to `Not Publicly Accessible`.
+
+Set the following policy at a level where RDS instances have the setting, either
+at a high level so that instances inherit the policy definition or at the RDS
+instance level itself:
+
+- **AWS > RDS > DB Instance > Publicly Accessible** set to
+ `Enforce: DB Instance is not publicly accessible`.
+
+When Guardrails discovers a RDS instance, the `PubliclyAccessible` will be checked.
+If that attribute is set to `True`, Guardrails will modify the value to `False` with
+no human action required!
+
+### S3 Public Access Block
+
+S3 accounts and buckets have
+[`Public Access Block` settings](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
+that Guardrails can check for misconfigurations. Administrators can choose to change
+the configurations to that which is approved, or simply alarm. In this example,
+all public access settings are configured to true.
+
+#### Account Settings
+
+Set the policy `AWS > S3 > Account > Public Access Block` to
+`Check: Per 'Public Access Block > Settings'`
+
+Set the policy `AWS > S3 > Account > Public Access Block > Settings` to the
+following:
+
+```yaml
+- "Block Public ACLs"
+- "Block Public Bucket Policies"
+- "Ignore Public ACLs"
+- "Restrict Public Bucket Policies"
+```
+
+#### Bucket Settings
+
+Set the policy `AWS > S3 > Bucket > Public Access Block` to
+`Check: Per 'Public Access Block > Settings'`
+
+Set the policy `AWS > S3 > Bucket > Public Access Block > Settings` to the
+following:
+
+```yaml
+- "Block Public ACLs"
+- "Block Public Bucket Policies"
+- "Ignore Public ACLs"
+- "Restrict Public Bucket Policies"
+```
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png
new file mode 100644
index 00000000..599b8efa
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/aws-rds-set-tag.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png
new file mode 100644
index 00000000..de2ce1ab
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-locate-schedule-tag.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png
new file mode 100644
index 00000000..ec4744b6
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-navigate-policies.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png
new file mode 100644
index 00000000..b5c52e34
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-create-setting.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png
new file mode 100644
index 00000000..768c991a
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-create-setting.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png
new file mode 100644
index 00000000..0621e31d
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-name-new-setting.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png
new file mode 100644
index 00000000..97d05930
Binary files /dev/null and b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/guardrails-schedule-tag-select-setting.png differ
diff --git a/docs/using/standard/scheduling/db-scheduling-using-custom-tag/index.md b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/index.md
new file mode 100644
index 00000000..0ec3c297
--- /dev/null
+++ b/docs/using/standard/scheduling/db-scheduling-using-custom-tag/index.md
@@ -0,0 +1,78 @@
+---
+title: Schedule DB Start/Stop with Custom Tag
+sidebar_label: Schedule DB Start/Stop with Custom Tag
+---
+
+# Scheduling DB Instance Start/Stop Using Custom Tag
+
+In this guide, you will:
+
+- Use Guardrails UI to automate the scheduling of AWS RDS DB Instances using Guardrails policies.
+
+Turbot Guardrails' [Instance Scheduling](/guardrails/docs/concepts/guardrails/scheduling#scheduling-in-guardrails) allows you to define pre-scheduled start and stop times for RDS DB Instances at the resource or account level. Automating scheduling ensures instances run only when needed, optimizing costs and improving efficiency. By applying Guardrails policies, you can align instance usage with business hours, workload demands, and compliance requirements, reducing unnecessary compute costs while maintaining operational flexibility.
+
+## Prerequisites
+
+- **Turbot/Admin** permissions at the Turbot resource level.
+- Access to the Guardrails AWS account.
+- Familiarity with Guardrails console and AWS RDS Service.
+
+## Step 1: Navigate to Policies
+
+Log into the Guardrails console with provided local credentials or by using any SAML-based login and select **Policies** from the top navigation menu.
+
+
+
+## Step 2: Locate Schedule Tag Policy
+
+From Policies, search and locate the `AWS > RDS > Instance > Schedule Tag` policy.
+
+
+
+## Step 3: Configure the Schedule Tag Policy
+
+Select **New Policy Setting** from the top right corner.
+
+
+
+Select the resource and choose `Enforce: Schedule per turbot_custom_schedule` setting. Select **Create**.
+
+
+
+## Step 4: Configure Schedule Tag Name Policy
+
+Navigate to the `AWS > RDS > DB Instance > Schedule Tag > Name` policy. Select **New Policy Setting** from the top right corner.
+
+
+
+Select the resource, go to Settings, and enter the tag key to define the schedule for the DB instance. Here we use `turbot_custom_schedule` as the key. Click **Create** to apply the changes.
+
+
+
+## Step 5: Apply Tag to Instance
+
+When the Schedule Tag policy is set to `Enforce: Schedule per turbot_custom_schedule tag`, Guardrails will attempt to use the tag's value for setting the schedule. A tag with the exact key name as `turbot_custom_schedule` and value with the correct expression should be set for the instance.
+
+Ensure the cron job follows the format:
+`{"start": "8 * * MON-FRI", "stop": "16 * * MON-FRI"}`
+and encode it in Base64 as
+`eyJzdGFydCI6ICIqIDggKiAqIE1PTi1GUkkiLCAic3RvcCI6ICIqIDE2ICogKiBNT04tRlJJIn0=`.
+This format is required for RDS tagging.
+
+
+
+## Step 6: Review
+
+- [ ] Verify that the scheduling policy has been successfully applied in the Guardrails console under **Controls**.
+- [ ] Check that the RDS DB instance has been stopped at the scheduled time by reviewing its state in the AWS Console under **RDS > Instances**.
+- [ ] If the instance has not stopped as expected, review the applied tag to ensure it matches the **turbot_custom_schedule** key with the correct cron format.
+- [ ] If issues persist, check the [Guardrails control logs](/guardrails/docs/guides/using-guardrails/troubleshooting/access-control-logs) to identify any policy misconfigurations or errors.
+
+## Troubleshooting
+
+| Issue | Description | Guide |
+|----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|
+| Scheduling policy is not applied | The schedule tag may not be configured correctly or the tag name might not match the expected key. | Verify the policy settings and confirm that the tag name aligns with the defined `Schedule Tag Name` policy. |
+| DB instance is not stopping as per schedule | The cron expression may be incorrect or improperly formatted. | Validate the Base64 encoding of the cron expression and confirm that it is correctly applied to the instance. |
+| Common errors | Common issues that may prevent controls from running include network connectivity problems, permission issues, and API rate limits. These can cause controls to enter an error state. | Refer to [Common Troubleshooting](/guardrails/docs/guides/troubleshooting) for detailed resolution steps. |
+| Further Assistance | If you encounter further issues, please open a ticket with us and attach the relevant information to assist you more efficiently. | [Open Support Ticket](https://support.turbot.com) |
\ No newline at end of file
diff --git a/docs/using/standard/scheduling/index.md b/docs/using/standard/scheduling/index.md
new file mode 100644
index 00000000..12246ed6
--- /dev/null
+++ b/docs/using/standard/scheduling/index.md
@@ -0,0 +1,208 @@
+---
+title: Scheduling in Guardrails
+sidebar_label: Schedule
+---
+
+# Scheduling in Guardrails
+
+**Scheduling** allow Organizations to control costs. Guardrails provides a simple
+and flexible mechanism for starting and stopping cloud resources on a
+pre-defined schedule. Using Guardrails `Schedule` and `Schedule Tag` policies, users
+and administrators can define schedules to control cloud resource usage.
+
+## Setting a Schedule
+
+Guardrails generally solves these with 2 policies:
+
+- `Schedule`: This policy allows to select a start/stop schedule from a
+ pre-defined list of schedules.
+- `Schedule Tag`: This allows to specify a custom schedule using the
+ `turbot_custom_schedule` tag on the resource.
+
+Both policies are set to `Skip` by default. When both the policies are set to
+`Enforce`:
+
+- The policy specified in the `Schedule tag` will be in effect if the
+ `turbot_custom_schedule` tag exists.
+- The policy specified in the `Schedule` will be in effect if the resource does
+ not have a `turbot_custom_schedule` tag.
+
+These policies can be found directly under the supported services in the
+hierarchy:
+
+- `{Provider} > {Service} > {Resource} > Schedule`
+- `{Provider} > {Service} > {Resource} > Schedule Tag`
+
+
+
+ AWS > EC2 > Instance > Schedule
+ AWS > EC2 > Instance > Schedule Tag
+
+
+
+The values available for `Schedule` policy provides a simple mechanism that
+meets most common cases.
+
+
+
+ # AWS > EC2 > Instance > Schedule
+ - Skip
+ - Enforce: Enforce: Business hours (8:00am - 6:00pm on weekdays)
+ - Enforce: Extended business hours (7:00am - 11:00pm on weekdays)
+ - Enforce: Stop for night (stop at 10:00pm every day)
+ - Enforce: Stop for weekend (stop at 10:00pm on Friday)
+
+
+
+### Schedules Description:
+
+| Name | Value | Description |
+| --------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| skip | `Skip` | No scheduling enforced. |
+| businessHours | `Enforce: Business hours (8:00am - 6:00pm on weekdays)` | Guardrails will start instances at 8:00 AM and stop them at 6:00 PM from Mon-Fri. |
+| extendedBusinessHours | `Enforce: Extended business hours (7:00am - 11:00pm on weekdays)` | Guardrails will start instances at 7:00 AM and stop them at 11:00 PM from Mon-Fri. |
+| stopForNight | `Enforce: Stop for night (stop at 10:00pm every day)` | Guardrails will stop instances every night at 10:00 PM and will not power on them back. |
+| stopForWeekend | `Enforce: Stop for weekend (stop at 10:00pm on Friday)` | Guardrails will stop instances at 10:00 PM on Friday night, and will not power on them back. |
+
+## Time Zones
+
+Guardrails will use the resource region to determine the time to start or stop as
+per the schedule.
+
+Consider if the schedule for all EC2 instances in an account is set from 8:00 AM
+to 6:00 PM and there are instances in `us-east-1` and `us-west-1`, the instances
+will not be started together at 8:00 AM ET. The instances in `us-east-1` will be
+started at 8:00 AM ET but the instances in `us-west-1` will start at 8:00 AM PT.
+
+## Starting and Stopping the Instance
+
+Guardrails will automatically start and stop instances according to the schedule
+set.
+
+Consider if the instance is scheduled to run from 8:00 AM to 6:00 PM, and the
+user manually stops the instance at 4:00 PM, Guardrails will not start the instance
+again. This allows users to easily manage the starting and stopping of instances
+outside the schedule.
+
+If the start and stop expression is invalid, Guardrails will not take any actions
+against the instance.
+
+## Scheduling with a Tag
+
+The tagging mechanism is native to the cloud provider to specify a custom
+schedule. When the `Schedule Tag` policy is set to
+`Enforce: Schedule per turbot_custom_schedule tag`, Guardrails will attempt to use
+the tag's value for setting the schedule. A tag with the exact key name as
+`turbot_custom_schedule` and value with correct expression should be set for the
+instance.
+
+The `turbot_custom_schedule` tag may contain:
+
+- `Skip` to exempt the resource from the schedule.
+- A named Schedule (i.e. `businessHours` or `business_hours`)
+- A custom Schedule expression ( AWS and Azure only )
+
+A blank tag value is considered as `invalid`. The control moves to `invalid`
+state and no action is taken.
+
+## Custom Schedule Expressions
+
+A custom schedule expression is to start and/or stop expression included in one
+line of YAML. Neither the start nor stop expressions are required - You can
+schedule stopping but not starting or vice-versa.
+
+For each expression, either a
+[5 Item CRON Expression](https://en.wikipedia.org/wiki/Cron#CRON_expression) or
+[Later.js Text Expression](https://bunkat.github.io/later/parsers.html#text) can
+be used.
+
+```yaml
+# Start at 8:00 AM and stop at 4:00 PM on weekdays
+CRON exp: {"start": "* 8 * * MON-FRI", "stop": "* 16 * * MON-FRI"}
+Text exp: {"start": "at 8:00am every weekday", "stop": "at 4:00pm every weekday"}
+# Start at 8:00 AM on weekdays
+CRON exp: {"start": "* 8 * * MON-FRI"}
+Text exp: {"start": "at 8:00am every weekday"}
+# Stop at 5:00 P.M. on Monday, Wednesday, and Friday
+CRON exp: {"stop": "* 17 * * MON,WED,FRI"} or
+Text exp: {"stop": "at 5:00pm on Mon,Wed and Fri"}
+```
+
+CRON and Text expressions can be used together in the same tag:
+
+```yaml
+# Start at 8:00 AM and stop at 4:00 PM on weekdays
+{ "start": "at 8:00am every weekday", "stop": "* 16 * * MON-FRI" }
+```
+
+**Note**:
+
+- Custom schedule expressions via tagging is not supported in GCP due to limited
+ list of allowed characters (GCP only allows alphanumeric characters, hyphens,
+ and underscores).
+- As a fail-safe in case of temporary Guardrails outage or queueing, the control
+ checks the current time against the start or stop time before it starts or
+ stops the instance. When the current time is more than 1 hour after the start
+ or stop time:
+ - The control will not take any action - it will not start or stop the
+ instance.
+ - The control will go to error state.
+- Named schedule supports Guardrails defined standard lower camel case as well as
+ snake case required to support GCP tagging (labels do not support uppercase
+ characters) such as:
+ - `business_hours` or `businessHours`
+ - `extended_business_hours` or `extendedBusinessHours`
+ - `stop_for_night` or `stopForNight`
+ - `stop_for_weekend` or `stopForWeekend`
+
+### Example 1: AWS > EC2 > Instance > Schedule
+
+Assume that user has multiple EC2 instances in each region of an account. The
+user needs to start all the instances at 8:00 AM and stop them at 6:00 PM on
+weekdays. The following policies have been configured in Guardrails at the account
+level:
+
+- **AWS > EC2 > Instance > Schedule** is set to
+ `Enforce: Business hours (8:00am - 6:00pm on weekdays)`.
+- **AWS > EC2 > Instance > Schedule Tag** is set to `Skip`.
+
+Setting the above policies will ensure that all EC2 instances are started at
+8:00 AM and stopped at 6:00 PM, (local time in each region) Monday through
+Friday.
+
+### Example 2: AWS > EC2 > Instance > Schedule
+
+Assume that the user has an EC2 instance which needs to run 24\*7 and other
+instances should start at 7:00 AM and stop at 11:00 PM on weekdays. The
+following policies have been configured in Guardrails at the account level:
+
+- **AWS > EC2 > Instance > Schedule** is set to
+ `Enforce: Extended business hours (7:00am - 11:00pm on weekdays)`.
+- **AWS > EC2 > Instance > Schedule Tag** is set to `Skip`.
+
+The following policy (exception) has been configured in Guardrails at the instance
+level which needs to run 24\*7:
+
+- **AWS > EC2 > Instance > Schedule Tag** is set to
+ `Enforce: Schedule per turbot_custom_schedule tag`.
+
+The instance has a tag with the key as `turbot_custom_schedule` and a value as
+`skip`.
+
+The above policy settings will ensure that the instance requiring 24\*7 uptime
+remains up, while the other instances are running between 7:00 AM and 11:00 PM
+(local time based on region) and stopped outside of that time window.
+
+### Example 3: GCP > Compute Engine > Instance > Schedule
+
+Assume that the user has multiple VM instances in each region of a project. All
+the instances must be stopped at at 10:00 PM every day. To do this, the
+following policies have been configured in Guardrails at the project level:
+
+- **GCP > Compute Engine > Instance > Schedule** is set to `Skip`.
+- **GCP > Compute Engine > Instance > Schedule Tag** is set to
+`Enforce: Schedule per turbot_custom_schedule tag`.
+
+
+The following label is then applied to the instances that must be stopped:
+`turbot_custom_schedule`: `stop_for_night`
diff --git a/docs/using/standard/scheduling/index.md.og b/docs/using/standard/scheduling/index.md.og
new file mode 100644
index 00000000..1a4e1377
--- /dev/null
+++ b/docs/using/standard/scheduling/index.md.og
@@ -0,0 +1,13 @@
+---
+title: Scheduling
+sidebar_label: Scheduling
+---
+
+# Scheduling
+
+Guardrails [Scheduling](/guardrails/docs/concepts/guardrails/scheduling#scheduling-in-guardrails) feature allows administrators to define specific timeframes during which resources are active, optimizing cloud resource usage and controlling costs. By setting schedules, resources can be automatically started and stopped based on predefined policies, ensuring they run only when necessary. This automation helps prevent unintended resource consumption and aligns operations with organizational policies.
+
+| Section | Description |
+|-------------------|-----------------------------------------------------------|
+| [Schedule DB Start/Stop with Custom Tag](/guardrails/docs/guides/using-guardrails/scheduling/db-scheduling-using-custom-tag) | Configure a custom tag-based scheduling mechanism to automate the start and stop of DB instances. |
+
diff --git a/docs/using/standard/stacks/deploy/aws_iam_stack_control_log_create_top.png b/docs/using/standard/stacks/deploy/aws_iam_stack_control_log_create_top.png
new file mode 100644
index 00000000..7bb4d343
Binary files /dev/null and b/docs/using/standard/stacks/deploy/aws_iam_stack_control_log_create_top.png differ
diff --git a/docs/using/standard/stacks/deploy/aws_iam_stack_controls_ok.png b/docs/using/standard/stacks/deploy/aws_iam_stack_controls_ok.png
new file mode 100644
index 00000000..f1270f47
Binary files /dev/null and b/docs/using/standard/stacks/deploy/aws_iam_stack_controls_ok.png differ
diff --git a/docs/using/standard/stacks/deploy/index.md b/docs/using/standard/stacks/deploy/index.md
new file mode 100644
index 00000000..46721904
--- /dev/null
+++ b/docs/using/standard/stacks/deploy/index.md
@@ -0,0 +1,159 @@
+---
+title: Deploy a Stack
+sidebar_label: Deploy a Stack
+---
+
+# Deploy a Stack
+
+Guardrails can help you centrally deploy, configure, and manage cloud resources using [Guardrails Stacks](/guardrails/docs/concepts/guardrails/stacks). With Guardrails stacks, you describe your configuration in OpenTofu, an open source Terraform implementation, and Guardrails applies it automatically. Guardrails can re-apply the configuration at regular intervals or whenever resources change, enforcing your standards and preventing configuration drift.
+
+In this Guide we will use the [Deploy AWS IAM Stack](https://hub.guardrails.turbot.com/policy-packs/aws_iam_deploy_aws_iam_stack) policy pack to deploy an IAM role via OpenTofu.
+
+The `Deploy AWS IAM Stack` policy pack uses the `AWS > IAM > Stack [Native]` control to create and subsequently manage IAM resources across your AWS accounts . This control targets an AWS account; regardless of what level you set the stack policies, the control actually runs once for each account in scope, [in a single region](/guardrails/docs/concepts/guardrails/stacks#primary-regions). If you need to deploy non-IAM resources, you should use the appropriate service stack (`AWS > VPC > Stack [Native]`, etc) or the general account-level (`AWS > Account > Stack [Native]`) or region-level (`AWS > Region > Stack [Native]`) stack control.
+
+In this example, we will use the example source in the `Deploy AWS IAM Stack` policy pack to deploy a standard IAM role. You can, however, modify the source, variables, and other policies to meet your needs.
+
+
+## Prerequisites
+- Guardrails: [TE](https://turbot.com/guardrails/docs/guides/hosting-guardrails/updating-stacks/update-workspace) 5.47+, with [aws-iam](https://hub.guardrails.turbot.com/mods/aws/mods/aws-iam) mod 5.39+
+- Tools: [git](https://git-scm.com/), [Terraform](https://developer.hashicorp.com/terraform) or [OpenTofu](https://opentofu.org/), [Guardrails CLI credentials](https://turbot.com/guardrails/docs/reference/cli/installation#set-up-your-turbot-guardrails-credentials) configured
+- [One or more AWS accounts imported](/guardrails/docs/guides/aws/import-aws-account)
+
+
+## Step 1: Get Policy Pack
+
+The [Deploy AWS IAM Stack](https://hub.guardrails.turbot.com/policy-packs/aws_iam_deploy_aws_iam_stack) policy pack resides in the `guardrails-samples` repo. Let's clone the repo and change to the directory containing the policy pack code:
+```sh
+git clone https://github.com/turbot/guardrails-samples.git
+cd guardrails-samples/policy_packs/aws/stack/deploy_aws_iam_stack
+```
+
+## Step 2: Review Stack Source
+
+The `policies.tf` contains the policy settings for this policy pack. The `AWS > IAM > Stack [Native] > Source` policy contains the OpenTofu configuration code that should be applied in each account.
+
+In this policy pack, the source is read from the `stack/source.tofu`. This file contains the OpenTofu source that we will use in our example to create our IAM role. The `Source` policy is just standard OpenTofu code that creates an IAM role.
+
+You can, of course, modify, extend, or replace this configuration to meet your specific needs - set up IAM roles, users, policies, trust relationships, etc, all using standard OpenTofu! For the purpose of this guide, however, we will run it as-is.
+
+> [!IMPORTANT]
+> Note that the stack expects to continue to manage any resources that are created by the stack - if you delete a resource from the OpenTofu configuration in the `Source` policy, the stack control will destroy the resource. If you modify a resource in the `Source`, the control will modify that AWS resource accordingly.
+
+
+## Step 3: Set Stack Variables
+
+Like the `Source` policy, the the `AWS > IAM > Stack [Native] > Variables` policy is configured in the `policies.tf`, which in turn reads its value from a file (`stack/variables.auto.tfvars`). The `Variables` policy allows you to pass variable values to the stack; it is essentially a [tfvars](https://opentofu.org/docs/language/values/variables/#variable-definitions-tfvars-files) for the stack control.
+
+Separating the configuration (`Source`) from the data (`Variables`) is
+considered [best practice](/guardrails/docs/concepts/guardrails/stacks#best-practices) when using stacks:
+- This makes the source easily testable outside of Guardrails.
+- You can modify the behavior on a per-instance basis by simply editing the `Variables` - the
+ `Source` does not change.
+- You can separate the OpenTofu logic from the nunjucks logic when you need to use calculated policies. At times, you may wish to use calculated policies to set the configuration based on other data in the Guardrails CMDB. The best way to accomplish this is to us a calculated policy to set `Variables`, and use a static policy for the `Source`; rendering the input variables in nunjucks is much simpler than rendering the whole OpenTofu source.
+
+In this policy pack example, the source defines a single variable named `trusted_principals` that should contain list of principal ARNs that can assume the role. These will be added to the trust policy. Edit the `stack/terraform.tfvars` file to include the ARN for any role or user that you would like to be able to assume this role, and then save the file:
+
+```hcl
+trusted_principals = ["arn:aws:iam::123456789012:root"]
+```
+
+
+## Step 4: Enforce Stack Control
+
+The `AWS > IAM > Stack [Native]` policy is the primary policy for the `AWS > IAM > Stack [Native]` control. This policy determines the enforcement behavior:
+ - `Skip`: Do not run this control
+ - `Check: Configured`: Run the OpenTofu plan and compare the resources against the plan, but *do not modify them*. If the cloud resources match the plan, the control will be in `OK` state. If the resources do not match the plan, the control will go to `Alarm`.
+ - `Enforce: Configured`: Run the OpenTofu plan and compare the resources against the plan, and if the cloud resources do not match the plan, then apply it.
+
+By default, the policy is set to `Check: Configured` in the pack's policy settings. To enable automated enforcements, you can switch these policies settings by adding a comment to the `Check: Configured` value and removing the comment from `Enforce: Configured`:
+
+```hcl
+# AWS > IAM > Stack [Native]
+resource "turbot_policy_setting" "aws_account_stack" {
+ resource = turbot_policy_pack.main.id
+ type = "tmod:@turbot/aws#/policy/types/accountStackNative"
+ #value = "Check: Configured"
+ value = "Enforce: Configured"
+}
+```
+
+> [!TIP]
+> If you prefer to preview the changes first, you can leave the setting in `Check: Configured` when you install the policy pack, then edit and re-apply later when you are ready to enforce
+
+
+## Step 5: Install Policy Pack
+
+> [!IMPORTANT]
+> To run install the the policy pack via Terraform, you must [set up your Turbot Guardrails CLI credentials](https://turbot.com/guardrails/docs/reference/cli/installation#set-up-your-turbot-guardrails-credentials).
+
+When you are ready to install the policy pack, run the Terraform commands to create the policy pack in your workspace:
+
+```sh
+terraform init
+terraform plan
+terraform apply
+```
+
+## Step 6: Attach Policy Pack
+
+> [!IMPORTANT]
+> Attaching this policy pack in Guardrails will result in creation of resources in the target account. However, it is easy to remove those resources later, by setting the contents of the Stack's `Source` policy to `{}`.
+
+Log into your Guardrails workspace and [attach the policy pack to a resource](/guardrails/docs/guides/configuring-guardrails/policy-packs/attach-policy-pack-to-resource).
+
+If this policy pack is attached to a Guardrails folder, its policies will be applied to all accounts and resources in that folder. The policy pack can also be attached to multiple resources.
+
+For more information, please see [Policy Packs](https://turbot.com/guardrails/docs/concepts/policy-packs).
+
+
+## Step 7: View Control Run
+
+In a few seconds, the stack control will run and create an IAM role for each account in scope. You can [view the process logs for the control](/guardrails/docs/guides/using-guardrails/troubleshooting/access-control-logs) (even while its running!) to view the the OpenTofu output.
+
+![AWS > IAM > Stack [Native] -- Process Logs](/images/docs/guardrails/guides/using-guardrails/stacks/deploy/aws_iam_stack_control_log_create_top.png)
+
+
+## Step 8: Review
+
+- [ ] After the stack has run, check the status of the `AWS > IAM > Stack [Native]` controls for the accounts in scope. When the controls have all completed, they should be in the 'OK' state. You can check their status individually from the [control detail page](/guardrails/docs/guides/using-guardrails/console/detail-pages#control-details), or view them all from the **Controls** tab by [searching or filtering on the `AWS > IAM > Stack [Native]` type](/guardrails/docs/guides/using-guardrails/searching-filtering).
+
+![AWS > IAM > Stack [Native] -- Process Logs](/images/docs/guardrails/guides/using-guardrails/stacks/deploy/aws_iam_stack_controls_ok.png)
+
+
+- [ ] Verify that VPCs have been created in the accounts that you specified.
+
+```bash
+$ aws iam get-role --role-name read_only_role --profile dmi-scranton
+{
+ "Role": {
+ "Path": "/",
+ "RoleName": "read_only_role",
+ "RoleId": "AROAQ4Z73DOOGHNJRLKGK",
+ "Arn": "arn:aws:iam::061874051996:role/read_only_role",
+ "CreateDate": "2025-01-22T21:30:52+00:00",
+ "AssumeRolePolicyDocument": {
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "arn:aws:iam::061874051996:root"
+ },
+ "Action": "sts:AssumeRole"
+ }
+ ]
+ },
+ "MaxSessionDuration": 3600,
+ "RoleLastUsed": {}
+ }
+}
+```
+
+## Next Steps
+- Learn more about Guardrails [Stack controls](/guardrails/docs/concepts/guardrails/stacks)
+
+## Troubleshooting
+
+| Issue | Description | Guide |
+|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------
+| Further Assistance | If you continue to encounter issues, please open a ticket with us and attach the relevant information to assist you more efficiently. | [Open Support Ticket](https://support.turbot.com)
\ No newline at end of file
diff --git a/docs/using/standard/stacks/destroy/aws_iam_stack_control_log_delete_preview.png b/docs/using/standard/stacks/destroy/aws_iam_stack_control_log_delete_preview.png
new file mode 100644
index 00000000..ba31658f
Binary files /dev/null and b/docs/using/standard/stacks/destroy/aws_iam_stack_control_log_delete_preview.png differ
diff --git a/docs/using/standard/stacks/destroy/aws_iam_stack_control_log_destroy.png b/docs/using/standard/stacks/destroy/aws_iam_stack_control_log_destroy.png
new file mode 100644
index 00000000..e630d801
Binary files /dev/null and b/docs/using/standard/stacks/destroy/aws_iam_stack_control_log_destroy.png differ
diff --git a/docs/using/standard/stacks/destroy/aws_iam_stack_controls_alarm.png b/docs/using/standard/stacks/destroy/aws_iam_stack_controls_alarm.png
new file mode 100644
index 00000000..0590ffa8
Binary files /dev/null and b/docs/using/standard/stacks/destroy/aws_iam_stack_controls_alarm.png differ
diff --git a/docs/using/standard/stacks/destroy/index.md b/docs/using/standard/stacks/destroy/index.md
new file mode 100644
index 00000000..db41c81b
--- /dev/null
+++ b/docs/using/standard/stacks/destroy/index.md
@@ -0,0 +1,133 @@
+---
+title: Destroy a Stack
+sidebar_label: Destroy a Stack
+---
+
+# Destroy a Stack
+
+Guardrails stack controls help you centrally deploy, configure, and manage cloud-based resources using OpenTofu. This includes destroying the resources if you no longer need them.
+
+In this guide, you will configure stack policies to preview deletion and then delete all stack resources.
+
+## Prerequisites
+- Guardrails: [TE](https://turbot.com/guardrails/docs/guides/hosting-guardrails/updating-stacks/update-workspace) 5.47+, with [aws-iam](https://hub.guardrails.turbot.com/mods/aws/mods/aws-iam) mod 5.39+
+- Tools: [git](https://git-scm.com/), [Terraform](https://developer.hashicorp.com/terraform) or [OpenTofu](https://opentofu.org/), [Guardrails CLI credentials](https://turbot.com/guardrails/docs/reference/cli/installation#set-up-your-turbot-guardrails-credentials) configured
+- [One or more AWS accounts imported](/guardrails/docs/guides/aws/import-aws-account)
+- Install and attach the [Deploy AWS IAM Stack](https://hub.guardrails.turbot.com/policy-packs/aws_iam_deploy_aws_iam_stack) policy pack, per the [Running Stacks guide](/guardrails/docs/guides/using-guardrails/stacks/deploy)
+
+
+## Step 1: Change Primary Policy to Preview Deletion
+
+The `AWS > IAM > Stack [Native]` policy is the primary policy for the `AWS > IAM > Stack [Native]` control. This policy determines the enforcement behavior. To preview the changes before enforcing them, set the policy to the `Check: Configured`.
+
+Edit the `policies.tf` for the [Deploy AWS IAM Stack](https://hub.guardrails.turbot.com/policy-packs/aws_iam_deploy_aws_iam_stack) policy pack. Uncomment the `Check: Configured` value and comment out `Enforce: Configured`:
+
+```hcl
+# AWS > IAM > Stack [Native]
+resource "turbot_policy_setting" "aws_account_stack" {
+ resource = turbot_policy_pack.main.id
+ type = "tmod:@turbot/aws#/policy/types/accountStackNative"
+ value = "Check: Configured"
+ # value = "Enforce: Configured"
+}
+```
+
+## Step 2: Change Stack Source to Empty Plan
+
+The `Source` policy setting for stack control contains the OpenTofu HCL that describes the resources to configure. The stack control manages the OpenTofu state and expects to continue to manage any resources that it creates. As a result, removing a resource from the source will cause it to be destroyed. To destroy *all* resources that are managed by this stack control, simply remove them all from the plan and replace them with an empty plan.
+
+The `policies.tf` file in the policy pack includes a commented-out example value for destroying the stack. Comment the current value, and uncomment the empty source (`value = "{}"`):
+
+```hcl
+# AWS > IAM > Stack [Native] > Source
+resource "turbot_policy_setting" "aws_iam_stack_source" {
+ resource = turbot_policy_pack.main.id
+ type = "tmod:@turbot/aws-iam#/policy/types/iamStackNativeSource"
+
+ # Create a stack using the ./stack/source.tofu
+ # value = file("./stack/source.tofu")
+
+ # Destroy all resources in the stack
+ value = "{}"
+}
+```
+
+## Step 3: Apply Updated Policy Pack
+
+When you are ready to update the policy pack, reapply the Terraform plan in your workspace:
+
+```sh
+terraform apply
+```
+
+
+## Step 4: Preview Deletion in Control Process Log
+
+The `AWS > IAM > Stack [Native]` will run automatically because the policies have changed. Since the AWS configuration no longer matches the `Source`, the controls will go to an `Alarm` state. Because we set the primary control to `Check: Configured`, however, the stack will not delete the resources at this time.
+
+You can check the control status individually from the [control detail page](/guardrails/docs/guides/using-guardrails/console/detail-pages#control-details), or view them all from the **Controls** tab by [searching or filtering on the `AWS > IAM > Stack [Native]` type](/guardrails/docs/guides/using-guardrails/searching-filtering).
+
+
+![AWS > IAM > Stack [Native] -- Process Logs](/images/docs/guardrails/guides/using-guardrails/stacks/destroy/aws_iam_stack_controls_alarm.png)
+
+You can [view the process logs for the control](/guardrails/docs/guides/using-guardrails/troubleshooting/access-control-logs) to view the the OpenTofu output and preview the deletion
+
+![AWS > IAM > Stack [Native] -- Process Logs](/images/docs/guardrails/guides/using-guardrails/stacks/destroy/aws_iam_stack_control_log_delete_preview.png)
+
+
+## Step 5: Change Primary Policy to Enforce Deletion
+
+Now, let's change the `AWS > IAM > Stack [Native]` policy to enforce the configuration and destroy the resources. Edit the `policies.tf` for the `Deploy AWS IAM Stack` policy pack. Uncomment the `Enforce: Configured` value and comment out `Check: Configured`:
+
+```hcl
+# AWS > IAM > Stack [Native]
+resource "turbot_policy_setting" "aws_account_stack" {
+ resource = turbot_policy_pack.main.id
+ type = "tmod:@turbot/aws#/policy/types/accountStackNative"
+ # value = "Check: Configured"
+ value = "Enforce: Configured"
+}
+```
+
+
+## Step 6: Apply Updated Policy Pack
+
+Reapply the Terraform plan in your workspace:
+
+```sh
+terraform apply
+```
+
+
+## Step 7: View Control Run
+
+In a few seconds, the stack control will run and destroy the IAM resources in each account. You can [view the process logs for the control](/guardrails/docs/guides/using-guardrails/troubleshooting/access-control-logs) to view the OpenTofu output and confirm.
+
+![AWS > IAM > Stack [Native] -- Process Logs](/images/docs/guardrails/guides/using-guardrails/stacks/destroy/aws_iam_stack_control_log_destroy.png)
+
+
+## Step 8: Review
+
+- [ ] After the stack has run, check the status of the `AWS > IAM > Stack [Native]` controls for the accounts in scope. When the controls have all finished running, they should be in the 'OK' state. You can check the control status individually from the [control detail page](/guardrails/docs/guides/using-guardrails/console/detail-pages#control-details), or view them all from the **Controls** tab by [searching or filtering on the `AWS > IAM > Stack [Native]` type](/guardrails/docs/guides/using-guardrails/searching-filtering).
+
+
+![AWS > IAM > Stack [Native] -- Process Logs](/images/docs/guardrails/guides/using-guardrails/stacks/deploy/aws_iam_stack_controls_ok.png)
+
+
+- [ ] Verify that VPCs have been destroyed in the accounts that you specified.
+
+```bash
+$ aws iam get-role --role-name read_only_role --profile dmi-scranton
+
+An error occurred (NoSuchEntity) when calling the GetRole operation: The role with name read_only_role cannot be found.
+```
+
+## Next Steps
+
+- Learn more about Guardrails [Stack controls](/guardrails/docs/concepts/guardrails/stacks)
+
+## Troubleshooting
+
+| Issue | Description | Guide |
+|----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|
+| Further Assistance | If you continue to encounter issues, please open a ticket with us and attach the relevant information to assist you more efficiently. | [Open Support Ticket](https://support.turbot.com) |
\ No newline at end of file
diff --git a/docs/using/standard/stacks/import/1-resource-imported.png b/docs/using/standard/stacks/import/1-resource-imported.png
new file mode 100644
index 00000000..4f4ea5dc
Binary files /dev/null and b/docs/using/standard/stacks/import/1-resource-imported.png differ
diff --git a/docs/using/standard/stacks/import/1-resource-updated.png b/docs/using/standard/stacks/import/1-resource-updated.png
new file mode 100644
index 00000000..83220084
Binary files /dev/null and b/docs/using/standard/stacks/import/1-resource-updated.png differ
diff --git a/docs/using/standard/stacks/import/aws-iam-native-stack-configured-enforced.png b/docs/using/standard/stacks/import/aws-iam-native-stack-configured-enforced.png
new file mode 100644
index 00000000..c06a5230
Binary files /dev/null and b/docs/using/standard/stacks/import/aws-iam-native-stack-configured-enforced.png differ
diff --git a/docs/using/standard/stacks/import/aws-iam-native-stack-control.png b/docs/using/standard/stacks/import/aws-iam-native-stack-control.png
new file mode 100644
index 00000000..e4fe7979
Binary files /dev/null and b/docs/using/standard/stacks/import/aws-iam-native-stack-control.png differ
diff --git a/docs/using/standard/stacks/import/aws-iam-native-stack-modifier.png b/docs/using/standard/stacks/import/aws-iam-native-stack-modifier.png
new file mode 100644
index 00000000..18389a0e
Binary files /dev/null and b/docs/using/standard/stacks/import/aws-iam-native-stack-modifier.png differ
diff --git a/docs/using/standard/stacks/import/aws-iam-native-stack-source.png b/docs/using/standard/stacks/import/aws-iam-native-stack-source.png
new file mode 100644
index 00000000..0846bb77
Binary files /dev/null and b/docs/using/standard/stacks/import/aws-iam-native-stack-source.png differ
diff --git a/docs/using/standard/stacks/import/aws-iam-role-search.png b/docs/using/standard/stacks/import/aws-iam-role-search.png
new file mode 100644
index 00000000..48d66012
Binary files /dev/null and b/docs/using/standard/stacks/import/aws-iam-role-search.png differ
diff --git a/docs/using/standard/stacks/import/index.md b/docs/using/standard/stacks/import/index.md
new file mode 100644
index 00000000..df0b4134
--- /dev/null
+++ b/docs/using/standard/stacks/import/index.md
@@ -0,0 +1,438 @@
+---
+title: Import Stack Resource
+sidebar_label: Import Stack Resource
+---
+
+# Importing Stack Resource
+
+In this guide, you'll learn how to:
+
+- Import existing AWS resources into a Guardrails stack (single or multiple resources)
+- Configure the *stack modifier policy* with import statements for individual or bulk imports
+- Update and manage imported resources through Guardrails
+- Apply import configurations at the **folder level** for structured deployment
+- Use `for_each` to import multiple resources in a single operation
+
+Guardrails allows you to bring existing AWS resource(s) under stack management using `import` statements. This enables Guardrails to track and enforce configuration policies on the imported resources.
+
+
+## Prerequisites
+
+- **Turbot/Owner** or **Turbot/Admin** permissions at the required resource level.
+- Knowledge of [Stack [Native]](/guardrails/docs/concepts/guardrails/stacks#stack-controls) Guardrails concepts.
+- Familiarity with [Terraform](https://www.terraform.io/) and [OpenTofu](https://opentofu.org/) and Guardrails [stack](/guardrails/docs/concepts/guardrails/configured) controls.
+- Access to the Guardrails console.
+- A *configured Terraform provider* for AWS.
+- Knowledge of AWS console & [AWS CLI](https://aws.amazon.com/cli/).
+
+
+>[!IMPORTANT]
+> While this guide demonstrates configuring `AWS > IAM > Stack [Native]` in `Enforce` mode, it is strongly recommended to start with `Check` mode first. Check mode allows you to:
+> - Preview the planned changes without modifying resources.
+> - Validate that the import configuration is correct.
+> - Identify any potential issues before making changes.
+> - Gradually transition to enforcement after verifying the expected behavior.
+>
+> Once you've confirmed everything works as intended in Check mode, you can safely switch to Enforce mode.
+
+
+## Step 1: Find Existing Resource
+
+Before importing, identify the AWS IAM role that you want to manage using Guardrails.
+
+Log in to the AWS Console and navigate to the IAM service. Search for the role you want to import. In this example, we'll search for a role named `stack-import-demo-role`.
+
+Select the IAM role name.
+
+To get the role details using [AWS CLI](https://aws.amazon.com/cli/), execute the following command:
+
+```bash
+aws iam get-role --role-name stack-import-demo-role
+```
+
+Expected CLI output:
+
+```json
+{
+ "Role": {
+ "Path": "/",
+ "RoleName": "stack-import-demo-role",
+ "RoleId": "AROA2AWXV46KEICE3ITXA",
+ "Arn": "arn:aws:iam::688720831234:role/stack-import-demo-role",
+ "CreateDate": "2025-04-02T12:20:31+00:00",
+ "AssumeRolePolicyDocument": {
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "ec2.amazonaws.com"
+ },
+ "Action": "sts:AssumeRole"
+ }
+ ]
+ },
+ "Description": "stack-import-demo-role",
+ "MaxSessionDuration": 3600,
+ "RoleLastUsed": {}
+ }
+}
+```
+
+## Step 2: Prepare Import Script
+
+We will make use of the [Import](https://opentofu.org/docs/language/import/) block to import this existing IAM [Role](https://search.opentofu.org/provider/terraform-providers/aws/latest/docs/resources/iam_role#import).
+
+Import block:
+
+```hcl
+import {
+ to = aws_iam_role.stack_import_demo_role
+ id = "stack-import-demo-role"
+}
+```
+> [!NOTE]
+> The identifier you use for a resource's import ID is resource-specific. You can find the required ID in the provider's documentation for the resource you wish to import.
+
+To import the IAM role, update the following policies to import the above resource.
+
+## Step 3: Configure AWS > IAM > Stack [Native] > Modifier Policy
+
+1. Login to Guardrails console and navigate to **Policies** tab.
+2. Search for **AWS > IAM > Stack [Native] > Modifier**.
+3. Select **New Policy Setting**.
+4. Apply the following *Terraform import block* in the policy at the *account* level.
+
+Required policy value:
+
+```
+import {
+ to = aws_iam_role.stack_import_demo_role
+ id = "stack-import-demo-role"
+}
+```
+![Set AWS > IAM > Stack [Native] > Modifier](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-modifier.png)
+
+5. Select **Save** to apply the policy.
+
+## Step 4: Configure AWS > IAM > Stack [Native Policy] > Source Policy
+
+Now set the *AWS > IAM > Stack [Native] > Source* policy with the OpenTofu HCL configuration source code of the resource.
+
+1. Go to **Policies** in the Guardrails console.
+2. Search for *AWS > IAM > Stack [Native] > Source*.
+3. Select **New Policy Setting**.
+4. Apply the following **Terraform import block** in the policy at the **account** level.
+
+Required Terraform configuration:
+
+```hcl
+resource "aws_iam_role" "stack_import_demo_role" {
+ name = "stack-import-demo-role"
+ description = "stack-import-demo-role"
+ assume_role_policy = jsonencode({
+ Version = "2012-10-17"
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Sid = ""
+ Principal = {
+ Service = "ec2.amazonaws.com"
+ }
+ },
+ ]
+ })
+}
+```
+![Set AWS > IAM > Stack [Native] > Source](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-source.png)
+
+Select **Update** to apply the policy.
+
+## Step 5 Configure AWS > IAM > Stack [Native] Policy
+
+Now set the *AWS > IAM > Stack [Native]* policy to enforce mode to import and manage the IAM resource. This ensures Guardrails takes control of the resource's lifecycle management.
+
+1. Go to **Policies** in the Guardrails console.
+2. Search for **AWS > IAM > Stack [Native]** policy.
+3. Click **New Policy Setting**.
+4. Select "**Enforce: Configured**"
+5. Select **Create** to create the policy setting.
+
+![Set AWS > IAM > Stack [Native]](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-configured-enforced.png)
+
+## Step 6: Validate the AWS > IAM > Stack [Native] Stack Control
+
+Once the necessary policies are set, the **AWS > IAM > Stack [Native]** stack will execute and import the resource. If everything goes well, you should see the below log message "Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed."
+
+![Set AWS > IAM > Stack [Native]](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/aws-iam-native-stack-control.png)
+
+View control logs to check the if the stack successfully imported the resource.
+
+![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/1-resource-imported.png)
+
+## Step 7: Manage Stack with Updates
+
+Now that the resource is imported to the Stack. You can manage the resource using the Stack. Try updating the **AWS > IAM > Stack [Native] > Source** and the changes should reflect in the AWS IAM Role.
+
+Let's update by adding a tag to the IAM role.
+
+1. Go to **AWS > IAM > Stack [Native] > Source** in the Guardrails console
+2. Update the source with the following code to add tags to the IAM Role:
+
+
+```hcl
+resource "aws_iam_role" "stack_import_demo_role" {
+ name = "stack-import-demo-role"
+ description = "stack-import-demo-role"
+ assume_role_policy = jsonencode({
+ Version = "2012-10-17"
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Sid = ""
+ Principal = {
+ Service = "ec2.amazonaws.com"
+ }
+ },
+ ]
+ })
+
+ tags = {
+ environment = "development" ### Add the Tags block
+ }
+}
+```
+
+If everything goes well, you should see the following log message, `Apply complete! Resources: 0 added, 1 changed, 0 destroyed.`
+
+![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/1-resource-updated.png)
+
+## Importing Multiple Resources
+
+Follow the same process, but instead use `for_each` to iterate through multiple resources. Here are the policies and required values:
+
+### Step 1: Configure AWS > IAM > Stack [Native] > Modifier
+
+```hcl
+import {
+ to = aws_iam_role.demo_roles[each.key]
+ id = each.key
+ for_each = var.role_names
+}
+```
+
+### Step 2: Configure AWS > IAM > Stack [Native] > Source
+
+```hcl
+variable "role_names" {
+ description = "List of IAM role names to import"
+ type = set(string)
+}
+
+resource "aws_iam_role" "demo_roles" {
+ for_each = var.role_names
+
+ name = each.value
+ description = each.value
+
+ assume_role_policy = jsonencode({
+ Version = "2012-10-17"
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Sid = ""
+ Principal = {
+ Service = "ec2.amazonaws.com"
+ }
+ },
+ ]
+ })
+}
+```
+
+### Step 3: Configure AWS > IAM > Stack [Native] > Variables
+
+> [!TIP]
+> - The variables block is required to define the expected input variables that will be used in the Source configuration in above policy.
+> - In this case, we define role_names as a set of strings that will be used by the for_each loop to import multiple IAM roles.
+> - The each.value in the Source configuration references these role names to set both the name and description of each IAM role.
+
+
+```hcl
+role_names = [
+ "stack-import-demo-roles-1",
+ "stack-import-demo-roles-2",
+ "stack-import-demo-roles-3"
+]
+```
+
+### Step 4: Configure AWS > IAM > Stack [Native]
+
+Now enforce the changes, select, `Enforce: Configured`.
+
+If everything goes well, you should see the following log message, `Apply complete! Resources: 3 imported, 0 added, 0 changed, 0 destroyed.`
+
+![AWS > IAM > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/multiple-resources-imported.png)
+
+## Importing Regional Stack Resources
+
+
+
+
+
+Similar to the above, regional Stack [Native] controls are used when you need to manage resources that are region-specific in AWS. This is important because:
+
+>[!TIP]
+> - Many AWS resources like S3 buckets, EC2 instances, and VPCs are region-specific and need to be managed in the context of their region.
+> - Regional stacks allow you to enforce configurations consistently across specific regions rather than account-wide.
+> - You can target resources in specific regions while leaving other regions untouched.
+> - The controls automatically handle region-specific API endpoints and credentials.
+
+Here's how to use Regional Stack [Native] to import region-specific resources using below policies with an example to import a S3 bucket `stack-import-demo-bucket`
+
+When importing S3 buckets:
+- S3 buckets exist in specific regions even though they have global names
+- Using Regional Stack [Native] ensures the import and management happens in the correct region
+- You can apply different configurations per region if needed
+- The stack will properly handle region-specific bucket policies and configurations
+
+### Step 1: AWS > Region > Stack [Native] > Modifier
+
+```hcl
+import {
+ to = aws_s3_bucket.example
+ id = "stack-import-demo-bucket"
+}
+```
+
+### Step 2: AWS > Region > Stack [Native] > Source
+
+```hcl
+resource "aws_s3_bucket" "example" {
+ bucket = "stack-import-demo-bucket"
+}
+```
+
+### Step 3: AWS > Region > Stack [Native]
+
+To enforce, set the policy to `Enforce: Configured`at the region where you want to import the bucket.
+
+> [!NOTE]
+> If this bucket exists in all regions and you want to import all such buckets, then set this policy at the account level.
+
+If everything goes well, you should see the following log message, `Apply complete! Resources: 3 imported, 0 added, 0 changed, 0 destroyed.`
+
+![AWS > Region > Stack [Native] -- Control Logs](/images/docs/guardrails/using/policies/guardrails/standard/stacks/import/s3_bucket_imported.png)
+
+
+## Resource Stack [Native]
+
+Resource Stack [Native] controls allow you to manage resources that are associated with a specific parent resource. Resource stacks target individual resources, allowing you to configure standard resources that should be associated with them. Resource stacks will run for every resource of that type, and will run whenever new resources of that type are discovered. More info at [Stack [Native]](/guardrails/docs/concepts/guardrails/stacks#stack-controls) Guardrails concepts.
+
+For example, with S3 buckets:
+- Each bucket can have its own lifecycle policies, replication rules, and access settings
+- The Resource Stack [Native] control runs once for each bucket in scope
+- You can customize configurations per bucket while maintaining central management
+- The stack automatically handles dependencies between the bucket and its associated resources
+
+
+
+Let us walk through an example use-case. To add a lifecycle policy for all the S3 buckets within a `region/account/folder` to delete log files older than a year. This applies to all objects under the **logs/** prefix (i.e. logs/filename.log)
+
+**Use Case:** Delete S3 Logs Older Than One Year
+
+> [!NOTE]
+> Please refer to [Stack [Native] Best Practices](/guardrails/docs/concepts/guardrails/stacks#best-practices)
+
+We will use a [calculated policy](/guardrails/docs/concepts/policies/calculated-faq#calculated-policies-faq) for the variables.
+
+### Step 1: Configure AWS > S3 > Bucket > Stack [Native] > Variables
+
+GraphQL Input Query
+
+```hcl
+{
+ resource {
+ Name: get(path:"Name")
+ }
+}
+```
+
+Nunjucks Template
+
+```hcl
+bucket_name = "{{ $.resource.Name }}"
+```
+
+### Step 2: Configure AWS > S3 > Bucket > Stack [Native] > Modifier
+
+```hcl
+import {
+ to = aws_s3_bucket.example
+ id = var.bucket_name
+}
+```
+
+### Step 3: Configure WS > S3 > Bucket > Stack [Native] > Source
+
+```hcl
+variable "bucket_name" {
+ description = "Name of the bucket"
+ type = string
+}
+
+resource "aws_s3_bucket" "example" {
+ bucket = var.bucket_name
+}
+
+resource "aws_s3_bucket_lifecycle_configuration" "logs" {
+ bucket = var.bucket_name
+
+ rule {
+ id = "delete-logs-after-365-days"
+ status = "Enabled"
+
+ filter {
+ prefix = "logs/"
+ }
+
+ expiration {
+ days = 365
+ }
+ }
+}
+```
+
+### Step 4: Configure AWS > S3 > Bucket > Stack [Native]
+
+To enforce, set the policy to `Enforce: Configured` at the `region/account/folder`.
+
+## Review
+
+- [ ] Verify the imported resource shows up in the Related tab of the Stack [Native].
+
+
+
+## Next Steps
+
+- [Import Multiple Stack Resources](/guardrails/docs/guides/using-guardrails/stacks/import/import-multiple-stack-resources)
+- [Deploy a Stack](/guardrails/docs/guides/using-guardrails/stacks/deploy)
+- [Destroy a Stack](/guardrails/docs/guides/using-guardrails/stacks/destroy)
+
+## Troubleshooting
+
+| Issue | Description | Guide |
+| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------- |
+| **Resource Not Found** | Import failed due to an incorrect Role name. | Verify the Role name in AWS Console. |
+| **Permission Denied** | Guardrails lacks the required permissions. | Ensure IAM roles are correctly assigned. |
+| **Import Fails in Terraform** | The resource is already managed. | Remove the resource from Terraform state before re-importing. |
+
+
+
+
+
+
diff --git a/docs/using/standard/stacks/import/multiple-resources-imported.png b/docs/using/standard/stacks/import/multiple-resources-imported.png
new file mode 100644
index 00000000..f7fc6eaf
Binary files /dev/null and b/docs/using/standard/stacks/import/multiple-resources-imported.png differ
diff --git a/docs/using/standard/stacks/import/s3_bucket_imported.png b/docs/using/standard/stacks/import/s3_bucket_imported.png
new file mode 100644
index 00000000..2f5b2fb1
Binary files /dev/null and b/docs/using/standard/stacks/import/s3_bucket_imported.png differ
diff --git a/docs/using/standard/stacks/import/validate-stack-native-resource.png b/docs/using/standard/stacks/import/validate-stack-native-resource.png
new file mode 100644
index 00000000..7a56d626
Binary files /dev/null and b/docs/using/standard/stacks/import/validate-stack-native-resource.png differ
diff --git a/docs/using/standard/stacks/index.md b/docs/using/standard/stacks/index.md
new file mode 100644
index 00000000..d2b539d0
--- /dev/null
+++ b/docs/using/standard/stacks/index.md
@@ -0,0 +1,257 @@
+---
+title: Stack [Native] Guardrails
+sidebar_label: Stack [Native]
+---
+
+# Stack [Native] Guardrails
+
+## Overview
+
+Guardrails **Stack [Native]** controls provide a mechanism for managing resource configuration using [OpenTofu](https://opentofu.org), an open-source implementation of Terraform. You can define your configuration using standard Terraform HCL, and Guardrails will apply your configuration at regular intervals or when resources are modified, enforcing your standards and preventing configuration drift.
+
+
+## Stack Controls
+
+Guardrails provides many `Stack [Native]` controls in multiple mods. These stacks all behave the same way and have the same policy structure, but they serve different purposes:
+- Account/Project/Subscription stacks allow you to manage resources that are global to the account.
+- Regional stacks allow you to manage regionally scoped resources.
+- Service stacks let you organize and separate your stack configurations by the types of resources that they manage. The service stacks target the region or resource group for regional services and the "global" region for global services like IAM.
+- Resource stacks target individual resources, allowing you to configure standard resources that should be associated with them. Resource stacks will run for every resource of that type, and will run whenever new resources of that type are discovered.
+
+
+
+
+
+ Stack |
+ Target |
+ Intended Purpose |
+
+
+
+
+ AWS > Account > Stack [Native] |
+ Account |
+ Account-level settings and global services like Route53 and CloudFront. |
+
+
+ AWS > Region > Stack [Native] |
+ Region |
+ Regional resources, like Lambda Functions, EC2 instances, SNS Topics, etc. |
+
+
+ AWS > IAM > Stack [Native] |
+ Account |
+ IAM resources, like standard users, roles, policies, and identity providers. |
+
+
+ AWS > VPC > Stack [Native] |
+ Region |
+ VPC resources to set your standard "landing zone" VPCs - subnets, security groups, gateways, etc. |
+
+
+ AWS > S3 > Bucket > Stack [Native] |
+ Bucket |
+ Resources to associate with buckets such as lifecycle policies or replication configuration |
+
+
+ AWS > VPC > VPC > Stack [Native] |
+ VPC |
+ Standard VPC resources that belong in every VPC, like security groups, gateways, NACLs, etc. |
+
+
+ Azure > Subscription > Stack [Native] |
+ Subscription |
+ Subscription-level settings and global services |
+
+
+ Azure > Network > Virtual Network > Stack [Native] |
+ Virtual Network |
+ Standard network resources that belong in every Virtual Network |
+
+
+ GCP > Project > Stack [Native] |
+ Project |
+ Project-level settings and global services |
+
+
+
+
+
+
+## Example: Standard IAM policy
+
+Many organizations create standard IAM resources in their accounts, such as:
+- Standard IAM policies required for your organization
+- Roles, users, and policies for 3rd party applications such as monitoring or security tools
+- Identity providers, roles, users, and groups for federated authentication via SAML or OpenID Connect
+
+You can use the `AWS > IAM > Stack [Native]` control to simplify the creation and management of these resources across all of your AWS Accounts. Simply define the configuration for your IAM resources using OpenTofu. Guardrails can run the stack in all your accounts to create and manage these IAM resources. As your requirements change, simply modify the `Stack [Native] > Source` policy, and Guardrails will deploy the changes. If you add new AWS Accounts, Guardrails automatically runs your stack, making it consistent and compliant with your standards.
+
+
+In this example, we will deploy a standard IAM policy via the `AWS > IAM > Stack [Native]` control. This control targets the `AWS > Account`; It will run once for each account in scope. You can create these policy settings on an individual account, but more commonly, you will set them on a parent folder.
+
+
+### Step 1: Set the Source policy
+
+Create a policy setting for the `AWS > IAM > Stack [Native] > Source` policy on an account or folder. Enter the OpenTofu configuration in the `AWS > IAM > Stack [Native] > Source` policy. For example:
+
+```hcl
+resource "aws_iam_policy" "main" {
+ # Boundary policy name that will be applied to the IAM role.
+ name = "myBoundaryPolicy"
+ path = "/"
+ description = "Guardrails Managed Boundary policy to prevent actions from unapproved CIDRs"
+ policy = jsonencode({
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": "*"
+ "Resource": "*",
+ "Condition": {
+ "IpAddress": {
+ "aws:SourceIp": [
+ "10.0.0.0/8",
+ "172.16.0.0/12",
+ "192.168.0.0/16"
+ ]
+ }
+ }
+ }
+ ]
+ })
+}
+```
+
+### Step 2: Enforce the stack
+
+Create a policy setting for the `AWS > IAM > Stack [Native]` policy on an account or folder. Set the policy value to `Enforce: Configured`. Guardrails will apply the OpenTofu source, creating the custom role and policy and then assigning the policy to the role!
+
+
+
+## Stack Policies
+
+Stack behavior is controlled by the `Stack [Native]` policy and sub-policies.
+
+| Policy | Description
+|---------------------------------------|-----------------------------------------------------------------------
+| **Stack [Native]** | Determine whether to run the stack in check mode, enforce mode, or skip
+| **Stack [Native] > Source** | The OpenTofu HCL configuration source code that should be applied
+| **Stack [Native] > Modifier** | Additional OpenTofu HCL configuration source code that should be applied, typically used for per-instance customization such as [importing resources](https://opentofu.org/docs/language/import/)
+| **Stack [Native] > Variables** | `.tfvar`-style variable overrides
+| **Stack [Native] > Secret Variables** | `.tfvar`-style variable overrides for sensitive variables
+
+The `Stack [Native]` primary policy determines what action the control will take:
+
+| Value | Description
+| ----------------------- | -----------------------------------------------------------------------------------
+| **Skip** | The control will not run
+| **Check: Configured** | An OpenTofu plan will be generated. If the planned configuration does not match the current configuration, the control will alarm.
+| **Enforce: Configured** | An OpenTofu plan will be generated. If the planned configuration does not match the current configuration, the control will apply the configuration.
+
+The `Source` policy contains the OpenTofu configuration code that should be applied.
+
+Note that the stack expects to continuously manage any resources that were created in the stack - if you delete a resource from the OpenTofu configuration in the `Source` policy, the stack control will destroy the resource. For example, if you wish to destroy all the objects created by the stack, set the `Source` policy to `{}`, and leave the `Stack` policy set to `Enforce: Configured`.
+
+Like the The `Source` policy, the `Modifier` policy may also contain OpenTofu HCL code. While it may contain any HCL code, its purpose is to allow you to separate instance-specific configuration code, such as [resource import blocks](https://opentofu.org/docs/language/import/), from your standard source definition.
+
+
+The `Variables` policy can contain variable definitions in OpenTofu HCL, in the same way that they would use a [.tfvars file](https://opentofu.org/docs/language/values/variables/#variable-definitions-tfvars-files).
+
+Like `Variables`, the `Secret Variables` policy can contain variable definitions. This policy will be marked `secret` in Guardrails, and is meant for parameters that are sensitive or confidential.
+
+The `Variables` and `Secret Variables` policies are merged into a single set of variables that are passed as a `tfvars` file to OpenTofu by the stack control.
+
+The `Variables` and `Secret Variables` are not required, however separating the variables from the configuration will simplify using stacks in Guardrails:
+
+- As a best practice, you should avoid using a calculated policy in the `Source`. If you need to get context dynamically from the CMDB, you should instead use calculated policies to set the `Variables` or `Secret Variables` policy.
+ - This makes the source easily testable outside of Guardrails, as it is not a calculated policy
+ - Rendering the input variables in nunjucks is much simpler than rendering the whole OpenTofu source
+ - This allows you to separate your OpenTofu HCL logic in the `Source` policy from the nunjucks logic in the `Variables` policies
+
+- Using map or object variables allows you to create a map policy in the `Variables` with configuration information that can be used in all child resource stacks. If a new item is added, the variables can be updated without updating the OpenTofu configuration.
+
+
+
+## Drift Detection
+
+Native stacks offer 2 mechanisms for drift detection and correction:
+- Run the stack at regular intervals
+- Run the stack when the resources it manages are modified
+
+Native stacks can create any OpenTofu resources, and do not require that the resource that create must exist in the CMDB. This makes them more flexible and extensible than the old model, however it does have implications for trigger updates; if the resources are not in the CMDB, then the stack can't be triggered when they are modified and drift will occur. To mitigate this, we will offer an ability to run the stack at regular intervals.
+
+You may also choose to trigger the stack to run when resources change, but:
+- It will only work for supported resources (Guardrails has very good coverage though)
+- The resource types must be available in the installation. This means you must install the mods that contain the resources in your stacks, and you must enable CMDB for those resources.
+
+
+### Drift Detection Policies
+Drift detection behavior is controlled by the following sub-policies.
+
+| Policy | Description
+|---------------------------------------|-----------------------------------------------------------------------
+| **Stack [Native] > Drift Detection** | Specify the mechanism for drift detection.
+| **Stack [Native] > Drift Detection > Interval** | Specify the interval at which to run the stack, in minutes.
+
+
+The `Stack [Native] > Drift Detection` policy allows you to specify the mechanism for drift detection. You may run the stack at regular intervals to keep the resources up to date, and/or automatically trigger the stack to run whenever a resource that it created is modified. Note that resource triggering will only be available for resources that exist in the Guardrails CMDB; you may install the supporting mods and enable the CMDB for those resources.
+
+
+The `Stack [Native] > Drift Detection > Interval ` allows you to specify the interval at which to run the stack, in minutes. The default is `1440` (Once a day).
+
+
+## OpenTofu Version
+
+The `Stack [Native] > Version` policy allows you to select which OpenTofu version Turbot should use for the stack.
+
+The policy supports semver semantics, allowing you to use new versions automatically, or to pin to specific versions, depending on your preference.
+
+By default this policy uses the global default value set in the `Turbot > Stack > Native Stack Version [Default]` policy. The shared default allows you to change only a single setting to change your default version, but still migrate versions over time on a per-stack basis.
+
+Guardrails native stack containers include standard cloud [providers](https://opentofu.org/docs/language/providers/). These providers are bundled in the container image, so in practice, the provider versions are tied to the OpenTofu version. The following versions are currently supported:
+
+### Supported Versions
+| OpenTofu | AWS Provider | AzureRM Provider | Google Provider | AzureAD Provider
+|-----------|--------------|------------------|-----------------|-----------------
+| **1.8.3** | 5.72.0 | 4.9.0 | 6.10.0 | 3.0.2
+
+
+
+## Best practices
+- Avoid using calculated policies for the `Stack > Source`. Instead, calculate the `Variables` and/or `Secret Variables` and use Terraform functions and control structures for conditional logic, iteration, etc. This makes the stack easier to maintain and test.
+- Use `Secret Variables` for inputs that are secrets, like passwords or keys.
+- Use `Variables` for non-sensitive information. Using `Secret Variables` for non-sensitive inputs creates unnecessary operational complexity, as you will not be able to read the existing values.
+
+
+## Primary Regions
+
+Stack controls that target the account run in a single "primary" region. For AWS account-level stacks (`AWS > Account > Stack [Native]` and `AWS > IAM > Stack [Native]`), this region varies depending on the partition:
+
+| Partition Name | Partition Id | Region
+|----------------|--------------|---------------
+| Commercial | `aws` | `us-east-1`
+| GovCloud | `aws-gov` | `us-gov-west-1`
+| China | `aws-cn` | `cn-north-1`
+
+The `GCP > Project > Stack [Native]` stack runs in `us-east1`.
+
+
+## Stack [Native] Controls vs Legacy Stacks & Configured Controls
+
+`Stack [Native]` controls will replace the older [Stack and Configured controls](/guardrails/docs/concepts/guardrails/configured). Native stacks provide the following benefits over the previous stacks:
+
+- Native stacks use open source [OpenTofu](https://opentofu.org/). When we initially implemented the older stack controls, Terraform was open source. Hashicorp has subsequently [moved to a closed licensing model](https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license) which prohibits us from using newer versions. OpenTofu is open-source, community-driven, and managed by the Linux Foundation!
+- The previous stack controls only supported specific resources, and mods for all resource types in the stack definitions needed to be installed in Guardrails. Native stacks do not have this requirement (though resource level drift detection is only available for resources in the CMDB).
+- Previous stack controls were not 100% compatible with Terraform; some meta-arguments like `count` and `for_each` were not supported. Native stacks are fully compatible with OpenTofu - if you can run it on your machine, you can run it in Guardrails.
+
+### Feature Comparison Chart
+
+| Feature | Stack/Configured | Stack [Native]
+|-------------------------|---------------------------|----------------------------
+| **Version** | Terraform 0.15 and earlier | OpenTofu 1.8.3 and later
+| **Triggering** | Resource update | Resource update, interval
+| **CMDB Required?** | Yes | No
+| **Resources Supported** | Only resources supported in Guardrails | Any resource supported by the [provider](https://opentofu.org/docs/language/providers/)
+| **Support for `count`, `for_each` **| No | Yes
+
diff --git a/docs/using/standard/stacks/index.md.og b/docs/using/standard/stacks/index.md.og
new file mode 100644
index 00000000..4a5ac4ae
--- /dev/null
+++ b/docs/using/standard/stacks/index.md.og
@@ -0,0 +1,15 @@
+---
+title: Stacks
+sidebar_label: Stacks
+---
+
+# Stacks
+
+Guardrails [Stack controls](/guardrails/docs/concepts/guardrails/stacks) provides a mechanism for managing resource configuration using OpenTofu, an open-source implementation of Terraform. Guardrails can apply your configuration at regular intervals, or whenever resources change, enforcing your standards and preventing configuration drift.
+
+| Section | Description
+|-------------------|-------------------------------------------
+| [Deploy a Stack](/guardrails/docs/guides/using-guardrails/stacks/deploy) | Setting up a stack control to create and manage resources.
+| [Destroy Stack](/guardrails/docs/guides/using-guardrails/stacks/destroy) | Destroying resources managed by a stack.
+| [Import Resource](/guardrails/docs/guides/using-guardrails/stacks/import) | Import existing resources into stack.
+
diff --git a/docs/using/standard/stacks/network-stack/index.md b/docs/using/standard/stacks/network-stack/index.md
new file mode 100644
index 00000000..5b6fec34
--- /dev/null
+++ b/docs/using/standard/stacks/network-stack/index.md
@@ -0,0 +1,397 @@
+---
+title: Network Stacks
+sidebar_label: Network Stacks
+---
+
+# Managing Network Configurations with Stacks
+
+> [!IMPORTANT]
+> This document pertains to the legacy `Stack` and `Configured` controls. Consider migrating to the [Stack [Native] Controls](/guardrails/docs/concepts/guardrails/stacks) for [even more power and flexibility!](/guardrails/docs/concepts/guardrails/stacks#stack-native-controls-vs-legacy-stacks--configured-controls).
+
+
+
+## Overview
+
+Network controls and guardrails have been an essential part of Guardrails since
+Turbot Guardrails version 1.0. And with good reason - the security and reliability of the
+network are fundamentally important. The network is one of the foundational
+components on which your infrastructure (and therefore your application!)
+relies.
+
+The cloud has shifted the networking paradigm from static, hardware-driven
+configurations to dynamic, software driven approaches. In modern cloud
+platforms, entire networks can be built and destroyed in minutes, including
+routers, gateways, firewalls, VPNs... The challenge is balancing security and
+consistency with speed and agility -- How can you harness the agility of
+software-defined networks while ensuring that these networks comply with
+standards? How can you keep dozens, hundreds, or even thousands of disparate
+virtual networks configured consistently?
+
+Guardrails can help you centrally deploy, configure, and manage your cloud-based
+networks using Guardrails Stacks. WIth Guardrails network stacks, you describe your
+network configuration in Terraform, and Guardrails manages deploying and updating
+your configuration. Guardrails' real-time event triggering prevents drift by
+re-running your stack whenever a configured item is changed.
+
+### A note for Turbot Guardrails V3 customers
+
+Existing V3 customers will notice that the V5 stack capability is a departure
+from the approach in V3 and earlier.
+
+The first version of Guardrails provided a VPC configuration feature that allowed
+customers to define IP ranges and other basic configuration parameters, and
+Guardrails would create and manage those VPCs. This automated, prescriptive approach
+was useful to customers, but as more and more VPC features were added, it was
+not flexible enough for many customers.
+
+The V3 approach was more guardrail focused. V3 did not provide a mechanism for
+creating VPCs, but instead concentrated on simplifying the ongoing management of
+increasingly complex and varied configurations.
+[V3 Network Guardrails](https://support.turbot.com/hc/en-us/articles/360012565452-Network-Guardrails-for-AWS)
+defined six network security zones, and managed routing and gateway
+configuration based on theses subnet types. This abstraction provided a common
+language for network routing and simplified defining configurations.
+
+But cloud networks continue to evolve, and Guardrails must evolve with them. While
+the types of network security zones have not fundamentally changed, the ways of
+implementing and connecting them has expanded. Technologies like Transit
+Gateways and VPC sharing provide new options for existing configurations, as
+well as entirely new capabilities. As the cloud has matured, our customers have
+matured with it. Our customers often already have very specific, defined
+standards for their network configuration. The problem that Guardrails needs to
+solve has shifted from "How can Guardrails help me configure and manage **_a_**
+secure, standard VPC Configuration" to "How can Guardrails help me configure and
+manage **_my_** secure, standard VPC Configuration." We believe that network
+stack controls are the answer.
+
+## Managing Network Configurations with AWS > VPC > Stack
+
+The `AWS > VPC > Stack` control is a
+[custom stack](concepts/guardrails/configured#user-defined-stacks) that you can
+use to create and subsequently manage VPCs and related objects across your AWS
+accounts and regions.
+
+The stack control can automate the deployment and ongoing updates to your
+standard VPCs. Note that this control is NOT intended to manage existing VPCs
+that were created outside of the stack. You should leverage the other Guardrails
+standard [guardrails](concepts/guardrails) (`Active`, `Approved`, `Tags`, etc)
+to manage these resources.
+
+### Example: Setting up a VPC Network Stack
+
+The `AWS > VPC > Stack` control targets an AWS region; regardless of what level
+you set the stack policies, the control actually runs once for each region in
+scope.
+
+While you can set policies and exceptions down to the region level, you likely
+want to set your policies as high in the Guardrails Hierarchy as possible as the
+goal is to manage as many VPCs from a single, consistent configuration. It is
+often useful to test your policies at the region level before setting them at a
+higher scope, however.
+
+#### Scenario
+
+In this example, we will define a simple, standard VPC configuration with 2
+public and 2 private subnets. Because we would like to deploy this across all of
+our accounts, will use a map variable to define what ip ranges are assigned to
+which regions for each account.
+
+In this example, we will assume:
+
+- We have 4 AWS Accounts with the following AWS account aliases:
+ - gnb-aaa
+ - gnb-bbb
+ - gnb-ccc
+ - gnb-ddd
+- We have imported all accounts into a single folder named **Goliath**
+- We only use 2 regions:
+ - us-east-1
+ - us-west-2
+
+#### Set the `AWS > VPC > Stack > Source`
+
+The `Stack > Source` policy contains the Terraform configuration code that
+should be applied. This policy can contain any standard Terraform HCL. This
+Terraform configuration will be run in each region that is in scope.
+
+Note that the stack expects to continue to manage any resources that were
+created in the stack - if you delete a resource from the Terraform configuration
+in the `Source` policy, the stack control will destroy the resource. If you
+modify a resource in the `Source`, the control will modify that AWS resource
+accordingly.
+
+If you wish to destroy all the objects created by the stack, set the `Source`
+policy to `{}`, and leave the `Stack` policy set to `Enforce: Configured`.
+
+For this example, we will set the `Source` policy on the parent folder
+(**Goliath**), as we would like the configuration to apply to all accounts below
+that folder. We will navigate to the folder, and set the
+`AWS > VPC > Stack > Source` to:
+
+```hcl
+
+ variable "tag_prefix" {
+ default = ""
+ }
+
+######
+variable "ip_assignments" {
+ type = "map"
+ # map of ip addresses to assign, by account-alias, then region
+ default = {
+ account-1-us-east-1 = "1.2.3.0/24"
+ account-1-us-east-2 = "1.2.4.0/24"
+ account-2-us-west-1 = "1.2.5.0/24"
+ account-3-eu-east-1 = "1.2.6.0/24"
+ }
+}
+
+ ######
+
+# Declare the data source
+data "aws_availability_zones" "available" {
+ state = "available"
+}
+
+data "aws_region" "current" {}
+
+data "aws_iam_account_alias" "current" {}
+
+# VPC
+resource "aws_vpc" "turbot_default" {
+ cidr_block = "${lookup(var.ip_assignments, "${data.aws_iam_account_alias.current.account_alias}-${data.aws_region.current.name}")}"
+ instance_tenancy = "default"
+ enable_dns_support = true
+ enable_dns_hostnames = true
+
+ tags = {
+ Name = "${var.tag_prefix}${data.aws_iam_account_alias.current.account_alias}-${data.aws_region.current.name}"
+ }
+}
+
+resource "aws_subnet" "turbot_public_0" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+ availability_zone = "${data.aws_availability_zones.available.names[0]}"
+ cidr_block = "${cidrsubnet(aws_vpc.turbot_default.cidr_block, 2, 0)}"
+ tags = {
+ Name = "${var.tag_prefix}public-${data.aws_availability_zones.available.names[0]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+resource "aws_subnet" "turbot_public_1" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+ availability_zone = "${data.aws_availability_zones.available.names[1]}"
+ cidr_block = "${cidrsubnet(aws_vpc.turbot_default.cidr_block, 2, 1)}"
+ tags = {
+ Name = "${var.tag_prefix}public-${data.aws_availability_zones.available.names[1]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+resource "aws_subnet" "turbot_private_0" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+ availability_zone = "${data.aws_availability_zones.available.names[0]}"
+ cidr_block = "${cidrsubnet(aws_vpc.turbot_default.cidr_block, 2, 2)}"
+ tags = {
+ Name = "${var.tag_prefix}private-${data.aws_availability_zones.available.names[0]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+resource "aws_subnet" "turbot_private_1" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+ availability_zone = "${data.aws_availability_zones.available.names[1]}"
+ cidr_block = "${cidrsubnet(aws_vpc.turbot_default.cidr_block, 2, 3)}"
+ tags = {
+ Name = "${var.tag_prefix}private-${data.aws_availability_zones.available.names[1]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+# IGW
+resource "aws_internet_gateway" "turbot_igw" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+ tags = {
+ Name = "${var.tag_prefix}igw-${data.aws_iam_account_alias.current.account_alias}-${data.aws_region.current.name}"
+ }
+}
+
+# NAT GW
+
+resource "aws_eip" "nat_eip_0" {
+ tags = {
+ Name = "${var.tag_prefix}eip-nat-${data.aws_availability_zones.available.names[0]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+resource "aws_eip" "nat_eip_1" {
+ tags = {
+ Name = "${var.tag_prefix}eip-nat-${data.aws_availability_zones.available.names[1]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+resource "aws_nat_gateway" "turbot_nat_gw_0" {
+ allocation_id = "${aws_eip.nat_eip_0.id}"
+ subnet_id = "${aws_subnet.turbot_public_0.id}"
+ depends_on = ["aws_internet_gateway.turbot_igw" ]
+
+ tags = {
+ Name = "${var.tag_prefix}natgw-${data.aws_availability_zones.available.names[0]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+
+}
+
+resource "aws_nat_gateway" "turbot_nat_gw_1" {
+ allocation_id = "${aws_eip.nat_eip_1.id}"
+ subnet_id = "${aws_subnet.turbot_public_1.id}"
+ depends_on = ["aws_internet_gateway.turbot_igw" ]
+
+ tags = {
+ Name = "${var.tag_prefix}natgw-${data.aws_availability_zones.available.names[1]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+
+}
+
+# Public route table / routes
+resource "aws_route_table" "public" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+
+ route {
+ cidr_block = "0.0.0.0/0"
+ gateway_id = "${aws_internet_gateway.turbot_igw.id}"
+ }
+ tags = {
+ Name = "${var.tag_prefix}public-rtb-${data.aws_iam_account_alias.current.account_alias}-${data.aws_region.current.name}"
+ }
+}
+
+resource "aws_route_table_association" "public_0" {
+ subnet_id = "${aws_subnet.turbot_public_0.id}"
+ route_table_id = "${aws_route_table.public.id}"
+}
+
+resource "aws_route_table_association" "public_1" {
+ subnet_id = "${aws_subnet.turbot_public_1.id}"
+ route_table_id = "${aws_route_table.public.id}"
+}
+
+# private Route Tables / Routes
+
+resource "aws_route_table" "private_0" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+ tags = {
+ Name = "${var.tag_prefix}private-rtb-${data.aws_availability_zones.available.names[0]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+
+resource "aws_route" "private_natgw_0" {
+ route_table_id = "${aws_route_table.private_0.id}"
+ destination_cidr_block = "0.0.0.0/0"
+ nat_gateway_id = "${aws_nat_gateway.turbot_nat_gw_0.id}"
+}
+
+resource "aws_route_table_association" "private_0" {
+ subnet_id = "${aws_subnet.turbot_private_0.id}"
+ route_table_id = "${aws_route_table.private_0.id}"
+}
+
+##
+
+resource "aws_route_table" "private_1" {
+ vpc_id = "${aws_vpc.turbot_default.id}"
+
+ tags = {
+ Name = "${var.tag_prefix}private-rtb-${data.aws_availability_zones.available.names[1]}-${data.aws_iam_account_alias.current.account_alias}"
+ }
+}
+resource "aws_route" "private_natgw_1" {
+ route_table_id = "${aws_route_table.private_1.id}"
+ destination_cidr_block = "0.0.0.0/0"
+ nat_gateway_id = "${aws_nat_gateway.turbot_nat_gw_1.id}"
+}
+
+resource "aws_route_table_association" "private_1" {
+ subnet_id = "${aws_subnet.turbot_private_1.id}"
+ route_table_id = "${aws_route_table.private_1.id}"
+}
+
+
+####### Outputs ###
+
+output "vpc_id" {
+ value = "${aws_vpc.turbot_default.id}"
+}
+
+output "public_subnets" {
+ value = ["${aws_subnet.turbot_public_0.id}", "${aws_subnet.turbot_public_1.id}"]
+}
+
+output "private_subnets" {
+ value = ["${aws_subnet.turbot_private_0.id}", "${aws_subnet.turbot_private_1.id}"]
+}
+
+```
+
+Note that the `Source` policy is just standard Terraform code. We use data
+providers to determine which account and region we are running in, and use that
+information to look up configuration information specific to this account/region
+in variables defined at the top of the configuration. This configuration will
+create a VPC, 2 public subnets, 2 private subnets, and 2 NAT gateways (in 2
+different availability zones), an internet gateway, and the appropriate routing
+tables.
+
+You can, of course, extend this configuration to meet your specific needs - set
+up VPN connectivity, create VPC endpoints, security groups, transit gateway
+attachments, etc, all using standard Terraform!
+
+#### Set the `AWS > VPC > Stack > Variables`
+
+The `Variables` and `Secret Variables` policies allow you to set variables to
+use when running the Terraform configuration. The `Variables` and
+`Secret Variables` policies are merged into a single set of variables that are
+passed as a
+[tfvars](https://www.terraform.io/docs/configuration/variables.html#variable-definitions-tfvars-files)
+file to Terraform by the stack control.
+
+In our `Source` policy, we look up the IP assignment information specific to
+this account/region in the `ip_assignments` variable defined at the top of the
+configuration. We will override this value in the `Variables` policy with the IP
+address assignments for our accounts/regions.
+
+For this example, we will set the `Variables` policy on the parent folder
+(**Goliath**), as we would like the configuration to apply to all accounts below
+that folder. We will navigate to the folder, and set the
+`AWS > VPC > Stack > Variables` to:
+
+```hcl
+## map of ip addresses to assign, by account-alias, then region
+ip_assignments = {
+ gnb-aaa-us-east-1 = "10.100.8.0/22"
+ gnb-aaa-us-west-2 = "10.104.8.0/22"
+ gnb-bbb-us-east-1 = "10.108.8.0/22"
+ gnb-bbb-us-west-2 = "10.112.8.0/22"
+ gnb-ccc-us-east-1 = "10.116.8.0/22"
+ gnb-ccc-us-west-2 = "10.120.8.0/22"
+ gnb-ddd-us-east-1 = "10.124.8.0/22"
+ gnb-ddd-us-east-2 = "10.128.8.0/22"
+}
+```
+
+Separating the configuration (`Source`) from the data (`Variables`) is
+considered best practice when using stacks:
+
+- This makes the source easily testable outside of Guardrails.
+- You can add new VPC IP assignments by simply editing the `Variables` - the
+ `Source` does not change.
+- At times, you may wish to use calculated policies to set the configuration
+ based on other data in the Guardrails CMDB. Rendering the input variables in
+ nunjucks is much simpler than rendering the whole Terraform source.
+
+#### Set the `AWS > VPC > Stack`
+
+At this point, we are ready to enable the stack control.
+
+For this example, we will set the `Variables` policy on the parent folder
+(**Goliath**), as we would like the configuration to apply to all accounts below
+that folder. We will navigate to the folder, and set the `AWS > VPC > Stack` to
+`Enforce: Configured`.
+
+In a few seconds, the stack control will run for each region in scope, and will
+create new VPCs in each of the regions of all accounts in scope!
diff --git a/docs/using/standard/standard_controls.png b/docs/using/standard/standard_controls.png
new file mode 100644
index 00000000..ae77b08d
Binary files /dev/null and b/docs/using/standard/standard_controls.png differ
diff --git a/docs/using/standard/tagging/calc-policy.png b/docs/using/standard/tagging/calc-policy.png
new file mode 100644
index 00000000..fa8e7a55
Binary files /dev/null and b/docs/using/standard/tagging/calc-policy.png differ
diff --git a/docs/using/standard/tagging/dynamic-tags.md b/docs/using/standard/tagging/dynamic-tags.md
new file mode 100644
index 00000000..cfa82218
--- /dev/null
+++ b/docs/using/standard/tagging/dynamic-tags.md
@@ -0,0 +1,358 @@
+---
+title: Dynamic Tags
+sidebar_label: Dynamic Tags
+---
+
+# Tag Resources with Dynamic Metadata
+
+Org control objectives often include the need to tag resources with metadata of the resource or dynamic metadata from other sources, such as a
+[Guardrails File](/guardrails/docs/guides/configuring-guardrails/files). This guide will go over three different scenarios:
+
+- Tag an S3 bucket with an attribute in the bucket metadata.
+- Tag an S3 bucket with attributes stored in a Guardrails File.
+- Tag an S3 bucket with attributes from a
+ [Guardrails Folder](concepts/resources/hierarchy#folders)
+
+
+
+## Initial Configuration
+
+For our initial configuration, let us assume we have an AWS S3 bucket called
+`turbot-test-bucket`.
+
+Assume that we have also set the policy
+[AWS > S3 > Bucket > Tags](/guardrails/docs/mods/aws/aws-s3/policy#aws--s3--bucket--tags)
+to `Check: Tags are correct`. This means that Guardrails will only alarm and not
+change any tags on the resource itself.
+
+Each example will be defining a calculated policy using
+[AWS > S3 > Bucket > Tags > Template](https://hub.guardrails.turbot.com/mods/aws/policies/aws-s3/bucketTagsTemplate).
+
+## Tagging Resources with CMDB Metadata
+
+This example will use the following S3 bucket metadata:
+
+
+ S3 bucket metadata
+
+```yaml
+AccelerateConfiguration:
+Status: Suspended
+Acl:
+Grants:
+ - Grantee:
+ ID: 6eb349968d9164c06c9c28123456sdfoadjf09a9ee8f79cb36157431f5e9713f
+ Type: CanonicalUser
+ Permission: FULL_CONTROL
+Owner:
+ ID: 6eb349968d9164c06c9c28123456sdfoadjf09a9ee8f79cb36157431f5e9713f
+Cors: {}
+CreationDate: '2020-07-20T17:07:32.000Z'
+Encryption:
+ServerSideEncryptionConfiguration:
+ Rules:
+ - ApplyServerSideEncryptionByDefault:
+ KMSMasterKeyID: alias/turbot/default
+ SSEAlgorithm: 'aws:kms'
+ BucketKeyEnabled: false
+Lifecycle:
+- Filter:
+ And:
+ Prefix: test
+ Tags:
+ - Key: test
+ Value: value
+ ID: new-rule
+ NoncurrentVersionTransitions: []
+ Status: Enabled
+ Transitions:
+ - Days: 9999
+ StorageClass: STANDARD_IA
+LocationConstraint: us-east-2
+Logging: {}
+Name: turbot-test-bucket
+NotificationConfiguration: {}
+Payer: BucketOwner
+Policy:
+Statement:
+ - Action: 's3:GetBucketAcl'
+ Effect: Allow
+ Principal:
+ Service: cloudtrail.amazonaws.com
+ Resource: 'arn:aws:s3:::turbot-test-bucket'
+ Sid: AWSCloudTrailAclCheck20150319
+ - Action: 's3:PutObject'
+ Condition:
+ StringEquals:
+ 's3:x-amz-acl': bucket-owner-full-control
+ Effect: Allow
+ Principal:
+ Service: cloudtrail.amazonaws.com
+ Resource: 'arn:aws:s3:::turbot-test-bucket/AWSLogs/12345678012/*'
+ Sid: AWSCloudTrailWrite20150319
+ - Action: 's3:*'
+ Effect: Allow
+ Principal:
+ Service: config.amazonaws.com
+ Resource:
+ - 'arn:aws:s3:::turbot-test-bucket'
+ - 'arn:aws:s3:::turbot-test-bucket/*'
+ Sid: ConfigRule
+ - Action: 's3:*'
+ Condition:
+ Bool:
+ 'aws:SecureTransport': 'false'
+ Effect: Deny
+ Principal: '*'
+ Resource:
+ - 'arn:aws:s3:::turbot-test-bucket'
+ - 'arn:aws:s3:::turbot-test-bucket/*'
+ Sid: MustBeEncryptedInTransit
+Version: '2012-10-17'
+PolicyStatus:
+IsPublic: false
+PublicAccessBlock:
+BlockPublicAcls: false
+BlockPublicPolicy: false
+IgnorePublicAcls: false
+RestrictPublicBuckets: false
+Replication: {}
+Tags:
+- Key: Owners
+ Value: john Doe
+- Key: Test
+ Value: ''
+- Key: environment
+ Value: DEV
+Versioning:
+MFADelete: Disabled
+Status: Suspended
+Website: {}
+```
+
+
+
+
+
+In this example, we want to ensure that the payer is a tag on the bucket, i.e.
+the key:value pair `payer`:`BucketOwner`. Let's start with the GraphQL query:
+
+```graphql
+{
+ resource {
+ payer: get(path: "Payer")
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+This gives us the following output:
+
+```json
+{
+ "resource": {
+ "region": "us-east-2",
+ "turbot": {
+ "tags": {
+ "Test": "",
+ "Owners": "john Doe",
+ "environment": "DEV"
+ }
+ }
+ }
+}
+```
+
+Note that we can use this `get: path()` function to call a specific attribute.
+This example uses `Payer` and we call the attribute `payer`.
+
+Finally, to implement the logic, we use this nunjucks template:
+
+```nunjucks
+{%- if $.resource.turbot.tags['payer'] == $.resource.payer -%}
+[]
+{%- else -%}
+- payer: '{{ $.resource.payer }}'
+{%- endif -%}
+```
+
+The `AWS > S3 > Bucket > Tags` control will go into alarm if there does not
+exist a tag `payer` with the value defined on the bucket metadata, and will
+state that their should be that tag on the bucket.
+
+### Tagging Resources with Guardrails File Data
+
+A Guardrails File is simply a json data structure that can be referenced in
+calculated policies. Let's assume the file has the following data:
+
+```json
+{
+ "dev": "john doe",
+ "prod": "greg duke",
+ "qa": "gen gomes"
+}
+```
+
+The aka of this file is `owner_env`. It is also possible to use the Guardrails ID,
+which is of the format `220880720738517`.
+
+We will be using the same calculated policy
+[AWS > S3 > Bucket > Tags > Template](https://hub.guardrails.turbot.com/mods/aws/policies/aws-s3/bucketTagsTemplate).
+as in the first example. In the query we need to not only call the resource tags
+but also the Guardrails file.
+
+```graphql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+ tag_file: resource(id: "owner_env") {
+ data
+ }
+}
+```
+
+In this scenario, tag the resource with the name of the owner of the particular
+environment (each environment owner is defined in the File). As an
+administrator, assume we know that there can only be three values for the key
+`environment`: `qa`, `prod`, and `dev`.
+
+```nunjucks
+{%- for key, value in $.resource.turbot.tags -%}
+
+
+{%- if not $.resource.turbot.tags.environment -%}
+- environment: "missing"
+{%- elif $.resource.turbot.tags.environment == 'dev' -%}
+- owner: {{ $.tag_file.data.dev }}
+{%- elif $.resource.turbot.tags.environment == 'qa' -%}
+- owner: {{ $.tag_file.data.qa }}
+{%- elif $.resource.turbot.tags.environment == 'prod' -%}
+- owner: {{ $.tag_file.data.prod }}
+{%- else -%}
+- environment: "invalid_value"
+{%- endif -%}
+```
+
+As always, first check for the existence of the key. If the key does exist,
+check it's value to see if it matches with any of the key terms, and if it does,
+create the necessary new tag. Lastly, if the environment key does exist but it
+is not qa, prod, or dev, output that the environment key has an invalid value.
+
+### Tagging Resources with Guardrails Folder Metadata
+
+This example will detail how to pull tagging information about a Guardrails folder
+and apply that tag to all resources within it. The query response will include
+the folder that is "closest to the resource" in the Guardrails hierarchy. For
+example, if there existed folder A and folder B, with B inside of folder A, and
+a resource was inside folder B, the hierarchy would show **A > B > Resource**,
+and folder B is considered "closest."
+
+```graphql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+ folder {
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+Assume the tag `environment`:`qa` exists on the folder and this must be applied
+to all resources within it. This one is easy - we can just echo the folder tag
+value to set it.
+
+```nunjucks
+{%- if $.folder.turbot.tags.environment -%}
+- environment: {{ $.folder.turbot.tags.environment }}
+{%- else -%}
+- environment: "folder missing tag"
+{%- endif -%}
+```
+
+If the environment tag does not exist on the folder, simply output a static
+value stating there is no tag.
+
+### Tagging Resources with User who Created Resource (and Creation Time)
+
+Guardrails can automate the tagging of resources with the user who created it and
+the time at which it was created. Like these other examples, this will be a
+calculated policy, but this time our query will be a bit different!
+
+Query:
+
+```graphql
+{
+ resource {
+ creator: notifications(filter: "sort: version_id limit:1") {
+ items {
+ actor {
+ identity {
+ turbot {
+ title
+ }
+ }
+ }
+ turbot {
+ createTimestamp
+ }
+ }
+ }
+ }
+}
+```
+
+An example response might look as follows:
+
+```json
+{
+ "resource": {
+ "creator": {
+ "items": [
+ {
+ "actor": {
+ "identity": {
+ "turbot": {
+ "title": "John Doe"
+ }
+ }
+ },
+ "turbot": {
+ "createTimestamp": "2020-09-28T18:42:20.990Z"
+ }
+ }
+ ]
+ }
+ }
+}
+```
+
+In the template, we simply reference the two objects then use the nunjucks
+template to force everything lower case, as well as replacing unapproved
+characters.
+
+Template:
+
+```nunjucks
+{%- set owner = $.resource.creator.items[0].actor.identity.turbot.title -%}
+created_by: "{{ owner | lower | replace(" ", "_") }}"
+
+{%- set create_time = $.resource.creator.items[0].turbot.createTimestamp %}
+created_time: "{{ create_time | lower | replace(".", "_") | replace(":", "-") }}"
+```
+
+This policy can be applied to any resource. Be sure to test the GraphQL query to
+ensure that it is responding with the correct info! Also notice that in the
+second `set` variable line, we remove the trailing `-` to ensure that the
+`created_time` key is a new line and parsable by the policy.
diff --git a/docs/using/standard/tagging/index.md b/docs/using/standard/tagging/index.md
new file mode 100644
index 00000000..f3729833
--- /dev/null
+++ b/docs/using/standard/tagging/index.md
@@ -0,0 +1,197 @@
+---
+title: Tags in Guardrails
+sidebar_label: Tags
+---
+
+# Tags in Guardrails
+
+Tags are a fundamental concept for many organizations. Identification of cloud
+resources across many accounts is trivial, but only if tagging processes are in
+place and understood by users. With Guardrails, we can enforce tags on various
+resource types. This includes, but is not limited to, checking for the following
+scenarios:
+
+- Ensuring all resources have at least one tag.
+- Ensuring all tags are lower (or upper) case to allow for automation.
+- Specific keys must exist.
+- Specific keys AND values must exist.
+
+Guardrails can both check and remediate resources that do not have compliant tags.
+Metadata about the resource stored in CMDB or information from a
+[Guardrails File](/guardrails/docs/guides/configuring-guardrails/files) can be referenced when checking and applying tags.
+
+If you are not familiar with Calculated Policies, check out the
+[Calculated Policies FAQ](concepts/policies/calculated-faq) as well as our
+[7 minute lab](7-minute-labs/calc-policy).
+
+## Tagging Cloud Resources
+
+For any cloud resource that can be tagged, an associated policy in Guardrails exists
+(note that tags are called "Labels" in Google Cloud):
+
+- `AWS > Service > Resource > Tags`
+- `Azure > Service > Resource > Tags`
+- `GCP > Service > Resource > Labels`
+
+For example, if an administrator wanted to enforce tags on an AWS EC2 instance,
+the policy would become `AWS > EC2 > Instance > Tags`. This set of policies is
+the driving mechanism to determine if tags should be checked for violations by
+Guardrails, and if action should be taken when a resource is found to not have the
+correct set of tags.
+
+## Tag Value Reserved Strings
+
+Guardrails uses tag values of `null` and `undefined` as indicators that a tag key
+should be removed. If a user sets these reserved keywords as tag values, in some
+cases this can result in unintentional tag key removal. For this to happen, the
+following conditions must be met:
+
+- Tags policy is set to `Enforce`.
+- The tag key most be specified in the Tags Template policy.
+- The tag value set by the user is `null` or `undefined`. If the tag keys aren't
+ specified in the template, then Guardrails will ignore them.
+
+## Tagging Templates
+
+Tagging templates allow flexibility in assigning tags for various resources
+across a wide number of accounts. A policy will check all resources within the
+scope for the correct tags. If a tag exists but should not, it is removed. Tags
+that do not exist but should will be added by Guardrails.
+
+A basic tagging template is a YAML list with static values. Consider the policy
+`AWS > EC2 > Instance > Tags > Template`. In this example, instances are
+required to have a `Cost Center`, `Environment`, and `Account Owner` tags. These
+tags do not change throughout the account, and thus the policy can be set at the
+folder level of which the AWS account is a child of (recommended) or on the AWS
+account within Guardrails.
+
+```yaml
+- Cost Center: "Security"
+- Environment: "Dev"
+- Account Owner: "John Doe"
+```
+
+If the policy `AWS > EC2 > Instance > Tags` is set to `Enforce: Set tags`,
+Guardrails will take action on any EC2 instance without the required set of tags.
+
+## Add, Update or Remove Tags using Tagging Templates
+
+Adding, updating or removing tags can be done in a straightforward way. The tags
+template asserts which tags that should or should not be set on the resource.
+NOTE: If a resource has tags that are not described in the Tags Template, then
+Guardrails will ignore those tags. Only tags defined in the template are processed.
+
+### Add
+
+To add a new tag, specify it in the template. If the tag already exists on the
+resource, then Guardrails will update that tag to the specified value.
+
+```yaml
+- SomeTag: ReallyImportantTagValueV1
+```
+
+### Remove Tag
+
+To remove a tag, set the value to `null`.
+
+```yaml
+- SomeTag: null
+```
+
+### Update Tag Value
+
+Updating a tag value on a resource is done by updating the tag value in the tags
+template. The approach is the same as adding a new tag.
+
+```yaml
+- SomeTag: ReallyImportantTagValueV2
+```
+
+### Update Tag Key
+
+To change a tag key, one must destroy the old tag then create a new one. Use the
+approach described in "Remove Tag" to proceed.
+
+```yaml
+- SomeTag: null
+- SomeNewTag: NewReallyImportantTagValue
+```
+
+## Dynamic Tagging
+
+Using the tagging template example above, it becomes trivial to enforce a set of
+tags on a variety of resources. However, many organizations have more complex
+tagging requirements, such as not only ensuring that AWS IAM users have an email
+tag, but also validating that the tag is in fact an email.
+
+Continuing to use the above example, the
+`AWS > EC2 > Instance > Tags > Template` in the new policy view has the option
+to `Switch to calculated mode`. The policy window then changes to allow users to
+write custom [Calculated Policies](/guardrails/docs/concepts/policies/calculated-faq).
+
+### Examples
+
+For all the examples, use the following query in the calculated policy, using
+`AWS > EC2 > Instance > Tags > Template`:
+
+```grapqhql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+### Alarm if key does not exist
+
+If the key `cost_center` does not exist, output `cost_center`:`missing_tag`.
+Else, simply output a blank array. Guardrails will alarm if the tag is not correct.
+
+Template:
+
+```nunjucks
+{%- if 'cost_center' not in $.resource.turbot.tags -%} {# Check for the key cost_center #}
+- cost_center: 'missing_tags'
+{%- else -%}
+[]
+{%- endif -%}
+```
+
+### Alarm if key:value pair does not exist
+
+If the key:value pair `cost_center`:`Security` does not exist, output
+`cost_center`:`Security`. Else, simply output a blank array. Guardrails will alarm
+if the tag is not correct.
+
+Template:
+
+```nunjucks
+{%- if 'costcenter' not in $.resource.turbot.tags-%} {# Check for the key cost_center #}
+- cost_center: 'Security'
+{%- elif 'Security' != $.resource.turbot.tags.costcenter -%} {# Check for the value of key cost_center #}
+- cost_center: 'Security'
+{%- else -%}
+[]
+{%- endif -%}
+```
+
+### Alarm if a Resource has no Tags
+
+A simple use case for Guardrails tagging controls is to check resources for the
+existence of tags.
+
+Template:
+
+```nunjucks
+{# Checks if there are any tags #}
+{% if $.resource.turbot.tags | length == 0 -%}
+"tag_compliance": "untagged_resource" {# temp placeholder to mark it untagged #}
+{% else -%}
+[] {# if there are tags, do nothing #}
+{%- endif %}
+```
+
+If there are tags, the template policy returns a blank array (`[]`). If there
+are no tags, the tagging control will alarm saying that a new tag must be added.
diff --git a/docs/using/standard/tagging/require-keys.md b/docs/using/standard/tagging/require-keys.md
new file mode 100644
index 00000000..a385dc1d
--- /dev/null
+++ b/docs/using/standard/tagging/require-keys.md
@@ -0,0 +1,173 @@
+---
+title: Require Keys
+sidebar_label: Require Keys
+---
+
+# Requiring Tag Keys with Guardrails Tagging Guardrails
+
+Requiring specific tags on cloud resources is a fundamental control objective
+for many organizations. This guide will overview some basics when it comes to
+verifying specific keys exist. The first scenario is requiring a key with any
+value except `null`, and the second is requiring specific keys with specific
+values.
+
+
+
+## Initial Configuration
+
+For our initial configuration, let us assume we have an AWS S3 bucket called
+`turbot-test-bucket` with the following tags:
+
+| Key | Value |
+| ----------- | -------- |
+| Test | `null` |
+| environment | DEV |
+| owner | john Doe |
+
+Assume that we have also set the policy
+[AWS > S3 > Bucket > Tags](/guardrails/docs/mods/aws/aws-s3/policy#aws--s3--bucket--tags)
+to `Check: Tags are correct`. This means that Guardrails will only alarm and not
+change any tags on the resource itself.
+
+## Tagging with Guardrails
+
+For both scenarios, we will be setting a calculated policy using
+[AWS > S3 > Bucket > Tags > Template](/guardrails/docs/mods/aws/aws-s3/policy#aws--s3--bucket--tags--template).
+
+We will also use the same GraphQL query for both calculated policies:
+
+```graphql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+### Require Specific Keys with Any Value Except `null`
+
+This is a simple test as an empty string is functionally equivalent to `null`,
+so we only need to test for the existence of a value. This can be accomplished
+via the following Nunjucks template:
+
+```nunjucks
+{%- if $.resource.turbot.tags['Test'] -%}
+[]
+{%- else -%}
+- Test: not approved
+{%- endif -%}
+```
+
+Note that this test is case sensitive! We can, however, reference our
+[guide that ignores casing on tags](concepts/guardrails/tagging/tag-casing) and
+adjust our template:
+
+```nunjucks
+{%- set approved = 'no' -%}
+
+{%- for key,value in $.resource.turbot.tags -%}
+ {%- if r/test/.test(key | lower) -%}
+ {%- if $.resource.turbot.tags[key] %}
+ {%- set approved = 'yes' -%}
+ {%- endif %}
+ {%- endif -%}
+{%- endfor -%}
+
+{%- if approved == 'no' -%}
+- Test: not approved
+{%- else -%}
+[]
+{%- endif -%}
+```
+
+Applying these template policies will check the S3 bucket for the tag `Test`,
+with the bottom template ignoring casing, and the control will alarm if the tag
+`Test` has a `null` value or the key `Test` does not exist.
+
+### Require Specific Keys with Specific Values
+
+This is very similar to the above example, and in fact we can reuse the
+templates with a very slight modification. Let's assume we want to check for the
+key: value pair `Test`:`example`.
+
+For the case sensitive scenario:
+
+```nunjucks
+{%- if $.resource.turbot.tags['Test'] == 'example' -%}
+[]
+{%- else -%}
+- Test: not approved
+{%- endif -%}
+```
+
+To ignore casing in the key:
+
+```nunjucks
+{%- set approved = 'no' -%}
+
+{%- for key,value in $.resource.turbot.tags -%}
+ {%- if r/test/.test(key | lower) -%}
+ {%- if $.resource.turbot.tags[key] == 'example' %}
+ {%- set approved = 'yes' -%}
+ {%- endif %}
+ {%- endif -%}
+{%- endfor -%}
+
+{%- if approved == 'no' -%}
+- Test: not approved
+{%- else -%}
+[]
+{%- endif -%}
+```
+
+Further, we can ignore casing in the key _and_ value:
+
+```nunjucks
+{%- set approved = 'no' -%}
+
+{%- for key,value in $.resource.turbot.tags -%}
+ {%- if r/test/.test(key | lower) -%}
+ {%- if r/example/.test(value | lower) %}
+ {%- set approved = 'yes' -%}
+ {%- endif %}
+ {%- endif -%}
+{%- endfor -%}
+
+{%- if approved == 'no' -%}
+- Test: not approved
+{%- else -%}
+[]
+{%- endif -%}
+```
+
+### Require a Specific Selection of Values
+
+This example will allow an array of values that a key can be, and if the key
+either does not exist or the value is not in the list, we will set the value to
+be `Non-Compliant Tag`. This example is very similar to our
+[Calculated Policy 7 minute lab](7-minute-labs/calc-policy).
+
+Our query will remain the same as in the other examples:
+
+```graphql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+For the sake of this example, we simply want to have the key `Environment` set
+to `QA`, `Prod`, `Dev`, or `Temp`. If the existing value is none of those, set
+the tag value to `Non-Compliant Tag`. Note how we can use logical expressions
+within the quotes. This can be expanded upon to as many tags as required.
+
+```nunjucks
+Environment: "{% if $.bucket.turbot.tags['Environment'] in ['Dev', 'QA', 'Prod', 'Temp'] %}{{ $.bucket.turbot.tags['Environment'] }}{% else %}Non-Compliant Tag{% endif %}"
+```
diff --git a/docs/using/standard/tagging/tag-casing.md b/docs/using/standard/tagging/tag-casing.md
new file mode 100644
index 00000000..cc52cf5c
--- /dev/null
+++ b/docs/using/standard/tagging/tag-casing.md
@@ -0,0 +1,156 @@
+---
+title: Tag Casing
+sidebar_label: Tag Casing
+---
+
+# Resource Tagging and Handling Key:Value Casing
+
+Upper and lower case characters can lead to false positives. With Guardrails, we can
+use calculated policies to check for tags regardless of casing, reducing false
+positives and allowing users and administrators to focus on real business
+improvements. Additionally, a calculated policy can be written to automatically
+fix values that should be either all lower or all upper case. Note that existing
+keys CANNOT be changed (this is done to protect any existing tag).
+
+
+
+## Initial Configuration
+
+For our initial configuration, let us assume we have an AWS S3 bucket called
+`turbot-test-bucket` with the following tags:
+
+| Key | Value |
+| ----------- | -------- |
+| Test | Tag |
+| environment | DEV |
+| owner | john Doe |
+
+Assume that we have also set the policy
+[AWS > S3 > Bucket > Tags](/guardrails/docs/mods/aws/aws-s3/policy#aws--s3--bucket--tags)
+to `Check: Tags are correct`. This means that Guardrails will only alarm and not
+change any tags on the resource itself.
+
+## Tagging with Guardrails
+
+### Check Tags, Ignoring Casing
+
+Using Guardrails, we can define a policy
+[AWS > S3 > Bucket > Tags > Template](/guardrails/docs/mods/aws/aws-s3/policy#aws--s3--bucket--tags--template)
+with logic that is case agnostic.
+
+First, let's start with the GraphQL query. We want to just pull in the resource
+tags:
+
+```graphql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+If our template looked like the following:
+
+```nunjucks
+{%- if $.resource.turbot.tags['owner'] == 'john doe' -%}
+[]
+{%- else -%}
+- 'owner': 'invalid_tag'
+{%- endif -%}
+```
+
+Guardrails would evaluate the control `AWS > S3 > Bucket > Tags` to `Alarm` due to
+the casing on the tag value `john Doe`. To get around this, we use
+[RegEx](guides/nunjucks#regex) to evaluate the string. If we are confident in
+the casing of the key, it is possible to do something simple like so:
+
+```nunjucks
+{%- if r/john doe/.test($.resource.turbot.tags['owner'] | lower) -%}
+[]
+{%- else -%}
+- 'owner': 'invalid_tag'
+{%- endif -%}
+```
+
+However, real applications are usually not so trivial. To account for the casing
+differences with the key AND value, we need to add some additional lines of
+code:
+
+
+
+```nunjucks
+{%- set approved = 'no' -%}
+
+{%- for key,value in $.resource.turbot.tags -%}
+ {%- if r/owners/.test(key | lower) -%}
+ {%- if r/john doe/.test(value | lower) %}
+ {%- set approved = 'yes' -%}
+ {%- endif %}
+ {%- endif -%}
+{%- endfor -%}
+
+{%- if approved == 'no' -%}
+- owner: 'Missing_tag'
+{%- else -%}
+[]
+{%- endif -%}
+```
+
+First, set a variable that is used to denote if the key: value pair exists.
+Then, parse out the key and value pairs using a for loop, check for the key
+first, and if the key exists, check for the value. If both the key and value if
+statement evaluate to true, we set the dummy variable to `yes` and in the final
+if statement, simply pass an empty array denoting the tags are approved. Because
+our bucket has the key:value pair `Owners`:`john Doe`, it passes with flying
+colors!
+
+### Check Tags, Change Casing
+
+Using Guardrails, we can define a policy
+[AWS > S3 > Bucket > Tags > Template](/guardrails/docs/mods/aws/aws-s3/policy#aws--s3--bucket--tags--template)
+with logic that is case agnostic.
+
+As above, let's start with the GraphQL query. We want to just pull in the
+resource tags:
+
+```graphql
+{
+ resource {
+ turbot {
+ tags
+ }
+ }
+}
+```
+
+We want to check to make sure the key `owner` exists, then change the value to
+be all lower case.
+
+```nunjucks
+{%- set regExp = r/owners/ -%}
+{%- set set_key = 0 -%}
+
+{%- for key, value in $.resource.turbot.tags -%}
+{%- set lower_value = (value | lower) -%}
+{%- if regExp.test(key | lower) and lower_value != value -%}
+ - {{ key }}: {{ lower_value }}
+ {%- set set_key = 1 -%}
+{%- endif -%}
+{%- endfor -%}
+
+{%- if set_key == 0 -%}
+[]
+{%- endif -%}
+```
+
+In this template, set a variable that can be used as a boolean that changes
+value only if the lower case tag change is necessary. If there is no change, we
+want to be sure to output a blank array. We can utilize Regex to test the key to
+ensure we are looking at the right one, then test the existing value with
+another string that has had the `lower` function applied. If those strings don't
+match, the result of the template is to change the current value with the lower
+case value.
diff --git a/docs/using/standard/tagging/tagging-helpers.md b/docs/using/standard/tagging/tagging-helpers.md
new file mode 100644
index 00000000..3d02b24d
--- /dev/null
+++ b/docs/using/standard/tagging/tagging-helpers.md
@@ -0,0 +1,469 @@
+---
+title: Tagging Helpers
+sidebar_label: Tagging Helpers
+---
+
+# Tagging Helpers
+
+To help with complex tagging use cases, Guardrails offers additional functionality to assist in writing calculated policies for tagging. Collectively, these improvements are known as "Tagging Helpers".
+
+## createdBy and createTimestamp
+
+A common tagging requirement is to tag a resource with the identity of the creator and the time it was created. Here is an example graphql query for the resource metadata (which includes the creation information).
+```graphql
+{
+ resource {
+ metadata
+ }
+}
+```
+Query results:
+```yaml
+metadata:
+ aws:
+ accountId: 012345678912
+ partition: aws
+ region: us-east-1
+ createTimestamp: 2023-01-28T05:31:46.000Z
+ createdBy: "arn:aws:sts::013122550996:user/dwight"
+```
+
+### createdBy data source
+
+Guardrails populates the createdBy attribute based on the identity found in the creation event. For resources that exist prior to Guardrails discovering them, createdBy will be set to null. The format for the createdBy value varies by cloud provider:
+
+**AWS**
+- userIdentity.arn: The full ARN of the identity that created the resource.
+
+**Azure**
+- initiatedBy.userPrincipalName (Active Directory resources)
+- caller (Azure resources)
+
+**GCP**
+- authenticationInfo.principalEmail
+
+### Example of how to use createdBy and createTimestamp
+
+This example shows a generic `template_input` and `template` that will work for any AWS, Azure or GCP resource type.
+
+template_input:
+```graphql
+{
+ resource {
+ metadata
+ turbot{ tags }
+ }
+}
+```
+
+```nunjucks
+{# As createdBy and createTimestamp can be null, it's important to test that they are available. -#}
+{% if $.resource.metadata.createdBy %}
+- "creator": "{{ $.resource.metadata.createdBy }}"
+{% endif %}
+{% if $.resource.metadata.createTimestamp %}
+- "createTimestamp": "{{ $.resource.metadata.createTimestamp }}"
+{% endif %}
+```
+
+## Tag Maps with setAttribute
+
+In more complex tagging scenarios, accumulating tag key:value pairs into a map can assist in writing clean readable code. Nunjucks does not natively supply a way to create mutable dictionaries. To overcome this limitation, the `setAttribute()` function can help. The function accepts a dictionary object and two string parameters.
+
+**Template**
+```nunjucks
+{% set currentTags = {"Key1":"Value1"} -%}
+{% set currentTags = setAttribute(currentTags, "Key2", "ValueTwo") %}
+{% set currentTags = setAttribute(currentTags, "Key1", "ValueOne") %}
+{% for key,value in currentTags -%}
+- "{{key}}": "{{value}}"
+{% endfor -%}
+```
+
+**Output**
+With output of:
+```yaml
+- "Key1": "ValueOne"
+- "Key2": "ValueTwo"
+```
+
+Note: Appending to arrays is not supported by this function but can be accomplished in other ways.
+
+## Rectify and cleanup bad keys and values
+
+Fixing incorrect keys and values is the most common tagging use case. The `transformMap` function can be used in calculated policies to easily process rules across all tags on any given resource.
+
+### transformMap(tags_map, rules) -> transformed_map
+
+Transforms `tags_map` based on `rules` and returns `transformed_map`; the `tags_map` paramater and the `transformed_map` return value are simple arrays of `key:value` pairs e.g.:
+
+```json
+{
+ "foo": "bar",
+ "fizz": "buzz",
+ "crop": "beets"
+}
+```
+or
+```yaml
+- foo: bar,
+- fizz: buzz,
+- crop: beets
+```
+
+The `rules` object must conform to a specific schema which will be outlined in a series of examples. All examples will use the following starting `tags_map` (the current tags on the resource):
+
+```yaml
+- Env: prd,
+- CostCenter: scranton-1138,
+- owner: dwight
+```
+
+### Example: Create remediated tags while preserving existing tags
+
+**Rules**
+```yaml
+environment:
+ incorrectKeys:
+ - Env
+```
+
+**Transformed Tags**
+```yaml
+- "CostCenter": "scranton-1138"
+- "Env": "prd"
+- "environment": "prd"
+- "owner": "dwight"
+```
+
+### Example: Replace an incorrect tag key.
+
+**Rules**
+```yaml
+environment:
+ incorrectKeys:
+ - Env
+ replacementValue: undefined
+cost_center:
+ incorrectKeys:
+ - CostCenter
+ replacementValue: undefined
+```
+
+_Reminder: "undefined" is a reserved value in Guardrails to indicate a tag that should be removed!_
+
+**Transformed Tags**
+```yaml
+- "cost_center": "scranton-1138"
+- "environment": "prd"
+- "owner": "dwight"
+```
+
+### Example: Replace an incorrect tag value.
+
+**Rules**
+```yaml
+owner:
+ values:
+ dwight.schrute@dmi.com:
+ incorrectValues:
+ - dwight
+ - dks
+ - dwight.schrute
+ pam.beasly@dmi.com:
+ incorrectValues:
+ - Beasly
+ - pam
+```
+
+**Transformed Tags**
+```yaml
+- "CostCenter": "scranton-1138"
+- "Env": "prd"
+- "owner": "dwight.schrute@dmi.com"
+```
+
+### Example: Combine value and key replacement.
+
+**Rules**
+```yaml
+environment:
+ incorrectKeys:
+ - Env
+ replacementValue: undefined
+ values:
+ production:
+ incorrectValues:
+ - prod
+ - prd
+ - PROD
+ development:
+ incorrectValues:
+ - dev
+ - DEV
+cost_center:
+ incorrectKeys:
+ - CostCenter
+ replacementValue: undefined
+ values:
+ SCR1138:
+ incorrectValues:
+ - scranton-1138
+ NSH1234:
+ incorrectValues:
+ - nashua-1234
+owner:
+ values:
+ dwight.schrute@dmi.com:
+ incorrectValues:
+ - dwight
+ - dks
+ - dwight.schrute
+ pam.beasly@dmi.com:
+ incorrectValues:
+ - Beasly
+ - pam
+```
+
+**Transformed Tags**
+```yaml
+- "cost_center": "SCR1138"
+- "environment": "production"
+- "owner": "dwight.schrute@dmi.com"
+```
+
+### Example: Using regex matches
+
+Regular expressions can be used in `incorrectValues` and `incorrectKeys` are identified by this regex:
+```
+^/((?:\\/|[^/])*)/([dgimsuy]*)$
+```
+Malformed regexes are treated as string literals.
+
+**Rules**
+```yaml
+environment:
+ incorrectKeys:
+ - /env.*/gi
+ replacementValue: undefined
+ values:
+ production:
+ incorrectValues:
+ - /pr.*/gi
+ development:
+ incorrectValues:
+ - /dev.*/gi
+cost_center:
+ incorrectKeys:
+ - /cost.*cent.*/gi
+ replacementValue: undefined
+ values:
+ SCR1138:
+ incorrectValues:
+ - /.*1138.*/
+ NSH1234:
+ incorrectValues:
+ - /.*1234.*/
+```
+
+**Transformed Tags**
+```yaml
+- "cost_center": "SCR1138"
+- "environment": "production"
+- "owner": "dwight"
+```
+
+### Edge Cases
+- If there are multiple matches for an incorrect value then the first alphabetical match for the correct key will be used.
+- Malformed regexes are treated as string literals.
+- If there is no match for the incorrectKeys or in incorrectValues, the output map will match the input.
+- Multiple matches for an incorrect value will result in the the first alphabetical match being used.
+
+## Rules Schema
+
+### Structure of the Rules YAML
+
+The transformMap function expects a JSON object with the following structure:
+
+```json
+{
+ "key1": {
+ "incorrectKeys": [
+ "badkey1a",
+ "badkey1b"
+ ],
+ "replacementValue": "newKey1",
+ "values": {
+ "value1": {
+ "incorrectValues": [
+ "badValue1a",
+ "badValue1b"
+ ]
+ }
+ }
+ },
+ "key2": {
+ "incorrectKeys": [
+ "badkey2a",
+ "badkey2b"
+ ],
+ "replacementValue": "newKey2",
+ "values": {
+ "value2": {
+ "incorrectValues": [
+ "badValue2a",
+ "badValue2b"
+ ]
+ }
+ }
+ }
+}
+```
+
+The rules object can be stored in Guardrails using the policy `Turbot > Tags > Transform Rules`. When setting this policy via the Guardrails console yaml format can be used in addition to json:
+
+```yaml
+key1:
+ incorrectKeys:
+ - badkey1a
+ - badkey1b
+ replacementValue: newKey1
+ values:
+ value1:
+ incorrectValues:
+ - badValue1a
+ - badValue1b
+key2:
+ incorrectKeys:
+ - badkey2a
+ - badkey2b
+ replacementValue: newKey2
+ values:
+ value2:
+ incorrectValues:
+ - badValue2a
+ - badValue2b
+```
+
+## Storing rules in a Guardrails File
+
+The recommended way of managing transform rules as code, is to store them in a `Guardrails File`. Here is an example terraform template for creating a Guardrails file.
+
+```hcl
+resource "turbot_file" "tag_rules" {
+ parent = "tmod:@turbot/turbot#/"
+ title = "Tag Transform Rules"
+ akas = ["tag_rules"]
+ content = <<-EOT
+ {
+ "key1": {
+ "incorrectKeys": [
+ "badkey1a",
+ "badkey1b"
+ ],
+ "replacementValue": "newKey1",
+ "values": {
+ "value1": {
+ "incorrectValues": [
+ "badValue1a",
+ "badValue1b"
+ ]
+ }
+ }
+ },
+ "key2": {
+ "incorrectKeys": [
+ "badkey2a",
+ "badkey2b"
+ ],
+ "replacementValue": "newKey2",
+ "values": {
+ "value2": {
+ "incorrectValues": [
+ "badValue2a",
+ "badValue2b"
+ ]
+ }
+ }
+ }
+ }
+ EOT
+}
+```
+
+Guardrails Files only accept JSON, but YAML can still be used for the rules here by using the built-in YAML and JSON encode and decode functions in Terraform:
+
+```hcl
+locals {
+ yaml_string = <<-EOT
+ key1:
+ incorrectKeys:
+ - badkey1a
+ - badkey1b
+ replacementValue: newKey1
+ values:
+ value1:
+ incorrectValues:
+ - badValue1a
+ - badValue1b
+ key2:
+ incorrectKeys:
+ - badkey2a
+ - badkey2b
+ replacementValue: newKey2
+ values:
+ value2:
+ incorrectValues:
+ - badValue2a
+ - badValue2b
+ EOT
+}
+
+resource "turbot_file" "tag_rules" {
+ parent = "tmod:@turbot/turbot#/"
+ title = "Tag Transform Rules"
+ akas = ["tag_rules"]
+ content = jsonencode(yamldecode(local.yaml_string))
+}
+```
+
+## Example Calculated Policy
+
+The example creates a Policy Pack, sets the `AWS > S3 > Bucket > Tags` guardrail to `Enforce: Set tags`, and creates our calculated policy that reads the rules from the Guardrails File specified in the previous section.
+
+```hcl
+resource "turbot_policy_pack" "tag_transform_example" {
+ parent = "tmod:@turbot/turbot#/"
+ title = "Tagging Transformation Example"
+}
+
+resource "turbot_policy_setting" "aws_s3_bucket_tags" {
+ resource = turbot_policy_pack.tag_transform_example.id
+ type = "tmod:@turbot/aws-s3#/policy/types/bucketTags"
+ value = "Enforce: Set tags"
+}
+
+resource "turbot_policy_setting" "aws_s3_bucket_tags_template" {
+ resource = turbot_policy_pack.tag_transform_example.id
+ type = "tmod:@turbot/aws-s3#/policy/types/bucketTagsTemplate"
+ template_input = <<-EOT
+ {
+ rules: resource(id:"tag_rules") {
+ data
+ }
+ resource {
+ turbot {
+ tags
+ }
+ }
+ }
+ EOT
+ template = <<-EOT
+ {%- set tags_map = $.resource.turbot.tags -%}
+ {%- set rules = $.rules.data -%}
+ {% for key,value in transformMap(tags_map, rules) -%}
+ - "{{key}}": "{{value}}"
+ {% endfor -%}
+ EOT
+}
+```
diff --git a/docs/using/standard/trusted-access.md b/docs/using/standard/trusted-access.md
new file mode 100644
index 00000000..fe58b271
--- /dev/null
+++ b/docs/using/standard/trusted-access.md
@@ -0,0 +1,248 @@
+---
+title: Trusted Access Guardrails
+sidebar_label: Trusted Access
+---
+
+# Trusted Access Guardrails
+
+## Overview
+
+Trusted Access guardrails allow you to define whom and what you trust and
+enforce those limitations on your cloud resources. With Guardrails Trusted Access
+policies, you can define which accounts, services, and organizations are allowed
+to be granted access your resources. The Trusted Access control can audit or
+enforce those policies, giving centralized control over trusted boundaries.
+
+Many examples here will list AWS, but these policies also are available for
+Azure and GCP resources.
+
+## Policies and Controls
+
+Trusted Access controls are generally divided into two patterns:
+
+- [Simple List Pattern](#simple-list-pattern)
+
+- [IAM Resource Policy Pattern](#iam-resource-policy-pattern)
+
+## Default Policies
+
+Default policies at the account level allow administrators to define trusted
+boundaries centrally for all services. However, these can be overrode by either
+defining resource type specific Trusted Access policies, or by setting an
+exception for the default policy.
+
+### Account-level Defaults
+
+The value for all of the account-level default policies is to allow everything:
+`*`
+
+| Policy | Description |
+| ------------------------------------------------------ | ------------------------------ |
+| `AWS > Account > Trusted Accounts [Default]` | A list of AWS account IDs |
+| `AWS > Account > Trusted Organizations [Default]` | A list of AWS organization IDs |
+| `AWS > Account > Trusted Identity Providers [Default]` | A list of Identity providers |
+| `AWS > Account > Trusted Service [Default]` | A list of AWS services |
+
+### Service-level Defaults
+
+The value for all of the service-level default policies is to allow everything:
+`*`
+
+| Policy | Description |
+| -------------------------------------------------------- | ------------------------------ |
+| `AWS > {Service} > Trusted Accounts [Default]` | A list of AWS account IDs |
+| `AWS > {Service} > Trusted Organizations [Default]` | A list of AWS organization IDs |
+| `AWS > {Service} > Trusted Identity Providers [Default]` | A list of Identity providers |
+| `AWS > {Service} > Trusted Service [Default]` | A list of AWS services |
+
+### Simple List Pattern
+
+Some resource types allow you to grant access to other accounts.
+
+Guardrails solves this with two policies:
+
+- `Trusted Access`: Allows you check or enforce whether the sharing is allowed
+ or not, and to which accounts. Allows administrators to configure if Guardrails
+ will check or enforce Trusted Access.
+- `Trusted Access > Accounts`: Allows you to specify the list of AWS account IDs
+ that are trusted.
+
+For resources that support cross account access, Guardrails can check or enforce to
+the list of AWS accounts. These policies can be found directly under the service
+in the hierarchy:
+
+- `{Provider} > {Service} > {Resource} > Trusted Access`
+- `{Provider} > {Service} > {Resource} > Trusted Access > Accounts`
+
+
+
Example: Trusted Access policies for EC2 Snapshots:
+
+ AWS > EC2 > Snapshot > Trusted Account
+ AWS > EC2 > Snapshot > Trusted Account > Accounts
+
+
+
+Acceptable Trusted Access policy values are consistent across resource types:
+
+| Value | Description |
+| ------------------------------------ | ---------------------------------------------------------- |
+| `Skip` | Skip - no action taken |
+| `Check: Trusted Access > Accounts` | To check access is granted to the list of trusted accounts |
+| `Enforce: Trusted Access > Accounts` | To enforce, access to non-trusted accounts are removed |
+
+### IAM Resource Policy Pattern
+
+Many resources allow users to grant access directly on the resource itself via a
+resource policy. The Trusted Access control will evaluate and modify access
+granted in said resource policy.
+
+Guardrails allows Trusted Access configurations via this list of policies. Note that
+while they all exist, is not necessary to configure all of them in order to
+enforce or check resources for unauthorized access:
+
+- `Trusted Access`: Allows administrators to check or enforce whether the
+ sharing is allowed or not and to which accounts, services, and federated
+ users.
+- `Trusted Access > Accounts`: Allows administrators to specify the list of AWS
+ account IDs that are trusted to access the resource.
+- `Trusted Access > Organization Restrictions`: Allows administrators to specify
+ the list of AWS organization IDs that are trusted to access the resource.
+- `Trusted Access > Identity Providers`: Allows administrators to specify the
+ list of Identity Providers that are trusted to access the resource.
+- `Trusted Access > CloudFront Origin Access Identities`: Allows administrators
+ to specify the list of CloudFront Origin Access Identities (OAIs) that are
+ trusted to access the resource.
+- `Trusted Access > Services`: Allows administrators to specify the list of AWS
+ Services that are trusted to access the resource.
+
+These policies can be found under the service in the hierarchy:
+
+- `{Provider} > {Service} > {Resource} > Policy > Trusted Access`
+- `{Provider} > {Service} > {Resource} > Policy > Trusted Access > Accounts`
+- `{Provider} > {Service} > {Resource} > Policy > Trusted Access > Organization Restriction`
+- `{Provider} > {Service} > {Resource} > Policy > Trusted Access > Identity Providers`
+- `{Provider} > {Service} > {Resource} > Policy > Trusted Access > CloudFront Origin Access Identities`
+- `{Provider} > {Service} > {Resource} > Policy > Trusted Access > Services`
+
+
+
Example: S3 Trusted Access policy family:
+
+ AWS > S3 > Bucket > Policy > Trusted Access
+ AWS > S3 > Bucket > Policy > Trusted Access > Accounts
+ AWS > S3 > Bucket > Policy > Trusted Access > Organization Restriction
+ AWS > S3 > Bucket > Policy > Trusted Access > Identity Providers
+ AWS > S3 > Bucket > Policy > Trusted Access > CloudFront Origin Access Identities
+ AWS > S3 > Bucket > Policy > Trusted Access > Services
+
+
+
+Again, acceptable Trusted Access policy values are consistent across resource
+types:
+
+| Value | Description |
+| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| `Skip` | Skip - no action taken |
+| `Check: Trusted Access` | To check access is granted to the list of AWS accounts, Organizations, Services, Identity Providers, and OAIs set on the policy |
+| `Enforce: Revoke untrusted access` | To enforce, access to non-trusted members are removed |
+
+**Note**:
+
+- The `Trusted Access` control only evaluates access granted to **external
+ entities** for the resource in the resource policy.
+- All the `Trusted Access` sub-policies might not be applicable for all resource
+ types.
+- The `Trusted Access` control only applies to policy statements that allow
+ access (where effect is allow). Deny statements are ignored by the control.
+- Both `Trusted Access > Accounts` and
+ `Trusted Access > Organization Restrictions` apply to AWS principals, and are
+ evaluated independently. To have access, a principal must be allowed in
+ `Trusted Access > Accounts` AND be a member of an Organization that is allowed
+ in `Trusted Access > Organization Restrictions`
+- A Service Principal that is allowed per `Trusted Access > Services` may also
+ restrict the source resource to accounts per
+ `Trusted Access > Services > Source Account Restrictions` via a condition.
+ - When the service supports `aws:Source*` conditions, Guardrails will evaluate the
+ `aws:Source*` conditions on that statement and amend (or add the
+ `aws:SourceAccount` condition) to remediate. S3 Bucket notifications to SNS
+ are an example of such a situation.
+ - When the service (such as CloudTrail) does not support `aws:Source*`
+ conditions, Guardrails will not enforce this restriction on that statement.
+
+### Example: AWS > S3 > Bucket > Policy > Trusted Access
+
+First, assume that the bucket policy is trusting the account `123456789210` that
+is under the organization `o-c6v5d4wd43`. The identity provider granted access
+in the bucket policy is `www.facebook.com`. The service granted access to the
+bucket via existing bucket policies is `ec2.amazonaws.com`, and the CloudFront
+Origin Access Identity with access is defined as `E1QK6X5E0FOET6`. The following
+policies have been configured in Guardrails:
+
+- **AWS > S3 > Bucket > Policy > Trusted Access** is set to
+ `Check: Trusted Access`.
+- **AWS > S3 > Bucket > Policy > Trusted Access > Accounts** is set to
+ `- 123456789210`.
+- **AWS > S3 > Bucket > Policy > Trusted Access > Organization Restriction** is
+ set to `- o-c6v5d4wd43`.
+- **AWS > S3 > Bucket > Policy > Trusted Access > Identity Providers** is set to
+ `- www.google.com`.
+- **AWS > S3 > Bucket > Policy > Trusted Access > Services** is set to
+ `- sns.amazonaws.com`.
+- **AWS > S3 > Bucket > Policy > Trusted Access > CloudFront Origin Access
+ Identities** is set to `E1QK6X5E0FOET6`.
+
+In order, these policies will evaluate `Accounts`, `Organization Restriction`,
+and `CloudFront Origin Access Identities` as trusted, but `Identity Providers`
+and `Services` as untrusted. The policy evaluation will result the control being
+in the **ALARM** state.
+
+**Sample S3 bucket policy for the above example**:
+
+```json
+{
+ "Version": "2012-10-17",
+ "Id": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "ReadAccess",
+ "Effect": "Allow",
+ "Principal": {
+ "Federated": "www.facebook.com"
+ },
+ "Action": "s3:ListBucket",
+ "Resource": "arn:aws:s3:::bucketexample01"
+ },
+ {
+ "Sid": "WriteAccess",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1QK6X5E0FOET6"
+ },
+ "Action": "s3:PutBucket",
+ "Resource": "arn:aws:s3:::bucketexample01"
+ },
+ {
+ "Sid": "ReadAccess1",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "ec2.amazonaws.com"
+ },
+ "Action": "s3:ListBucket",
+ "Resource": "arn:aws:s3:::bucketexample01"
+ },
+ {
+ "Sid": "WriteAccess1",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "arn:aws:iam::123456789210:root"
+ },
+ "Action": "s3:PutBucket",
+ "Resource": "arn:aws:s3:::bucketexample01",
+ "Condition": {
+ "StringEquals": {
+ "aws:PrincipalOrgID": "o-c6v5d4wd43"
+ }
+ }
+ }
+ ]
+}
+```
diff --git a/docs/using/standard/usage.md b/docs/using/standard/usage.md
new file mode 100644
index 00000000..35cf4f2b
--- /dev/null
+++ b/docs/using/standard/usage.md
@@ -0,0 +1,81 @@
+---
+title: Usage Guardrails
+sidebar_label: Usage
+---
+
+# Usage Guardrails
+
+**Usage** guardrails give administrators the ability to generate alarms
+if the number of resources in a specific service exceeds a set amount. These
+guardrails exist for a wide number of resources across many services in AWS and
+GCP.
+
+Note that the Usage guardrails are not related to the Approved > Usage policy in
+the [Approved guardrails](/guardrails/docs/concepts/guardrails/approved) family.
+
+Usage guardrails have a consistent form:
+
+- `{provider} > {service} > {resource} > Usage`
+
+
+
+ AWS > EC2 > Instance > Usage
+ GCP > Network > Firewall > Usage
+
+
+
+These policies also have consistent options that can be configured:
+
+- `Skip`
+- `Check: Usage <= 85% of Limit`
+- `Check: Usage <= 100% of Limit`
+
+Note that Guardrails will never destroy resources even if the limit is exceeded, and
+will not prevent users from creating resources once the Usage control moves into
+the alarm state.
+
+The above policies have a sub setting to determine said limit, again with a
+consistent form:
+
+- `{provider} > {service} > {resource} > Usage`
+
+
+
+ AWS > EC2 > Instance > Usage > Limit
+ GCP > Network > Firewall > Usage > Limit
+
+
+
+The limit policy checks the total number of resource types within a given
+account. This value can either be set statically by an administrator or a
+[calculated policy](/guardrails/docs/concepts/policies/calculated-faq) can be written to set the value
+dynamically.
+
+### Example Guardrail: AWS > EC2 > Instance > Usage
+
+The `AWS > EC2 > Instance > Usage` policy queries an AWS account for the amount
+of EC2 instance that exist. The policy `AWS > EC2 > Instance > Usage > Limit`
+determines the amount of resources that can exist before the Usage guardrail
+triggers an alarm.
+
+Suppose two organizations have a limit of 50 EC2 instance that can be active at
+any one time. The first organization has a soft limit, and the second
+organization has a hard limit.
+
+
+ Assume the organization wants to be notified at 50 instances, but this is a soft limit. The following policies could be set:
+
+ AWS > EC2 > Instance > Usage > Limit
set to 50
.
+ AWS > EC2 > Instance > Usage
set to Check: Usage <= 100% of limit
+
+ When the number of EC2 instances within said account reaches 50, the Usage control will generate an alert.
+
+
+
+ Assume the organization wants to be notified at 50 instances, and accounts must not have more than this limit at any one time (aka hard limit). The following policies could be set:
+
+ AWS > EC2 > Instance > Usage > Limit
set to 50
.
+ AWS > EC2 > Instance > Usage
set to Check: Usage<= 85% of limit
+
+ When the number of EC2 instances within said account reaches 43, the Usage control will generate an alert. This allows administrators to monitor the account prior to reaching the organizational restriction of 50 instances per account.
+