AWS環境を可視化できるソリューション【Lucidscale】を使って構成図を自動生成してみた

2024.02.29

こんにちは。
繁松です。

はじめに

AWS,Azure,GCPなどのクラウド環境を可視化できるサービス「Lucidscale」を使ってAWSの構成図を自動生成してみたのでブログにしました。
Lucidscaleを使うことで以下のような構成図を自動で生成することができます。

やってみた

アカウント作成

Lucidscaleのアカウントを作成します。
https://lucidscale.com/ja

料金

2週間は無料で利用できます。

無料期間以降も継続利用する場合の料金は以下です。

  • インディビジュアルプラン(個人利用プラン)
    • 1ユーザー(作成者):¥269,000/年
  • チームプラン(チーム利用プラン)
    • 1ユーザー(作成者);¥269,000/年
    • 1ユーザー(エクスプローラー):¥54,900/年

https://lucid.app/ja/pricing/lucidscale#/pricing/lucidscale

言語設定変更

言語設定を日本語に変更します。

[Account Setting]を選択

[User Settings]を選択し、[Language settings]を[日本語]に変更し、[Save changes]を選択。

構成図の自動生成

構成図を自動生成するための設定を行います。
[+新規] > [Lucidscale] > [AWS モデル] を選択します。

リソース情報のインポート方法は3パターンあります。
今回は推奨の[クロスアカウントロール]でインポートします。

CloudFormationでリソース情報をインポートするために必要なロールを作成します。
別ウィンドウでAWSアカウントにログインしたあとに、[CloudFormation を起動]を選択します。

スタック名やパラメータはデフォルトで入力されているので、そのまま[スタックの作成]を選択します。

作成されたロールを確認します。
ロール名と、ARNが必要になるのでメモします。

作成されたロールにアタッチされるポリシーには読み取りに関する権限(listやdescribe)が付与されています。

  • ロールにアタッチされるポリシー
    • ReadOnlyAccess
    • LucidImportPolicy
