开始之前
- CloudPeek:在装有 iOS 17 或更高版本的 iPhone 或 iPad 上从 App Store 获取,或在装有 Android 8.0 或更高版本的 Android 手机或平板电脑上从 Google Play 获取。
- 一个 AWS 账户,以及该账户中可以创建 IAM 用户和策略或 IAM Identity Center 权限集的登录身份,例如管理员的登录身份。
- 资源所在的区域,例如
eu-west-2。你将在第 2 步中选择它。
1. 为 CloudPeek 创建登录身份
为 CloudPeek 创建专用的登录身份,只授予它会用到的权限:五项 CloudWatch 读取权限、用于编写 AI 小组件的 Amazon Bedrock,以及用于在按账户划分的支出中显示账户名称的 AWS Organizations。它绝不会更改你账户中的任何内容。每项权限的用途。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudPeek",
"Effect": "Allow",
"Action": [
"cloudwatch:ListDashboards",
"cloudwatch:GetDashboard",
"cloudwatch:GetMetricData",
"cloudwatch:ListMetrics",
"cloudwatch:DescribeAlarms",
"bedrock:InvokeModel",
"organizations:ListAccounts"
],
"Resource": "*"
}
]
}
然后选择 CloudPeek 的登录方式:
| 登录方式 | 适用于 |
|---|---|
| 选项 A:使用访问密钥的 IAM 用户 | 个人账户,或希望最快上手。密钥在你停用或轮换之前一直有效。 |
| 选项 B:IAM Identity Center | 通过 AWS 访问门户登录的组织。无需长期密钥:CloudPeek 会持续续订会话,直至达到组织的会话时限。 |
每个选项都提供 AWS 控制台、AWS CLI、CloudFormation 和 Terraform 的步骤。在标签页中选择一种,所有页面都会随之切换;此设备会记住你的选择。
选项 A:使用访问密钥的 IAM 用户
- 在 IAM 控制台中,选择策略 › 创建策略。切换到 JSON 编辑器,粘贴策略,然后选择下一步。将其命名为
CloudPeek,然后选择创建策略。 - 选择用户 › 创建用户。将用户命名为
cloudpeek,不要开启控制台访问权限,然后选择下一步。 - 选择直接附加策略,选中 CloudPeek,选择下一步,然后选择创建用户。
- 打开新用户,转到安全凭证选项卡,然后选择创建访问密钥。选择在 AWS 外部运行的应用程序,然后依次选择下一步和创建访问密钥。
- 保持此页面打开,或下载 .csv 文件。秘密访问密钥只显示一次。
下载上面的策略,然后运行:
aws iam create-policy \
--policy-name CloudPeek \
--policy-document file://cloudpeek-policy.json
aws iam create-user --user-name cloudpeek
aws iam attach-user-policy \
--user-name cloudpeek \
--policy-arn "arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/CloudPeek"
aws iam create-access-key --user-name cloudpeek
最后一条命令会输出访问密钥 ID 和秘密访问密钥。秘密访问密钥只显示一次。
该模板会创建策略和用户。它不会创建访问密钥,因此秘密访问密钥绝不会出现在 CloudFormation 中。
Resources:
# The CloudWatch actions CloudPeek reads with (ListMetrics finds your metrics for presets and AI widgets),
# bedrock:InvokeModel for writing AI widgets in Amazon Bedrock, billed to the account, and
# organizations:ListAccounts for the names of the accounts in charges per linked account (only an
# organisation's management account can list them). The CloudWatch and Organizations actions
# don't support resource-level permissions for this use, so the resource is "*". To allow only
# CloudPeek's model in Bedrock, see https://cloudpeek.app/docs/ai-widgets.html#regions
Policy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: !Ref PolicyName
Description: Access for the CloudPeek app to CloudWatch dashboards, metric data and alarms, and to Amazon Bedrock for AI widgets.
PolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: CloudPeek
Effect: Allow
Action:
- cloudwatch:ListDashboards
- cloudwatch:GetDashboard
- cloudwatch:GetMetricData
- cloudwatch:ListMetrics
- cloudwatch:DescribeAlarms
- bedrock:InvokeModel
- organizations:ListAccounts
Resource: "*"
User:
Type: AWS::IAM::User
Condition: ShouldCreateUser
Properties:
UserName: !Ref UserName
ManagedPolicyArns:
- !Ref Policy
部署该模板,然后为该用户创建访问密钥:
aws cloudformation deploy \
--stack-name CloudPeek-Access \
--template-file cloudpeek-access.yaml \
--capabilities CAPABILITY_NAMED_IAM
aws iam create-access-key --user-name cloudpeek
或者在 CloudFormation 控制台中上传该模板,选中我确认,AWS CloudFormation 可能创建具有自定义名称的 IAM 资源,然后在该用户的安全凭证选项卡上创建密钥(控制台步骤 4 和 5)。
该配置会创建策略和用户。它不会创建访问密钥,因此秘密访问密钥绝不会进入你的 Terraform 状态。
# The CloudWatch actions CloudPeek reads with (ListMetrics finds your metrics for presets and AI widgets),
# bedrock:InvokeModel for writing AI widgets in Amazon Bedrock, billed to the account, and
# organizations:ListAccounts for the names of the accounts in charges per linked account (only an
# organisation's management account can list them). The CloudWatch and Organizations actions
# don't support resource-level permissions for this use, so the resource is "*". To allow only
# CloudPeek's model in Bedrock, see https://cloudpeek.app/docs/ai-widgets.html#regions
data "aws_iam_policy_document" "cloudpeek" {
statement {
sid = "CloudPeek"
effect = "Allow"
actions = [
"cloudwatch:ListDashboards",
"cloudwatch:GetDashboard",
"cloudwatch:GetMetricData",
"cloudwatch:ListMetrics",
"cloudwatch:DescribeAlarms",
"bedrock:InvokeModel",
"organizations:ListAccounts",
]
resources = ["*"]
}
}
resource "aws_iam_policy" "cloudpeek" {
name = var.policy_name
description = "Access for the CloudPeek app to CloudWatch dashboards, metric data and alarms, and to Amazon Bedrock for AI widgets."
policy = data.aws_iam_policy_document.cloudpeek.json
}
resource "aws_iam_user" "cloudpeek" {
count = var.create_user ? 1 : 0
name = var.user_name
}
resource "aws_iam_user_policy_attachment" "cloudpeek" {
count = var.create_user ? 1 : 0
user = aws_iam_user.cloudpeek[0].name
policy_arn = aws_iam_policy.cloudpeek.arn
}
应用该配置,然后为该用户创建访问密钥:
terraform init
terraform apply
aws iam create-access-key --user-name cloudpeek
Terraform 也可以通过 aws_iam_access_key 创建密钥,但这样秘密访问密钥会以明文形式存储在状态中。使用 CLI 或控制台创建密钥可以避免这种情况。
请像对待密码一样对待秘密访问密钥。CloudPeek 将它保存在你的设备上:保存在 iOS 钥匙串中,或在 Android 上使用 Android Keystore 中的密钥加密保存。不要分享它、通过电子邮件发送它,或将它保存在任何公开的地方。
结果:一个以 AKIA 开头的访问密钥 ID 及其秘密访问密钥。
选项 B:IAM Identity Center
为 CloudPeek 提供一个权限集,而不是长期访问密钥。
- 在 IAM Identity Center 控制台中,选择权限集 › 创建权限集,然后选择自定义权限集。
- 在内联策略下,粘贴上面的策略,然后选择下一步。如果该账户中已有
CloudPeek策略(本网站的 CloudFormation 和 Terraform 文件会创建它),也可以改为将其作为客户管理型策略附加。 - 将权限集命名为
CloudPeek,选择下一步,然后选择创建。CloudPeek 会自动续订该角色的凭证,因此使用默认会话持续时间即可。 - 选择 AWS 账户,选中包含你的控制面板的账户,然后选择分配用户或组。选择将使用 CloudPeek 的人员,选中 CloudPeek 权限集,然后选择提交。
在组织的管理账户(或 IAM Identity Center 的委托管理员账户)中、于启用了 IAM Identity Center 的区域运行这些命令。将 Engineering 替换为你的组名,将 123456789012 替换为包含你的控制面板的账户。
INSTANCE_ARN=$(aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text)
STORE_ID=$(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text)
PERMISSION_SET_ARN=$(aws sso-admin create-permission-set \
--instance-arn "$INSTANCE_ARN" \
--name CloudPeek \
--description "CloudWatch and Amazon Bedrock access for the CloudPeek app" \
--query 'PermissionSet.PermissionSetArn' --output text)
aws sso-admin put-inline-policy-to-permission-set \
--instance-arn "$INSTANCE_ARN" \
--permission-set-arn "$PERMISSION_SET_ARN" \
--inline-policy file://cloudpeek-policy.json
GROUP_ID=$(aws identitystore get-group-id \
--identity-store-id "$STORE_ID" \
--alternate-identifier '{"UniqueAttribute": {"AttributePath": "displayName", "AttributeValue": "Engineering"}}' \
--query GroupId --output text)
aws sso-admin create-account-assignment \
--instance-arn "$INSTANCE_ARN" \
--permission-set-arn "$PERMISSION_SET_ARN" \
--principal-type GROUP --principal-id "$GROUP_ID" \
--target-type AWS_ACCOUNT --target-id 123456789012
将权限集分配给账户后,它会自动在该账户中预置。
在组织的管理账户(或委托管理员账户)中、于启用了 IAM Identity Center 的区域部署此模板。实例 ARN 位于 IAM Identity Center 的设置页面上,组的 ID 位于组下该组的页面上。
AWSTemplateFormatVersion: "2010-09-09"
Description: A CloudPeek permission set, assigned to one group in one account.
Parameters:
InstanceArn:
Type: String
Description: Your IAM Identity Center instance, such as arn:aws:sso:::instance/ssoins-1234567890abcdef
GroupId:
Type: String
Description: The ID of the group whose members will use CloudPeek
AccountId:
Type: String
Description: The AWS account with your dashboards
Resources:
PermissionSet:
Type: AWS::SSO::PermissionSet
Properties:
InstanceArn: !Ref InstanceArn
Name: CloudPeek
Description: CloudWatch and Amazon Bedrock access for the CloudPeek app
InlinePolicy:
Version: "2012-10-17"
Statement:
- Sid: CloudPeek
Effect: Allow
Action:
- cloudwatch:ListDashboards
- cloudwatch:GetDashboard
- cloudwatch:GetMetricData
- cloudwatch:ListMetrics
- cloudwatch:DescribeAlarms
- bedrock:InvokeModel
- organizations:ListAccounts
Resource: "*"
Assignment:
Type: AWS::SSO::Assignment
Properties:
InstanceArn: !Ref InstanceArn
PermissionSetArn: !GetAtt PermissionSet.PermissionSetArn
PrincipalType: GROUP
PrincipalId: !Ref GroupId
TargetType: AWS_ACCOUNT
TargetId: !Ref AccountId
使用组织管理账户(或委托管理员账户)的 provider、在启用了 IAM Identity Center 的区域应用此配置。将 Engineering 替换为你的组名,将账户 ID 替换为包含你的控制面板的账户。
data "aws_ssoadmin_instances" "this" {}
locals {
sso_instance_arn = tolist(data.aws_ssoadmin_instances.this.arns)[0]
identity_store_id = tolist(data.aws_ssoadmin_instances.this.identity_store_ids)[0]
}
resource "aws_ssoadmin_permission_set" "cloudpeek" {
name = "CloudPeek"
description = "CloudWatch and Amazon Bedrock access for the CloudPeek app"
instance_arn = local.sso_instance_arn
}
resource "aws_ssoadmin_permission_set_inline_policy" "cloudpeek" {
instance_arn = local.sso_instance_arn
permission_set_arn = aws_ssoadmin_permission_set.cloudpeek.arn
inline_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Sid = "CloudPeek"
Effect = "Allow"
Action = [
"cloudwatch:ListDashboards",
"cloudwatch:GetDashboard",
"cloudwatch:GetMetricData",
"cloudwatch:ListMetrics",
"cloudwatch:DescribeAlarms",
"bedrock:InvokeModel",
"organizations:ListAccounts",
]
Resource = "*"
}]
})
}
# The group whose members will use CloudPeek.
data "aws_identitystore_group" "engineering" {
identity_store_id = local.identity_store_id
alternate_identifier {
unique_attribute {
attribute_path = "DisplayName"
attribute_value = "Engineering"
}
}
}
resource "aws_ssoadmin_account_assignment" "cloudpeek" {
instance_arn = local.sso_instance_arn
permission_set_arn = aws_ssoadmin_permission_set.cloudpeek.arn
principal_type = "GROUP"
principal_id = data.aws_identitystore_group.engineering.group_id
target_type = "AWS_ACCOUNT"
target_id = "123456789012" # the account with your dashboards
}
结果:你的 AWS 访问门户 URL(例如 https://my-company.awsapps.com/start,显示在 IAM Identity Center 控制面板上),以及在该账户中分配给你的 CloudPeek 权限集。
AI 小组件
无需其他设置。上面的策略允许模型查找你的指标(cloudwatch:ListMetrics)并在 Amazon Bedrock 中运行(bedrock:InvokeModel),费用计入该账户。要改用 Anthropic API,或只允许 CloudPeek 使用的模型,请参阅 AI 小组件。
想了解 Bedrock 区域,或如何只允许 CloudPeek 使用的模型?请参阅 AI 小组件 › 区域和权限。
2. 在 CloudPeek 中添加账户
- 打开 CloudPeek。首次打开时,三个简短的页面会介绍它的工作原理:可轻点继续逐页阅读,或轻点跳过。
- 在这些页面的最后一页或账户标签页上,轻点添加账户。
- 在你如何登录 AWS?下,选择访问密钥(选项 A)或 IAM Identity Center(选项 B)。如果两者都还没有,轻点两者都还没有?可打开本页的第 1 步。
- 访问密钥:可以为账户设置标签,例如
prod-platform。输入访问密钥 ID 和秘密访问密钥。选择默认区域,然后轻点验证并保存。 - IAM Identity Center:在起始 URL 中输入访问门户的名称:对于
https://my-company.awsapps.com/start,只需输入my-company。如果不知道区域,保持原样即可,CloudPeek 会自动找到它。轻点在浏览器中继续,确认浏览器中的验证码与 CloudPeek 中的一致,然后批准。回到 CloudPeek 后,选择 AWS 账户,然后选择 CloudPeek 角色和默认区域,再轻点验证并保存。要从同一门户添加更多账户,请轻点添加另一个账户:无需再次在浏览器中批准。
选择资源所在的默认区域。它最初为美国东部(弗吉尼亚北部),即 us-east-1。新小组件会在该区域中查找指标(添加小组件时,也可以在创建小组件中选择其他区域),并且每个小组件都会保留添加时所在的区域,因此在错误区域中添加的小组件不会显示数据。无论你选择哪个区域,支出小组件始终读取 us-east-1 中的数据。
结果:CloudPeek 会向 AWS 验证该登录身份,并检查它能否读取 CloudWatch,然后显示已登录及账户号码,接着为该账户打开创建小组件,停在哪种小组件?这一步。你不需要控制面板:预设和 AI 小组件无需控制面板即可使用。
3. 添加第一个小组件
- 在添加账户时打开的创建小组件中,查看哪种小组件?下方的推荐的预设:这些预设能在该账户中显示数据。如果你已将其关闭,请在小组件标签页上轻点创建小组件;如果有多个账户,请先选择账户。
- 选择其中一个。如果没有列出任何预设,或都不是你想要的,请改为选择预设,然后选择你所用服务的预设,例如 Lambda 调用次数或 SQS 等待中的消息。搜索预设可按名称查找预设;找不到数据的预设会说明原因。
- 查看它在各种尺寸下的样子,然后轻点添加小组件。它会显示在“小组件”标签页上。
支出预设需要账单指标。七个“成本”预设读取 AWS 的预估费用,而 AWS 只有在你开启接收 CloudWatch 账单警报后才会将其发送到 CloudWatch,首批数据需要几个小时才会出现。请参阅开启账单指标。
结果:小组件出现在“小组件”标签页上,下方显示账户和预设。首次添加时,CloudPeek 还会介绍如何将它添加到主屏幕。
另外两种的用法相同。AI 生成根据描述编写小组件(请参阅 AI 小组件),来自控制面板则从该账户的某个 CloudWatch 控制面板中添加任意图表、数字或警报列表(请参阅设计控制面板)。创建小组件介绍了全部三种方式。
4. 将它放到主屏幕上
- 按住主屏幕上的空白区域,直到 App 开始晃动。
- 轻点编辑,然后轻点添加小组件。
- 找到 CloudPeek(显示你的某个小组件的那一个名为 CloudWatch 小组件),选择尺寸,然后轻点添加小组件。
- 在 iOS 18 及更高版本中,iOS 会询问它显示哪个小组件。轻点外部区域即可保留你刚添加的小组件。
主屏幕小组件会显示你在 CloudPeek 中最后添加的小组件,或你通过添加到主屏幕选择的小组件。要显示其他小组件,请按住主屏幕小组件,轻点编辑小组件,然后在小组件下选择。
锁定屏幕小组件的用法相同:请参阅主屏幕和锁定屏幕。
CloudPeek 可以帮你把它放到主屏幕上:
- 点按添加到主屏幕。CloudPeek 添加小组件时会在屏幕底部提供此选项(首次添加时,它显示的步骤顶部也有此选项)。
- 启动器会显示该小组件,并询问是否添加。请确认添加。
主屏幕小组件现在会显示你刚添加的小组件。如果想以后再添加,请在小组件标签页上点按该小组件下方的更多选项(⋮),然后点按添加到主屏幕。
如果你的启动器无法为应用添加小组件,CloudPeek 会改为提供怎么做?,其中包含以下适用于任何启动器的步骤:
- 按住主屏幕上的空白区域,然后点按小组件。
- 找到 CloudPeek,然后按住 CloudWatch 小组件。
- 将它拖到主屏幕上你想放置的位置,然后松开手指。
- 在 Android 12 之前的版本中,CloudPeek 会询问它显示哪个小组件。请选择你刚添加的小组件。
主屏幕小组件会显示你在 CloudPeek 中最后添加的小组件,或你通过添加到主屏幕选择的小组件。要显示其他小组件,请按住它,然后点按设置或编辑按钮(因启动器而异),再选择要显示的小组件。调整大小及其他操作,请参阅主屏幕和锁定屏幕。
5. 检查它是否正常工作
- 主屏幕小组件会显示一个数值或一张图表。中号及更大的小组件底部会注明涵盖的时间段和更新时间,例如过去 3 小时 · 更新于 14:05。
- 主屏幕小组件显示过该小组件后,CloudPeek 的小组件标签页上该小组件下方会显示在主屏幕上。
如果出现问题
| 你看到的情况 | 解决方法 |
|---|---|
| “此时间范围内无数据。”或说明原因的消息,例如“你的 SQS 队列位于 us-west-2。” | 预设会在你添加它们时账户所用的默认区域中查找数据。如果你的资源位于其他区域,小组件会指明位置:在它的屏幕上轻点在 … 中显示即可在该区域中显示。或者:重新添加该预设,预设列表会指明资源所在的位置;在预览中的区域下选择资源所在的区域;或者更改账户的区域(方法)。对于支出预设,请检查是否已开启账单指标,并等待几个小时(请参阅开启 CloudWatch 账单警报)。 |
| 轻点验证并保存时出错 | 请参阅登录。 |
| 小组件上显示“访问被拒绝” | 该登录身份缺少某项权限:请参阅访问被拒绝。 |
| 主屏幕小组件显示的是其他小组件 | 在 iPhone 和 iPad 上,按住它,轻点编辑小组件,然后在小组件下选择其他小组件。在 Android 上,按住它,然后点按设置或编辑按钮。 |
| 其他问题 | 请参阅故障排除,或发送电子邮件至 support@cloudpeek.app。 |
后续步骤
我想要…
- 添加 Lambda、EC2、SQS、支出或警报的现成小组件
- 描述一张图表,让 AI 编写它
- 显示我的某个 CloudWatch 控制面板中的小组件
- 将小组件添加到主屏幕或锁定屏幕、在待机显示中或 Mac 上查看,或更改小组件显示的内容
- 查看我的 AWS 账单以及每项服务的费用
- 只显示我选择的警报
- 添加另一个 AWS 账户,或更改账户的区域
- 登录过期后重新登录
- 在 AWS 控制台或代码中为 CloudPeek 设计控制面板
- 查看 CloudPeek 使用哪些控制面板设置
- 了解小组件何时刷新以及相应的费用
- 查看 CloudPeek 可以访问哪些内容,以及哪些数据会离开我的设备
- 了解小组件消息的含义
本文档使用的术语
| 术语 | 含义 |
|---|---|
| 小组件 | 你在 CloudPeek 中添加的图表、数字、表格或警报列表。它们列在 App 的小组件标签页上。 |
| 主屏幕小组件、锁定屏幕小组件 | 你添加到手机主屏幕(包括 Android 主屏幕)或 iPhone 和 iPad 锁定屏幕上的 CloudPeek 小组件。每个都显示你的一个 CloudPeek 小组件。 |
| 控制面板小组件 | CloudWatch 控制面板上的小组件,可以添加到 CloudPeek 中。 |
| 预设 | CloudPeek 的现成小组件之一。无需控制面板。 |
| AI 小组件 | AI 模型根据你的描述编写的小组件(在 App 中为 AI 生成)。 |
| 固定 | 在浏览控制面板时将控制面板小组件添加到 CloudPeek。 |
| 账户 | 你添加到 CloudPeek 的 AWS 账户,各有自己的登录身份。 |
| 登录身份 | CloudPeek 登录账户的方式:IAM 用户的访问密钥,或 IAM Identity Center。账户标签页会为每个账户标注密钥或 SSO。 |
| 默认区域 | 你为账户选择的区域。除非新小组件指定了其他区域,否则会在该区域中查找指标。 |
| iPhone 和 iPad、Android | 两个 CloudPeek App,用法相同。当步骤或标签有所不同时,本文档会显示其中一种:在每页顶部选择,所有页面都会随之切换。Android 的部分标签措辞略有不同,例如 iOS 上的共享在 Android 上为分享。 |
下载
| 文件 | 说明 |
|---|---|
cloudpeek-policy.json | CloudPeek 所需的权限:五项 CloudWatch 读取权限,以及用于编写 AI 小组件的 Amazon Bedrock。每项权限的用途 |
cloudpeek-access.yaml, cloudpeek-access.tf | 上述策略,以及一个可选的、用于登录的 IAM 用户。指南 |
cloudpeek-setup.yaml, cloudpeek-setup.tf | 一次性创建按服务划分的支出控制面板、上述策略和一个可选的 IAM 用户。指南 |
spend-by-service.json | 按服务划分的支出控制面板的 JSON。指南 |
cloudpeek-alarms.yaml, cloudpeek-alarms.tf | 根据你提供的警报 ARN 创建的警报控制面板。指南 |
production-alarms.json | 警报控制面板的 JSON,含示例 ARN。指南 |
api-health.json | API 健康状况示例控制面板的 JSON。指南 |
获取帮助
在故障排除中查找你看到的消息,或查看常见问题。仍未解决?请发送电子邮件至 support@cloudpeek.app,并附上 App 或小组件显示的内容。切勿向我们发送你的秘密访问密钥。