在 AWS 上使用 Microsoft Sentinel 啟用攻擊中斷動作 (預覽)

本文說明如何配置您的 AWS 環境,使 Microsoft Sentinel 能對擔任 SAML 角色的使用者,或在警報觸發時對 AWS IAM 帳號自動執行行動。 Microsoft Defender 全面偵測回應 中的自動攻擊中斷利用高信心訊號來遏止被入侵的資產,並限制攻擊造成的損害,包括對 AWS 身份的行動。 在開始之前,請確保具備AWS和Microsoft Sentinel所需的先決條件

必要條件

在開始之前,你需要具備以下先決條件:

  • 你有一個有效的 AWS 帳號,擁有管理員權限。
  • 您的 Microsoft Sentinel 分析工作空間連接至統一安全運營入口網站。
  • Microsoft Sentinel 的 AWS 連接器已部署並啟用。
  • AWS CloudTrail 日誌正在被導入 Microsoft Sentinel;請參見「Connect Microsoft Sentinel to Amazon Web Services」以匯入 AWS 服務日誌資料
  • AWS 已設定適當的 IAM 角色與權限,讓 Microsoft Sentinel 能對 IAM 帳號執行操作。
  • Amazon Web Services 解決方案是從 Microsoft Sentinel 的 Content Hub 安裝,因此 Amazon Web Services S3 連接器會顯示在資料連接器圖庫中。

步驟 1:準備 AWS 進行整合

完成以下任務,為您的 AWS 環境準備整合 Microsoft Sentinel。

1.1 為 Microsoft Sentinel 建立專用的 IAM 角色

在 AWS 管理主控台建立一個新的 IAM 角色

  1. 選擇 AWS 服務 作為受信任實體,並選擇 EC2 作為暫時佔位符。 你可以在配置信任關係中,將此信任關係替換為正確的 Microsoft Sentinel 原則。

  2. 為角色附加以下 IAM 政策。 此政策賦予 Microsoft Sentinel 管理 IAM 使用者與角色政策以應對攻擊干擾行動所需的權限。 視需要更換 <YOUR_ACCOUNT_ID> :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:GetUserPolicy",
            "iam:DeleteRolePolicy",
            "iam:PutUserPolicy",
            "iam:AttachUserPolicy",
            "iam:ListUserPolicies",
            "iam:PutRolePolicy",
            "iam:GetUser",
            "iam:DetachUserPolicy",
            "iam:GetRolePolicy",
            "iam:DeleteUserPolicy", 
         ],
         "Resource": "*"
        }
      ]
    }
    

1.2 配置信任關係

為 IAM 角色建立 自訂的信任政策

請使用下列信任原則,並指定 Microsoft Sentinel 整合主體(將 <YOUR_AZURE_SUBSCRIPTION_ID> 替換為您實際的 Azure 訂用帳戶 ID):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com",
        "AWS": "arn:aws:iam::<YOUR_AZURE_SUBSCRIPTION_ID>:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

步驟二:啟用 CloudTrail

在所有 AWS 區域啟用 CloudTrail 日誌功能,讓 Microsoft Sentinel 能接收所需的活動資料。

  1. 在 AWS 控制台,前往 CloudTrail

  2. 確保所有區域都啟用 CloudTrail,且日誌記錄都已啟用。

步驟 3:部署並啟用 Microsoft Sentinel 中的 AWS 連接器

在 Microsoft Sentinel 中部署並啟用 AWS S3 資料連接器,使其能從你的 AWS 環境接收日誌資料。 在開始之前,請確保 Amazon Web Services 解決方案是從 Microsoft Sentinel 的 Content Hub 安裝,這樣 Amazon Web Services S3 連接器才會出現在資料連接器的圖庫中。

  1. 在 Azure 入口網站中,前往 Microsoft Sentinel > 資料連接器

  2. 從資料連接器圖庫中選擇 Amazon Web Services S3

  3. 請依照「Connect Microsoft Sentinel to Amazon Web Services」中的指示,匯入 AWS 服務日誌資料,建立您的 AWS 環境並將其連接到 Microsoft Sentinel。

  4. 提供 IAM 角色 ARN,以及接收來自 AWS 環境之 S3 記錄通知的 Amazon SQS 佇列 URL。 這些值是在你設定連接器時產生的,方法是依照 Connect Microsoft Sentinel 到 Amazon Web Services 來匯入 AWS 服務日誌資料

步驟 4:驗證整合

