Skip to main content
关于 cloudlist 可用的所有标志和选项,请查看使用方法页面。在本页面,您可以找到一些带有输出的示例、Cloudlist 支持的详情以及配置细节。
如果您有问题,请通过帮助联系我们。

基本示例

cloudlist
这将列出配置文件中所有已配置供应商的资产。还可以使用 providerid 过滤器指定特定供应商和资产类型。
cloudlist -provider aws,gcp

   ________                _____      __ 
  / ____/ /___  __  ______/ / (_)____/ /_
 / /   / / __ \/ / / / __  / / / ___/ __/
/ /___/ / /_/ / /_/ / /_/ / / (__  ) /_  
\____/_/\____/\__,_/\__,_/_/_/____/\__/  v0.0.1        

    projectdiscovery.io

[WRN] 谨慎使用。您需要对自己的行为负责
[WRN] 开发者不承担任何误用或损害的责任。
[INF] 正在列出来自 AWS (prod) 供应商的资产。
example.com
example2.com
example3.com
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
6.6.6.6
[INF] 从 AWS 服务 (prod) 中找到了 2 个主机和 6 个 IP

将 cloudlist 与 Nuclei 一起使用

扫描来自各种云供应商的资产以进行安全评估:
cloudlist -silent | httpx -silent | nuclei -t cves/

支持的供应商

有关支持的云供应商的完整列表,请参阅云供应商

配置文件

默认的供应商配置文件应位于 $HOME/.config/cloudlist/provider-config.yaml,以下是示例内容。为了运行此工具,需要在配置文件中为所需的供应商更新密钥。

供应商配置示例

- provider: do # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: xxxx
  # digitalocean_token 是 digitalocean 云平台的 API 密钥
  digitalocean_token: $DIGITALOCEAN_TOKEN

- provider: scw # provider 是供应商的名称
  # scaleway_access_key 是 scaleway API 的访问密钥
  scaleway_access_key: $SCALEWAY_ACCESS_KEY
  # scaleway_access_token 是 scaleway API 的访问令牌
  scaleway_access_token: $SCALEWAY_ACCESS_TOKEN

- provider: aws # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # aws_access_key 是 AWS 账户的访问密钥
  aws_access_key: $AWS_ACCESS_KEY
  # aws_secret_key 是 AWS 账户的密钥
  aws_secret_key: $AWS_SECRET_KEY
  # aws_session_token 是通过 STS 检索的临时安全凭证的会话令牌(可选)
  aws_session_token: $AWS_SESSION_TOKEN

- provider: gcp # provider 是供应商的名称
  # profile 是供应商配置文件的名称
  id: logs
  # gcp_service_account_key 是具有列表权限的 Google Cloud 服务账户的压缩 JSON
  gcp_service_account_key: '{xxxxxxxxxxxxx}'

- provider: azure # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # client_id 是 azure 账户注册应用程序的客户端 ID(如果使用 CLI 认证则不需要)
  client_id: $AZURE_CLIENT_ID
  # client_secret 是 azure 账户注册应用程序的密钥 ID(如果使用 CLI 认证则不需要)
  client_secret: $AZURE_CLIENT_SECRET
  # tenant_id 是 azure 账户注册应用程序的租户 ID(如果使用 CLI 认证则不需要)
  tenant_id: $AZURE_TENANT_ID
  # subscription_id 是 azure 订阅 ID
  subscription_id: $AZURE_SUBSCRIPTION_ID
  # use_cli_auth 如果设置为 true,cloudlist 将使用 azure CLI 认证
  use_cli_auth: true

- provider: cloudflare # provider 是供应商的名称
  # email 是 cloudflare 的电子邮件
  email: $CF_EMAIL
  # api_key 是 cloudflare 的 API 密钥
  api_key: $CF_API_KEY
  # api_token 是 cloudflare 的范围 API 令牌(可选)
  api_token: $CF_API_TOKEN

- provider: heroku # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # heroku_api_token 是 Heroku 账户的 API 密钥
  heroku_api_token: $HEROKU_API_TOKEN

- provider: linode # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # linode_personal_access_token 是 linode 账户的个人访问令牌
  linode_personal_access_token: $LINODE_PERSONAL_ACCESS_TOKEN

- provider: fastly # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # fastly_api_key 是 fastly 账户的个人 API 令牌
  fastly_api_key: $FASTLY_API_KEY

