Site icon Mr. 沙先生

AWS CROSS-Account, Region of SSM Inventory with QuickSight 集中帳號管理所有盤點資訊

System Manager Inventory 是 AWS re’invnet 2019 釋出的新功能,主要是用於收集所有 EC2 的系統資訊,這是企業管理中很常見的一環,以前要處理這些事情都必須透過 cron 把系統資訊丟出來非常麻煩,尤其是當 EC2 一多的時候幾乎是一個不受控的狀態。

這篇文章的需求除了收集 EC2 Inventory 以外,還希望可以 Cross-Account, Region 並且統一收集到一個 S3 bucket 做保存,除此之外也要能透過 QuickSight 隨時查看整體資訊,架構圖大概會像這樣:

Environments

建立 Central Account Inventory

第一次設定 Inventory 必須要 Setup Inventory

System Manager -> Inventory -> Setup Inventory

Setup Inventory 幾個參數解釋

Setup Inventory 完成後就可以看到 EC2 開始將資訊拋到 Inventory

建立 Central Account Inventory Detailed View

Inventory 預設只能在 Account/Region 內運作,若要做到 Cross-Account, Region 則要使用 Detailed View 的功能集成 S3, Glue, Athena 服務

Detailed View 的運作方法是:

  1. 建立 Resource Data Syncs 將 Inventory 丟到 S3 bucket (可選 KMS 加密)
  2. Glue Crawlers 每 12 小時將存在 S3 bucket 的 Inventory 同步 Data catalog (automatically create database and tables)
  3. Athena 查詢 Glue Data catalog

使用 Detailed View 會有 Glue, S3, Athena 的費用產生,但費用相對不高,如果不需要這麼即時查詢,建議可以將 Glue Crawlers 的時間拉長。

建立 Detailed View

先建立 S3 bucket (central-ssm-resources-data-1234567890) 作為 Inventory 儲存,而 Bucket Policy 參照以下設定:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SSMBucketPermissionsCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::central-ssm-resources-data-1234567890"
        },
        {
            "Sid": " SSMBucketOrgDelivery",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::central-ssm-resources-data-1234567890/*/accountid=*/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": " SSMBucketDelivery",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::central-ssm-resources-data-1234567890/*/accountid=*/*",
            "Condition": {
                "StringEquals": {
                    "s3:RequestObjectTag/OrgId": "o-sh3qftx8ug",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": " SSMBucketDeliveryTagging",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:PutObjectTagging",
            "Resource": "arn:aws:s3:::central-ssm-resources-data-1234567890/*/accountid=*/*"
        }
    ]
}

建立 Resource Data Syncs 將上述 S3 bucket 資訊填入

建立大約要等幾分鐘 Glue Crawlers 完成後 Detailed View 才會有資料,或是到 Glue Crawlers 確認 Parsing 狀態。

完成後的 Detailed View 可以查到在 S3 的 Inventory 資料

建立 Linked Account Inventory 與 Resource Data Syncs

由於所有分析的來源都是從 Central Account 的 S3 bucket,同理也能將 Linked Account 的 Inventory 透過 Resource Data Syncs 將資料丟到 Central Account 的 S3 bucket (central-ssm-resources-data-1234567890)

Linked Account 的數量也許很多,建議使用 CloudFormation StackSet 同步設定 Resource Data Syncs 可以參考 shazi7804/aws-cloudformation-ssm-Inventory-resource-data-syncs

部署 CloudFormation StackSet 後可以看到多個帳號已經建立好 Resource Data Syncs,這時 Central Account 的 S3 bucket 就會陸續收到 Linked Account 的 Inventory 資訊

同理 Detailed View 也應該要能查到 Linked Account 的 EC2 Inventory

Inventory with QuickSight

除了即時查詢以外,圖像化也很重要,透過 QuickSight 從 Data catalog 將資訊顯示:

設定 QuickSight Datasets 將 Inventory Table 串起來,Inventory schema 可以拿 region, accountid, resourceid 這幾個欄位作為 mapping

再到 Analyses 將 Visuals 拉出來呈現到 Dashboard 上

接下來只要有任何的 EC2 Launch 都會記錄在 S3 / QuickSight 上,即便被 Terminal 掉也會留下 Inventory 紀錄。

Exit mobile version