請使用以下檢查來確認 AWS 連接器整合是否正常運作。

  1. 在 Microsoft Sentinel 中,確認連接器狀態為已連接

  2. 使用 SentinelHealth 診斷資料表驗證記錄擷取與連接器健康情況,該資料表會在您的 Log Analytics 工作區中回報連接器與擷取的健康情況狀態。 同時檢查 AWS SQS 佇列狀態,確認日誌通知是否正在處理中。

  3. 在 AWS 中,請檢查 CloudTrail 和 GuardDuty 事件是否被傳送到 Microsoft Sentinel。

步驟 5:測試整合

請執行以下測試以驗證自動化攻擊中斷回應動作是否如預期般運作。

  1. 在 AWS 中觸發測試警示(例如模擬憑證外洩)。

  2. 確認 Microsoft Sentinel 是否能對受影響的 IAM 帳戶執行已設定的操作。

  3. 在 AWS 和 Microsoft Sentinel 中檢視稽核日誌,以驗證執行成功。

步驟六:監控並維持

請運用以下做法來監控並持續維護整合。

  • 定期檢視 AWS 中的 IAM 角色權限和稽核日誌。
  • 根據需要更新 Microsoft Sentinel 的分析規則與自動化手冊,以反映您的 AWS 環境變化。
  • 監控 Microsoft Sentinel 入口網站中的警報與回應動作。

以下腳本自動化 AWS IAM 角色及 OIDC 提供者設定,以整合 Microsoft Sentinel 與 AWS 以實現攻擊中斷:

以下 Bash 腳本自動化 AWS OIDC 提供者設定及 Microsoft Sentinel 整合的 IAM 角色建立。 執行前,請確認 AWS CLI 已安裝並以擁有 IAM 管理權限的帳號進行驗證。 把程式碼片段存成 bash 檔並執行。

#!/bin/bash
# AWS Sentinel OIDC Setup Script
# Configures IAM roles and policies for Microsoft Sentinel integration

set -e  # Exit on error

# Color codes for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

ms_federated_endpoint="sts.windows.net/33e01921-4d64-4f8c-a055-5bdaffd5e33d"
actions_audience="api://b7c1e142-0933-4310-ba00-8b28878bfece"
role_name="OIDC_Actions_Sentinel"
policy_name="SentinelActionsPolicy"

# Verify AWS credentials are configured
echo -e "${CYAN}Verifying AWS credentials...${NC}"
if ! account_id=$(aws sts get-caller-identity --query Account --output text 2>&1); then
    echo -e "\n${RED}ERROR: AWS credentials not configured or invalid${NC}"
    echo -e "${RED}Details: $account_id${NC}"
    echo -e "\n${YELLOW}Please authenticate using one of these methods:${NC}"
    echo -e "${YELLOW}  1. Run 'aws configure' to set up credentials${NC}"
    echo -e "${YELLOW}  2. Set AWS environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)${NC}"
    echo -e "${YELLOW}  3. Use 'aws sso login --profile <profile-name>' for SSO${NC}"
    exit 1
fi
echo -e "${GREEN}✓ AWS authenticated (Account: $account_id)${NC}"
trust_policy_document=$(cat << EOM
{
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::$account_id:oidc-provider/$ms_federated_endpoint/"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "$ms_federated_endpoint/:aud": "$actions_audience",
                    "sts:RoleSessionName": "MicrosoftSentinel_$account_id"
                }
            }
        }
    ]
}
EOM
)
permissions_policy_document=$(cat << EOM
{
  "Statement": [
    {
      "Sid": "SentinelActionsPermissions",
      "Effect": "Allow",
      "Action": [
        "iam:GetUserPolicy",
        "iam:DeleteRolePolicy",
        "iam:PutUserPolicy",
        "iam:AttachUserPolicy",
        "iam:ListUserPolicies",
        "iam:PutRolePolicy",
        "iam:GetUser",
        "iam:DetachUserPolicy",
        "iam:GetRolePolicy",
        "iam:DeleteUserPolicy",
        "s3:PutBucketPublicAccessBlock"
      ],
      "Resource": "*"
    }
  ]
}
EOM
)

aws iam add-client-id-to-open-id-connect-provider --open-id-connect-provider-arn arn:aws:iam::$account_id:oidc-provider/$ms_federated_endpoint/ --client-id $actions_audience
aws iam create-role --role-name $role_name --assume-role-policy-document "$trust_policy_document" || aws iam update-assume-role-policy --role-name $role_name --policy-document "$trust_policy_document"
aws iam put-role-policy --role-name $role_name --policy-name $policy_name --policy-document "$permissions_policy_document"