LucidImportPolicy
{<br />
    "Version": "2012-10-17",<br />
    "Statement": [<br />
        {<br />
            "Action": [<br />
                "apigateway:GET",<br />
                "autoscaling:DescribeAutoScalingGroups",<br />
                "autoscaling:DescribeLaunchConfigurations",<br />
                "cloudfront:ListDistributions",<br />
                "cloudfront:ListTagsForResource",<br />
                "cloudtrail:DescribeTrails",<br />
                "cloudtrail:ListTags",<br />
                "cloudtrail:ListTrails",<br />
                "dynamodb:DescribeTable",<br />
                "dynamodb:ListTables",<br />
                "dynamodb:ListTagsOfResource",<br />
                "ec2:DescribeCustomerGateways",<br />
                "ec2:DescribeInstances",<br />
                "ec2:DescribeInternetGateways",<br />
                "ec2:DescribeNatGateways",<br />
                "ec2:DescribeNetworkAcls",<br />
                "ec2:DescribeNetworkInterfaces",<br />
                "ec2:DescribeRouteTables",<br />
                "ec2:DescribeSecurityGroups",<br />
                "ec2:DescribeSubnets",<br />
                "ec2:DescribeTransitGateways",<br />
                "ec2:DescribeTransitGatewayAttachments",<br />
                "ec2:DescribeTransitGatewayRouteTables",<br />
                "ec2:DescribeVolumes",<br />
                "ec2:DescribeVpcs",<br />
                "ec2:DescribeVpcEndpoints",<br />
                "ec2:DescribeVpcEndpointConnections",<br />
                "ec2:DescribeVpnConnections",<br />
                "ec2:DescribeVpnGateways",<br />
                "ec2:DescribeVpcPeeringConnections",<br />
                "ec2:SearchTransitGatewayRoutes",<br />
                "ecs:DescribeClusters",<br />
                "ecs:DescribeServices",<br />
                "ecs:DescribeTasks",<br />
                "ecs:ListClusters",<br />
                "ecs:ListServices",<br />
                "ecs:ListTasks",<br />
                "eks:DescribeCluster",<br />
                "eks:ListClusters",<br />
                "elasticfilesystem:DescribeFileSystems",<br />
                "elasticache:DescribeCacheClusters",<br />
                "elasticache:DescribeCacheSubnetGroups",<br />
                "elasticloadbalancing:DescribeLoadBalancers",<br />
                "elasticloadbalancing:DescribeTags",<br />
                "elasticloadbalancing:DescribeTargetGroups",<br />
                "elasticloadbalancing:DescribeTargetHealth",<br />
                "elasticmapreduce:DescribeCluster",<br />
                "elasticmapreduce:ListClusters",<br />
                "es:DescribeElasticsearchDomains",<br />
                "es:ListDomainNames",<br />
                "es:ListTags",<br />
                "firehose:DescribeDeliveryStream",<br />
                "firehose:ListDeliveryStreams",<br />
                "firehose:ListTagsForDeliveryStream",<br />
                "glacier:DescribeVault",<br />
                "glacier:ListVaults",<br />
                "iam:ListAccountAliases",<br />
                "kinesis:DescribeStream",<br />
                "kinesis:ListShards",<br />
                "kinesis:ListStreams",<br />
                "kinesis:ListTagsForStream",<br />
                "lambda:ListFunctions",<br />
                "lambda:ListTags",<br />
                "kafka:ListClustersV2",<br />
                "network-firewall:ListFirewalls",<br />
                "network-firewall:DescribeFirewall",<br />
                "redshift:DescribeClusters",<br />
                "rds:DescribeDBClusters",<br />
                "rds:DescribeDBInstances",<br />
                "rds:ListTagsForResource",<br />
                "route53:ListHostedZones",<br />
                "route53:ListResourceRecordSets",<br />
                "route53:ListTagsForResource",<br />
                "s3:GetBucketLocation",<br />
                "s3:GetBucketNotification",<br />
                "s3:GetBucketPolicyStatus",<br />
                "s3:GetBucketTagging",<br />
                "s3:GetEncryptionConfiguration",<br />
                "s3:ListAllMyBuckets",<br />
                "sns:GetTopicAttributes",<br />
                "sns:ListTopics",<br />
                "sns:ListTagsForResource",<br />
                "sqs:GetQueueAttributes",<br />
                "sqs:ListQueues",<br />
                "sqs:ListQueueTags",<br />
                "states:DescribeActivity",<br />
                "states:ListActivities",<br />
                "states:DescribeStateMachine",<br />
                "states:ListStateMachines",<br />
                "states:ListTagsForResource",<br />
                "sts:GetCallerIdentity"<br />
            ],<br />
            "Resource": "*",<br />
            "Effect": "Allow"<br />
        }<br />
    ]<br />
}<br />

Lucidscaleに戻り、ロール名とロールARNを入力し次に進みます。

インポートするアカウントを選択し次に進みます。

インポートするリソースとリージョンを選択し次に進みます。

モデル名を入力し[AWSモデル作成]を選択します。

私の環境では数十分ほどで生成されました。

生成された構成図

生成された構成図です。

S3バケットは(28)と表示されていますが、展開することで全てのバケットを確認できます。

リソース毎に表示/非表示を切り替えることも可能です。 

ALB/ターゲットグループと関連付いたEC2を確認するには、行のタブを開き[Load Balancing]にチェックをいれます。
矢印が表示され関連付いたEC2を確認することができます。

ネットワークの経路についても[Networking]にチェックをいれることで確認できます。

アイコンを選択することでルートテーブルのルート情報やタグの情報も確認できます。

セキュリティグループを選択すると、インバウンドルール、アウトバウンドルールを確認できます。

リソースに更新があった場合は、
[データハブ] > [AWS] > [:] > [AWSからのアカウントを更新] を選択します。

