|
| 1 | +--- |
| 2 | +title: Azure Configuration |
| 3 | +description: Learn how to configure Azure for CloudPrem |
| 4 | +private: true |
| 5 | +further_reading: |
| 6 | +- link: "/cloudprem/install/azure-aks/" |
| 7 | + tag: "Documentation" |
| 8 | + text: "Install CloudPrem on Azure AKS" |
| 9 | +- link: "/cloudprem/ingest-logs/" |
| 10 | + tag: "Documentation" |
| 11 | + text: "Configure Log Ingestion" |
| 12 | +--- |
| 13 | + |
| 14 | +## Overview |
| 15 | + |
| 16 | +Before you install CloudPrem on your Azure account, you’ll need to set up a set of supporting infrastructure components. These resources provide the compute, storage, database, and networking services that CloudPrem depends on. This page lists everything you need to provision in your Azure account before moving on to the installation steps described in the [Azure AKS Installation Guide](../install/azure-aks/). |
| 17 | + |
| 18 | +## Prerequites |
| 19 | +- Azure Kubernetes Service (AKS) – A running AKS cluster sized for your expected CloudPrem workload. |
| 20 | +- PostgreSQL Flexible Server – An Azure Database for PostgreSQL instance that CloudPrem will use to store its metadata. |
| 21 | +- Blob Storage Container – An Azure Storage container to hold CloudPrem logs. |
| 22 | +- Client Identity & Permissions – An Azure AD application with read/write access to the storage container. |
| 23 | +- NGINX Ingress Controller – Installed on the AKS cluster to route external traffic to CloudPrem services. |
| 24 | +- Datadog Agent – Deployed on the AKS cluster to collect and send logs to CloudPrem. |
| 25 | + |
| 26 | +1. Azure Kubernetes Service (AKS) |
| 27 | + |
| 28 | +CloudPrem runs entirely on Kubernetes. You’ll need an AKS cluster with sufficient CPU, memory, and disk space configured for your workload. See the Kubernetes cluster sizing recommendations for guidance. |
| 29 | + |
| 30 | + • Quickstart: [Deploy an AKS cluster with the Azure CLI](https://learn.microsoft.com/en-us/azure/aks/learn/quick-kubernetes-deploy-cli) |
| 31 | + • Quickstart: [Deploy an AKS cluster with Terraform](https://learn.microsoft.com/en-us/azure/aks/learn/quick-kubernetes-deploy-terraform?pivots=development-environment-azure-cli) |
| 32 | + |
| 33 | +Check: |
| 34 | +Run `kubectl get nodes` and confirm the cluster is reachable and nodes are in `Ready` state. |
| 35 | + |
| 36 | +2. PostgreSQL Flexible Server |
| 37 | + |
| 38 | +CloudPrem stores its metadata and configuration in a PostgreSQL database. An Azure Database for PostgreSQL Flexible Server is recommended. It must be reachable from the AKS cluster, ideally with private networking enabled. See the Postgres sizing recommendations for details. |
| 39 | + |
| 40 | + • Quickstart: Create an Azure Database for PostgreSQL Flexible Server using the Azure CLI (https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/quickstart-create-server?tabs=portal-create-flexible%2Cportal-get-connection%2Cportal-delete-resources) |
| 41 | + • Quickstart: Create an Azure Database for PostgreSQL Flexible Server using Terraform (https://learn.microsoft.com/en-us/azure/developer/terraform/deploy-postgresql-flexible-server-database?tabs=azure-cli) |
| 42 | + |
| 43 | +Check: |
| 44 | +Verify you can connect with psql from a bastion or from inside the AKS network, and that credentials work. Replace placeholders with your actual values: |
| 45 | +```bash |
| 46 | +psql "host=<SERVER_NAME>.postgres.database.azure.com \ |
| 47 | + port=5432 \ |
| 48 | + dbname=<DB_NAME> \ |
| 49 | + user=<ADMIN_USER>@<SERVER_NAME> \ |
| 50 | + password=<PASSWORD> \ |
| 51 | + sslmode=require" |
| 52 | +``` |
| 53 | + |
| 54 | +If successful, you should see a prompt like: |
| 55 | +``` |
| 56 | +psql (15.2) |
| 57 | +SSL connection (protocol: TLS, cipher: ...) |
| 58 | +Type "help" for help. |
| 59 | +
|
| 60 | +<DB_NAME>=> |
| 61 | +``` |
| 62 | + |
| 63 | +👉 For security, create a dedicated database and user for CloudPrem, and grant the user rights only on that database, not cluster-wide. |
| 64 | + |
| 65 | +3. Blob Storage Container |
| 66 | + |
| 67 | +CloudPrem uses Azure Blob Storage to persist logs. Create a dedicated container for this purpose. |
| 68 | + |
| 69 | + • Quickstart: Create a Blob container with the Azure CLI |
| 70 | + • Tutorial: Create Blob storage resources with Terraform |
| 71 | + |
| 72 | +Check: |
| 73 | +Upload a test file with az storage blob upload and confirm you can list and read it back. |
| 74 | + |
| 75 | +Use a dedicated container per environment (e.g. cloudprem-prod, cloudprem-staging) and apply least-privilege IAM roles at the container scope, not account-wide. |
| 76 | + |
| 77 | +4. Client Identity & Permissions |
| 78 | + |
| 79 | +An Azure AD application must be granted read/write access to the Blob container. CloudPrem will use this identity to interact with storage. |
| 80 | +Check: |
| 81 | +Ensure the identity has the Storage Blob Data Contributor role assigned on the container or storage account. |
| 82 | + |
| 83 | +5. NGINX Ingress Controller |
| 84 | + |
| 85 | +CloudPrem services are exposed via HTTP(S). An NGINX ingress controller should be installed in your AKS cluster to provide routing and TLS termination. |
| 86 | +Check: |
| 87 | +Run `kubectl get pods -n ingress-nginx` and confirm controller pods are healthy. |
| 88 | + |
| 89 | +6. Datadog Agent |
| 90 | + |
| 91 | +<!-- For observability, deploy the Datadog Agent on your AKS cluster. The Agent collects metrics, logs, and traces from CloudPrem workloads. |
| 92 | +Check: |
| 93 | +Run kubectl get pods -n datadog and confirm the Agent pods are running, and check Datadog to see cluster metrics appearing. --> |
| 94 | + |
| 95 | + |
| 96 | +<!-- This guide covers how to configure your AWS account prerequisites for CloudPrem deployment. This configuration is required before installing CloudPrem on AWS EKS. |
| 97 | +
|
| 98 | +For the complete AKS installation process, see the [Azure AKS Installation Guide](../install/azure-aks/). |
| 99 | +
|
| 100 | +## AWS prerequisites |
| 101 | +
|
| 102 | +To deploy CloudPrem on AWS, you need to configure: |
| 103 | +- AWS credentials and authentication |
| 104 | +- AWS region selection |
| 105 | +- IAM permissions for S3 object storage |
| 106 | +- RDS PostgreSQL database (recommended) |
| 107 | +- EKS cluster with AWS Load Balancer Controller |
| 108 | +
|
| 109 | +## AWS credentials |
| 110 | +
|
| 111 | +When starting a node, CloudPrem attempts to find AWS credentials using the credential provider chain implemented by [rusoto\_core::ChainProvider][2] and looks for credentials in this order: |
| 112 | +
|
| 113 | +1. Environment variables `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, or `AWS_SESSION_TOKEN` (optional). |
| 114 | +2. Credential profiles file, typically located at `~/.aws/credentials` or otherwise specified by the `AWS_SHARED_CREDENTIALS_FILE` and `AWS_PROFILE` environment variables if set and not empty. |
| 115 | +3. Amazon ECS container credentials, loaded from the Amazon ECS container if the environment variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` is set. |
| 116 | +4. Instance profile credentials, used on Amazon EC2 instances, and delivered through the Amazon EC2 metadata service. |
| 117 | +
|
| 118 | +An error is returned if no credentials are found in the chain. |
| 119 | +
|
| 120 | +## AWS Region |
| 121 | +
|
| 122 | +CloudPrem attempts to find the AWS region from multiple sources, using the following order of precedence: |
| 123 | +
|
| 124 | +1. **Environment variables**: Checks `AWS_REGION`, then `AWS_DEFAULT_REGION`. |
| 125 | +2. **AWS config file**: Typically located at `~/.aws/config`, or at the path specified by the `AWS_CONFIG_FILE` environment variable (if set and not empty). |
| 126 | +3. **EC2 instance metadata**: Uses the region of the currently running Amazon EC2 instance. |
| 127 | +4. **Default**: Falls back to `us-east-1` if no other source provides a region. |
| 128 | +
|
| 129 | +## IAM permissions for S3 |
| 130 | +
|
| 131 | +Required authorized actions: |
| 132 | +
|
| 133 | +* `ListBucket` (on the bucket directly) |
| 134 | +* `GetObject` |
| 135 | +* `PutObject` |
| 136 | +* `DeleteObject` |
| 137 | +* `ListMultipartUploadParts` |
| 138 | +* `AbortMultipartUpload` |
| 139 | +
|
| 140 | +Here is an example of a bucket policy: |
| 141 | +
|
| 142 | +``` |
| 143 | +
|
| 144 | +{ |
| 145 | + "Version": "2012-10-17", |
| 146 | + "Statement": [ |
| 147 | + { |
| 148 | + "Effect": "Allow", |
| 149 | + "Action": [ |
| 150 | + "s3:ListBucket" |
| 151 | + ], |
| 152 | + "Resource": [ |
| 153 | + "arn:aws:s3:::my-bucket" |
| 154 | + ] |
| 155 | + }, |
| 156 | + { |
| 157 | + "Effect": "Allow", |
| 158 | + "Action": [ |
| 159 | + "s3:GetObject", |
| 160 | + "s3:PutObject", |
| 161 | + "s3:DeleteObject", |
| 162 | + "s3:ListMultipartUploadParts", |
| 163 | + "s3:AbortMultipartUpload" |
| 164 | + ], |
| 165 | + "Resource": [ |
| 166 | + "arn:aws:s3:::my-bucket/*" |
| 167 | + ] |
| 168 | + } |
| 169 | + ] |
| 170 | +} |
| 171 | +``` |
| 172 | +
|
| 173 | +## Next steps |
| 174 | +
|
| 175 | +After completing the AWS configuration: |
| 176 | +
|
| 177 | +1. **Install CloudPrem on EKS** - Follow the [AWS EKS Installation Guide](../install/aws-eks/) to deploy CloudPrem |
| 178 | +2. **Configure ingress** - Set up [ingress configuration](./ingress/) for external access |
| 179 | +3. **Set up log ingestion** - Configure [log ingestion](../ingest-logs/) to start sending logs to CloudPrem |
| 180 | +
|
| 181 | +## Further reading |
| 182 | +
|
| 183 | +{{< partial name="whats-next/whats-next.html" >}} |
| 184 | +
|
| 185 | +[1]: /cloudprem/configure/ingress/ |
| 186 | +[2]: https://docs.rs/rusoto_credential/latest/rusoto_credential/struct.ChainProvider.html --> |
0 commit comments