What you’ll get: ewake can query your CloudWatch logs, metrics, and alarms to investigate AWS workload issues, correlating log events with alerts and deployments without requiring you to switch between dashboards.
Prerequisites
- An AWS account with CloudWatch logs, metrics, or alarms
- IAM permissions to create a role and policy in that account
- The AWS regions your CloudWatch data lives in
How it works
The integration uses cross-account IAM role assumption with an External ID, the standard AWS pattern for granting a third party read access without sharing credentials. You create a read-only role in your account, and ewake assumes it on demand for one-hour sessions. ewake never receives long-lived access keys, and the role grants only the read-only actions shown below.Running ewake in your own AWS account? Two things differ. Read Self-hosted deployments at the bottom of this page before you start — the trust policy below names ewake’s account, and yours should not.
Configuration
1
Generate your External ID
Pick a unique External ID, a shared secret you will use in both the IAM role and the ewake connection screen.
- macOS / Linux:
openssl rand -hex 16oruuidgen - Online: uuidgenerator.net
Keep this value secret. It ties ewake’s role-assumption calls to your role, preventing the “confused deputy” security issue.
2
Create the read-only IAM role
Create an IAM role that ewake’s AWS account (Deploy it, replacing the External ID with the one from Step 1:Read the Role ARN from the stack output, that is what you paste into ewake:Prefer the console? Go to CloudFormation → Create stack → upload a template file, upload the same YAML, set ExternalId, and read On the next screen, create and attach this read-only permissions policy:Name the role starting with
058264427976) can assume with your External ID. The role name must start with EwakeCloudWatchReadOnly, ewake’s task role is only permitted to assume roles named this way.Option A, CloudFormation (recommended)Creates the correctly named role, trust policy, and permissions in one step. Save this template as ewake-cloudwatch-readonly.yaml:RoleArn from the stack Outputs tab.Option B, Manual (IAM console)In the AWS IAM Console, go to Roles → Create role → Custom trust policy and paste the following, replacing YOUR-UNIQUE-EXTERNAL-ID with the ID from Step 1:EwakeCloudWatchReadOnly, create it, then copy the Role ARN from the summary page. It looks like arn:aws:iam::123456789012:role/EwakeCloudWatchReadOnly.3
Connect in ewake
In your ewake dashboard, go to Integrations → CloudWatch → Configure.

Click Test connection to verify, then Save.
CloudWatch is connected. Ewake can now query your AWS logs, metrics, and alarms.
PromQL and Application Signals tools require additional permissions and are out of scope for now.
Connect more than one region
Each connection reads one AWS region, and ewake sees only the regions that you connect. Add a connection for each region that your workloads send logs, metrics, or alarms to.1
Open the CloudWatch integration
In your ewake dashboard, go to Integrations → CloudWatch. The regions that you already connected are listed under Connected regions.
2
Add the region
Under Add regions, enter the same IAM Role ARN and External ID as before, and select the new AWS Region. IAM roles are global, so the role from Step 2 works in every region.Click Test connection, then Add regions.
The new region appears under Connected regions. ewake can query it within a few minutes, with no redeployment.
You can connect each region once. To change the role or External ID of a region, disconnect that region and connect it again. Different regions can use different roles, also roles in different AWS accounts, but each region reads from one account.If the test fails with an access error in one region while other regions work, check whether a service control policy (SCP) in your AWS organization denies that region.
Self-hosted deployments
Everything above applies, with two differences.Turn the sidecar on, after connecting
CloudWatch is read through a sidecar container that runs alongside the dashboard. On the hosted service it is always there. In your own account it is off by default, because it runs permanently whether or not you read CloudWatch. Finish Steps 1 to 3 above first — create the role, and connect the integration in the dashboard. Then enable the sidecar interraform.tfvars and apply:
Trust your own deployment, not ewake’s account
The trust policy in Step 2 names ewake’s AWS account, because on the hosted service that is what assumes the role. Your deployment assumes it with its own task role, so that is the principal to trust:tenant_name and company.name are the values in your terraform.tfvars. Using the
CloudFormation template instead? Pass that same role ARN as EwakeAccountId.
Everything else is unchanged: the role name must still start with
EwakeCloudWatchReadOnly, the External ID is still yours to generate, and the
read-only permissions policy is the same.
The role does not have to live in the account the deployment runs in. This is still
cross-account role assumption; it just happens to be the same account when the logs
you want are the ones next to the deployment.
If you hit an issue, contact support@ewake.ai with your AWS Account ID, Role ARN, and the exact error message.