- provider: alibaba # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # alibaba_region_id 是资源的区域 ID
  alibaba_region_id: $ALIBABA_REGION_ID
  # alibaba_access_key 是阿里云账户的访问密钥 ID
  alibaba_access_key: $ALIBABA_ACCESS_KEY
  # alibaba_access_key_secret 是阿里云账户的密钥
  alibaba_access_key_secret: $ALIBABA_ACCESS_KEY_SECRET

- provider: namecheap # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # namecheap_api_key 是 namecheap 账户的 API 密钥
  namecheap_api_key: $NAMECHEAP_API_KEY
  # namecheap_user_name 是 namecheap 账户的用户名
  namecheap_user_name: $NAMECHEAP_USER_NAME

- provider: terraform # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # tf_state_file 是 terraform 状态文件(terraform.tfstate)的位置
  tf_state_file: path/to/terraform.tfstate

- provider: hetzner # provider 是供应商的名称
  # id 是用户为过滤定义的名称(可选)
  id: staging
  # auth_token 是 hetzner 认证令牌
  auth_token: $HETZNER_AUTH_TOKEN

- provider: nomad # provider 是供应商的名称
  # nomad_url 是 nomad 服务器的 URL
  nomad_url: http:/127.0.0.1:4646/
  # nomad_ca_file 是 nomad CA 文件的路径
  # nomad_ca_file: <path-to-ca-file>.pem
  # nomad_cert_file 是 nomad 证书文件的路径
  # nomad_cert_file: <path-to-cert-file>.pem
  # nomad_key_file 是 nomad 证书密钥文件的路径
  # nomad_key_file: <path-to-key-file>.pem
  # nomad_token 是 nomad 认证令牌
  # nomad_token: <nomad-token>
  # nomad_http_auth 是 nomad http 认证值
  # nomad_http_auth: <nomad-http-auth-value>

- provider: consul # provider 是供应商的名称
  # consul_url 是 consul 服务器的 URL
  consul_url: http://localhost:8500/
  # consul_ca_file 是 consul CA 文件的路径
  # consul_ca_file: <path-to-ca-file>.pem
  # consul_cert_file 是 consul 证书文件的路径
  # consul_cert_file: <path-to-cert-file>.pem
  # consul_key_file 是 consul 证书密钥文件的路径
  # consul_key_file: <path-to-key-file>.pem
  # consul_http_token 是 consul 认证令牌
  # consul_http_token: <consul-token>
  # consul_http_auth 是 consul http 认证值
  # consul_http_auth: <consul-http-auth-value>

- provider: openstack # provider 是供应商的名称
  # id 是供应商 ID 的名称
  id: staging
  # identity_endpoint 是用于认证的 OpenStack 身份端点
  identity_endpoint: $OS_IDENTITY_ENDPOINT
  # domain_name 是用于认证的 OpenStack 域名
  domain_name: $OS_DOMAIN_NAME
  # tenant_name 是 OpenStack 项目名称
  tenant_name: $OS_TENANT_NAME
  # username 是用于认证的 OpenStack 用户名
  username: $OS_USERNAME
  # password 是用于认证的 OpenStack 密码
  password: $OS_PASSWORD

- provider: kubernetes # provider 是供应商的名称
  # id 是供应商 ID 的名称
  id: staging
  # kubeconfig_file 是 kubeconfig 文件的路径
  kubeconfig: path/to/kubeconfig
  # context 是从 kubeconfig 文件中使用的上下文
  context: <context-name>

作为库使用 Cloudlist

可以在 Go 程序中直接使用该库。以下代码片段概述了如何从所有或给定的云供应商列出资产。
package main

import (
  "context"
  "log"

  "github.com/projectdiscovery/cloudlist/pkg/inventory"
  "github.com/projectdiscovery/cloudlist/pkg/schema"
)

func main() {
  inventory, err := inventory.New(schema.Options{
    schema.OptionBlock{"provider": "digitalocean", "digitalocean_token": "ec405badb974fd3d891c9223245f9ab5871c127fce9e632c8dc421edd46d7242"},
  })
  if err != nil {
    log.Fatalf("%s\n", err)
  }

  for _, provider := range inventory.Providers {
    resources, err := provider.Resources(context.Background())
    if err != nil {
      log.Fatalf("%s\n", err)
    }
    for _, resource := range resources.Items {
      _ = resource // 对资源做一些处理
    }
  }
}