Connect a Provider#
Connecting a cloud provider is the single most important setup action — it unlocks Discovery, FinOps, Provisioning, Automation, and Monitoring across all three providers.
Reply CMP connects via read-only API calls using a dedicated service principal (Azure), IAM user (AWS), or service account (GCP). No changes are made to your existing infrastructure.
Note
Read-only vs read-write — Discovery and cost ingestion require read access to provider data; GCP also requires permission to run BigQuery query jobs. Automation (start/stop VMs, enforce tags) and provisioning require the relevant write permissions. Selecting a permission level in Reply CMP does not grant permissions in the cloud provider.
Before you start#
Open Tenant → Connections → Add Connection and select your provider. You will need the credentials created in the steps below.
Provider setup#
Prerequisites
Permission to register an application and create its client secret in the subscription’s Microsoft Entra tenant
Permission to assign Azure roles at subscription scope (for example, Owner or User Access Administrator), or an administrator who can assign them for you. An Entra application administrator role alone does not grant access to Azure subscriptions.
Your Subscription ID; the subscription must be in the Enabled state
Choose Global for Azure public cloud or China for Azure operated by 21Vianet. For China, create the app registration and assign subscription roles in portal.azure.cn; Global credentials cannot access a China subscription.
Steps
Select the subscription’s directory, then go to Microsoft Entra ID → App registrations → New registration in the portal for the selected Azure instance.
Name: e.g.
reply-cmp-readonly; Supported account types: This directory only; no redirect URIRecord: Application (client) ID and Directory (tenant) ID
Go to Certificates & secrets → Client secrets → New client secret → set expiry → copy the secret Value immediately (shown only once). Use the Value, not the Secret ID, object ID or your Azure sign-in password.
Go to Subscriptions → {your subscription} → Access control (IAM) → Add role assignment
For read-only: assign Reader to the application’s service principal at the subscription scope, not only on one resource group.
For read-write (Automation): assign Contributor instead.
Confirm that subscription cost visibility is enabled for the billing agreement. For Enterprise Agreement (EA) subscriptions, ask the enterprise administrator to enable Account owners can view charges (AO view charges). For CSP/Azure Plan, ask the partner to enable the customer cost-visibility policy. Assigning Reader alone does not override these billing policies. CMP retrieves subscription costs through the Cost Management API; this connection does not require a billing export. See Cost Management access and CSP customer cost visibility.
Enter the values in Reply CMP, select the matching Azure instance, then select Validate and Create Connection after validation succeeds. Validation checks authentication and whether the subscription is accessible and Enabled; it does not test cost retrieval or every Monitoring query.
See Create app credentials for the Microsoft Entra procedure.
Required fields in Reply CMP
Field |
Where to find it |
|---|---|
Connection name |
Your choice |
Azure instance |
|
App ID |
Application (client) ID from step 3 |
Subscription ID |
From the Subscriptions blade |
Tenant ID |
Directory (tenant) ID from step 3 |
Client Secret |
Value from step 4 |
Permission level |
ReadOnly / ReadWrite |
For API clients, set Properties.Instance to exactly "Global" or "China".
Omitting this field preserves Global behaviour. Existing Azure connections
remain Global; choosing China routes authentication, discovery, costs, Advisor,
automation and monitoring to the China endpoints.
Azure China service and API-version availability can differ from Global. The selected subscription must support the requested service; choosing China does not enable unavailable services or change provider permissions. See Azure China service availability.
If validation or cost retrieval fails, see Azure Connection Errors.
Note
Monitoring queries — The Reader role is sufficient for all Azure Monitoring queries (Metrics, Alerts Management). For Log Analytics (KQL) queries, Reader also works when the workspace uses resource-centric access mode (the default for workspaces created after March 2019). If a workspace is configured to require workspace permissions (workspace-centric mode), additionally assign the Log Analytics Reader role to the app registration on that specific workspace.
Prerequisites
AWS Console access with permission to create an IAM user, assign policies and create access keys
Your Account ID (12-digit number, visible in the top-right of the AWS Console)
Access to the payer/management account to configure Cost Explorer data preferences, or an administrator who can configure them for you. Administrator access to a member account alone is not sufficient.
Important
Use an IAM user access key, not SSO session credentials. Reply CMP currently accepts an Access Key ID and Secret Access Key only; it does not support a Session Token or an SSO login. Keys beginning with ASIA are temporary credentials and require a Session Token, so they cannot be used in this form. Create a dedicated IAM user key beginning with AKIA instead. These long-term keys remain valid until deactivated or deleted; rotate them according to your organization’s policy. Do not create root-user access keys.
Steps
If you start in the AWS access portal (IAM Identity Center / SSO), select the account and your assigned role to open the AWS Management Console. The portal’s Access keys window provides temporary session credentials; it is not where you create the key needed by Reply CMP.
In the AWS Management Console, open IAM → Users → Create user. Use a dedicated name such as
reply-cmp-readonly. Console sign-in is not required for this user.Attach policies:
For read-only:
ReadOnlyAccess+AWSResourceExplorer2FullAccess(needed for Discovery)For read-write (Automation):
PowerUserAccess+AWSResourceExplorer2FullAccess
Open the newly created IAM user → Security credentials tab → Access keys section → Create access key. Choose Application running outside AWS, if offered, or Other, then follow the prompts and create the key.
Save the Access Key ID and Secret Access Key securely. AWS shows the secret only once; if it is lost, create a replacement key. Do not share the secret in screenshots, chat or support tickets.
Enable AWS Resource Explorer. In the region you will select in Reply CMP, open Views, select a view and choose Actions → Set as default if no default view is configured. See Set a default view.
Enable Cost Explorer, then configure daily resource-level cost data from the payer/management account (the account that pays the organization’s AWS bill):
Open Billing and Cost Management → Cost Management preferences.
Under Daily granularity, select Resource-level data at daily granularity.
In AWS services at daily granularity, select the services whose resource-level costs you want to include.
Select Save preferences. Allow up to 48 hours for the data settings to take effect, then retry validation in Reply CMP.
This opt-in is required by Reply CMP’s connection check, which queries daily costs grouped by resource ID. Enabling Cost Explorer alone or granting the IAM user more permissions does not enable resource-level data. If you only manage a member account, ask the payer/management account administrator to complete this step. See Configure granular data in AWS.
In Reply CMP, enter the account ID as
xxxx-xxxx-xxxx, select the default region, and paste the IAM user’s Access Key ID and Secret Access Key. Select Validate, then Create Connection after validation succeeds.
See the AWS instructions for creating IAM user access keys and temporary versus long-term credentials.
Required fields in Reply CMP
Field |
Where to find it |
|---|---|
Connection name |
Your choice |
Account ID |
Your 12-digit account number, formatted as |
Access Key ID |
IAM user key from step 5, beginning with |
Secret Access Key |
Matching secret from step 5, not your console password |
Default Region |
e.g. |
Permission level |
ReadOnly / ReadWrite |
If validation fails, see AWS Connection Errors.
Note
Monitoring queries — The ReadOnlyAccess policy includes all permissions needed for Monitoring query types: CloudWatch Metrics (cloudwatch:GetMetricData, cloudwatch:ListMetrics), CloudWatch Alarms (cloudwatch:DescribeAlarms), and CloudWatch Logs Insights (logs:StartQuery, logs:GetQueryResults, logs:StopQuery). No additional policies are required.
Prerequisites
An active GCP project with billing enabled, and permission to create a service account/key, grant the roles below and enable APIs, or administrators who can perform those setup tasks
Access to configure the Cloud Billing account’s Detailed usage cost export and its destination BigQuery project/dataset. Project IAM administration alone does not grant billing-account administration. See Billing export setup and administrator permissions.
Steps
Go to IAM & Admin → Service Accounts → Create service account → name e.g.
reply-cmp-viewer.Grant the service account access at the correct scopes:
On the project to discover:
roles/viewerandroles/cloudasset.viewer.On the billing export dataset:
roles/bigquery.dataViewer.On the project hosting that dataset (the Billing project ID in Reply CMP):
roles/bigquery.jobUser, or an equivalent role providingbigquery.jobs.create. Reply CMP runs its validation and cost queries in this project, even when it differs from the project being discovered. Dataset read access alone does not allow query jobs. See BigQuery query permissions.
In the project to discover, open APIs & Services → Library and enable all APIs checked by Reply CMP:
API
Service ID
BigQuery API
bigquery.googleapis.comCloud Asset API (Cloud Asset Inventory)
cloudasset.googleapis.comCloud Resource Manager API
cloudresourcemanager.googleapis.comService Usage API
serviceusage.googleapis.comRecommender API
recommender.googleapis.comCompute Engine API
compute.googleapis.comKubernetes Engine API
container.googleapis.comCloud SQL Admin API
sqladmin.googleapis.comThe connection check currently requires all eight, even if you do not use every service. The service account must also be able to list enabled APIs (
serviceusage.services.list). If a custom role omits that permission, grant a role such asroles/serviceusage.serviceUsageViewer. If the billing dataset is in another project, enable BigQuery API there too. For Monitoring, also enable Cloud Monitoring API (monitoring.googleapis.com); it is not part of the connection check.In Billing → select the Cloud Billing account → Billing export → BigQuery export, enable Detailed usage cost export and select its destination project and dataset. Wait for Google to create the export table. Use the actual full table name, normally
gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>, retaining the generated billing-account suffix. The standardgcp_billing_export_v1_...table, pricing export and FOCUS export are not substitutes: the current cost queries use the detailed export’sresource.nameandresource.global_namefields. See Detailed export schema.Open the service account → Keys → Add key → Create new key → JSON → download the key file. Upload the complete service-account JSON, not an API key, OAuth client file or
gclouduser login credentials. If organization policy prevents key creation, ask your administrator to resolve the supported authentication setup; this form currently requires a service-account JSON key.In Reply CMP, enter the project ID to discover (not the numeric project number), the dataset name and the complete table name as separate fields. Set Billing project ID when the dataset is in another project; otherwise leave it empty. Upload the JSON key file, select Validate, then Create Connection after validation succeeds.
Validation checks project access/state, the eight APIs, Cloud Asset Inventory access, the dataset/table and a BigQuery query. It does not verify the full billing-table schema or guarantee that recent cost rows have arrived. Initial export delivery can take several hours; historical backfill can take up to five days. See Billing export data availability.
Required fields in Reply CMP
Field |
Where to find it |
|---|---|
Connection name |
Your choice |
Project ID |
Project to discover: string project ID, not project number |
Billing dataset name |
Dataset name only, e.g. |
Billing table name |
Full detailed export table name, including its billing-account suffix, without project or dataset |
Billing project ID |
Project hosting the billing dataset; optional only when it is the same as Project ID |
Service account key file |
Complete service-account JSON key downloaded in step 5 |
Permission level |
ReadOnly / ReadWrite |
If validation or cost retrieval fails, see GCP Connection Errors.
Note
Monitoring queries — The roles/viewer role already includes all permissions in roles/monitoring.viewer (monitoring.timeSeries.list, monitoring.alertPolicies.list, and related read operations). No additional roles are required for Monitoring.
What happens after connecting#
Tip
After saving the connection, Reply CMP runs an initial discovery scan. This takes 1–10 minutes depending on provider and account size. Discovery classifies resources as Full or CostOnly, enriches supported types with provider-specific metadata, and builds resource relationships where available. Cost availability depends on provider billing policies, data preparation and CMP refreshes. A successful credential test does not guarantee that cost data is already available; allow for the provider-specific setup and delays above.
Secrets are stored in Azure Key Vault, encrypted with AES-256. Secret values cannot be retrieved after saving — if you need to rotate credentials, update the connection with the new value.
Validating your connection#
The connection wizard runs a live provider test before saving. Azure checks authentication and subscription access/state; AWS additionally checks Resource Explorer and resource-level cost access; GCP additionally checks enabled APIs, Cloud Asset Inventory and a BigQuery query. If validation fails, the connection is not saved. Fix the credentials, permissions or provider configuration indicated by the error and retry.
Managing connections#
After connecting, go to Tenant → Connections to see:
Column |
Meaning |
|---|---|
Last discovery |
Timestamp of the most recent resource scan |
Last cost refresh |
Timestamp of the most recent billing data pull |
Expiry chip |
Red = expired; action needed |
Actions |
Manual Launch Discovery and Refresh Cost Data buttons |