データハブの更新完了後に[モデルデータ] > [モデルを同期] を選択することで構成図を更新できます。

対象リージョンについて

対象リージョンは以下のリージョンです。

  • ap-northeast-1(東京)
  • ap-northeast-2(ソウル)
  • ap-northeast-3(大阪)
  • ap-south-1(ムンバイ)
  • ap-southeast-1(シンガポール)
  • ap-southeast-2(シドニー)
  • ca-central-1(カナダ 中部)
  • eu-central-1(フランクフルト)
  • eu-north-1(ストックホルム)
  • eu-west-1(アイルランド)
  • eu-west-2(ロンドン)
  • eu-west-3(パリ)
  • sa-east-1(サンパウロ)
  • us-east-1(バージニア北部)
  • us-east-2(オハイオ)
  • us-west-1(北カリフォルニア)
  • us-west-2(オレゴン)

Lucidscaleでサポートされているリージョン、リソース、および回線

対象リソースについて

対象のリソースは以下のリソースです。

  • ALB (Load Balancers v2, Target Groups, Target Health Description)
  • API Gateway (v1, v2)
  • AWS Managed Streaming for Kafka
  • Autoscaling (Groups, Launch Configurations)
  • CloudFront (Distributions)
  • CloudTrail
  • Curated data for Transit Gateway Routes and NACLS
  • Customer Gateway
  • DocumentDB
  • DynamoDB (Tables)
  • EC2 (Instances, NAT Gateways, Network ACLs, Route Tables, Security Groups, Subnets, Transit Gateway, Volumes, VPC Endpoints, VPC Peering Connections, VPCs, VPN Gateways)
  • ECS: This is located in a designated view called “ECS View”. The current functionality will provide a view of the clusters, services and tasks running in your environment. It also splits clusters into EC2 and Fargate containers.
  • EFS File System
  • EKS clusters
  • Elasticache
  • Elastic Network Interface
  • Elastisearch
  • ELBs (Load Balancers)
  • EMR
  • Glacier
  • Kinesis Data Streams
  • Kinesis Firehose
  • Lambda (Functions)
  • Network Firewalls
  • RDS (Clusters, Instances)
  • Redshift (Clusters)
  • Route 53
  • S3 (Buckets - Additional Metadata: roles, groups, etc.)
  • SNS (Topics, met)
  • SQS (Queues)
  • Step Functions
  • Transit Gateway Routes Metadata
  • Lucidscale では、メタデータ内で別のリソースを明示的に参照するリソース間に線を引くことができます。
  • Elastic Load Balancers (ELBs) to Auto Scaling Groups (ASGs) [ELB→ ASG]
  • ELBs to EC2 instances [ELB → EC2]
  • CloudFront Distributions to S3 Buckets [CloudFront → S3]
  • Application Load Balancers (ALBs) to EC2 [ALB → EC2]
  • VPC Peering Connections
  • Route 53 Hosted Zones to ELBs, S3 Buckets and CloudFront Distributions [Route 53 Hosted Zones → ELBs, S3, CloudFront]
  • Transit Gateway to Peered Transit Gateway and Virtual Private Cloud (VPC) attachments [Transit Gateways → Transit Gateways, VPCs]
  • Route Table to Internet Gateways and NAT Gateways [Route table → Internet Gateways, NAT Gateways]
  • API Gateway to Lambda [API Gateway → Lambda]
  • VPN Connections via Transit gateway [Transit Gateway → VPN Connection → Customer Gateway]
  • VPN Connections via VPN gateway [VPN Gateway → VPN Connection → Customer Gateway]
  • HostedZones → ALBs

Lucidscaleでサポートされているリージョン、リソース、および回線

さいごに

AWS,Azure,GCPの環境を可視化できるサービス「Lucidscale」を使って構成図を自動生成してみました。
AWS環境の構成管理にかなり便利なサービスだと思います。

次回はLucidscaleのインポート方法で「CLIを使用した可視化」を選択し構成図の作成を試してみたいと思います。