View a markdown version of this page

连接 Azure 资源 - AWS DevOps 代理人

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

连接 Azure 资源

Azure 资源集成使 AWS DevOps 代理能够在事件调查期间发现和调查 Azure 订阅中的资源。代理使用 Azure 资源图进行资源发现,并且可以访问 Azure 环境中的指标、日志和配置数据。

此集成遵循两个步骤的过程:在 AWS 帐户级别注册 Azure,然后将特定的 Azure 订阅与各个代理空间相关联。

先决条件

在连接 Azure 资源之前,请确保你有:

  • 访问 AWS DevOps 代理控制台

  • 有权访问目标订阅的 Azure 帐户

  • 对于管理员同意方法:有权在 Microsoft Entra ID 中进行管理员同意的帐户

  • 对于应用程序注册方法:具有配置联合身份凭证权限的 Entra 应用程序,并在您的 AWS 账户中启用了出站联合身份验证

管理员同意方法在 AWS DevOps 代理托管的应用程序中使用基于同意的流程。

第 1 步:开始注册

  1. 登录 AWS 管理控制台并导航到 AWS DevOps 代理控制台

  2. 转到能力提供者页面

  3. 找到 “A zure 云” 部分,然后单击 “注册

  4. 选择管理员同意注册方法

  1. 查看正在申请的权限

  2. 点击继续 — 您将被重定向到 Microsoft Entra 管理员同意页面

  3. 使用有权执行管理员同意的用户主账号登录

  4. 审查 AWS DevOps 代理申请并授予同意

步骤 3:完成用户授权

  1. 管理员同意后,系统会提示您进行用户授权,以验证您作为授权租户成员的身份

  2. 使用属于同一 Azure 租户的帐户登录

  3. 授权后,您将重定向回 AWS DevOps 代理控制台,状态为成功

步骤 4:分配角色

请参阅下面的分配 Azure 角色。选择成员时搜索AWS DevOps 代理

通过应用程序注册注册 Azure 资源

应用程序注册方法使用您自己的 Entra 应用程序和联合身份凭证。

第 1 步:开始注册

  1. 在 AWS DevOps 代理控制台中,转到功能提供者页面

  2. 找到 “A zure 云” 部分,然后单击 “注册

  3. 选择应用程序注册方法

第 2 步:创建和配置您的 Entra 应用程序

按照控制台中显示的说明执行以下操作:

  1. 在您的 AWS 账户中启用出站身份联合(在 IAM 控制台中,前往账户设置出站联合身份验证

  2. 在你的 Microsoft Entra ID 中创建 Entra 应用程序,或者使用现有的 Entra 应用程序

  3. 在应用程序上配置联合身份凭证

第 3 步:提供注册详情

在注册表中填写以下内容:

  • 租户 ID — 你的 Azure 租户标识符

  • 租户名称-租户的显示名称

  • 客户端 ID — 您创建的 Entra 应用程序的应用程序(客户端)ID

  • 受众-联邦凭证的受众标识符

步骤 4:创建 IAM 角色

当您通过控制台提交注册时,将自动创建 IAM 角色。它允许 AWS DevOps 代理使用凭据并调用sts:GetWebIdentityToken

步骤 5:分配角色

请参阅下面的分配 Azure 角色。搜索您在选择成员时创建的 Entra 应用程序。

第 6 步:完成注册

  1. 在 AWS DevOps 代理控制台中确认配置

  2. 单击 “提交” 完成注册

分配 Azure 角色

注册后,授予应用程序对你的 Azure 订阅的读取权限。管理员同意和应用程序注册方法的此步骤相同。

  1. 在 Azure 门户中,导航到你的目标订阅

  2. 前往访问控制 (IAM)

  3. 单击 “添加” > “添加角色分配”

  4. 选择者角色并单击 “下一步

  5. 单击 “选择成员”,搜索应用程序(要么是获得管理员同意的AWS DevOps 代理,要么是您自己的 Entra 应用程序进行应用程序注册)

  6. 选择应用程序,然后单击 “查看 + 分配

  7. (可选)要使代理能够访问 Azure Kubernetes 服务 (AKS) 集群,请完成以下 AKS 访问权限设置。

AKS 访问设置(可选)

步骤 1:Azure 资源管理器 (ARM) 级别访问权限

为应用程序分配 Azure Kubernetes 服务集群用户角色

在 Azure 门户中,前往 “订阅” → “选择订阅” → “访问控制 (IAM)” → “添加角色分配” → 选择 Azure Kubernetes 服务集群用户角色 → 分配给应用程序(要么是获得管理员同意的AWS DevOps 代理,要么是你自己的 Entra 应用程序进行应用程序注册)。

这涵盖了订阅中的所有 AKS 集群。要将范围限定到特定群集,请改为在资源组或单个群集级别进行分配。

第 2 步:访问 Kubernetes API

根据集群的身份验证配置选择一个选项:

选项 A:适用于 Kubernetes 的 Azure 基于角色的访问控制 (RBAC)(推荐)

  1. 如果尚未启用,请在集群上启用 Azure RBAC:Azure 门户 → AKS 集群 → 设置安全配置身份验证和授权 → 选择 Azure RBAC

  2. 分配只读角色:Azure 门户 → 订阅 → 选择订阅 → 访问控制 (IAM)添加角色分配 → 选择 Azure Kubernetes 服务 RBAC 阅读器 → 分配给应用程序

这涵盖了订阅中的所有 AKS 集群。

选项 B:Azure 活动目录 (Azure AD) + Kubernetes RBAC

如果你的集群已经使用默认的 Azure AD 身份验证配置,并且你不想启用 Azure RBAC,则使用此选项。这需要按集群进行kubectl设置。

  1. 将以下清单另存为devops-agent-reader.yaml

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: devops-agent-reader rules: - apiGroups: [""] resources: ["namespaces", "pods", "pods/log", "services", "events", "nodes"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments", "replicasets", "statefulsets", "daemonsets"] verbs: ["get", "list"] - apiGroups: ["metrics.k8s.io"] resources: ["pods", "nodes"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: devops-agent-reader-binding subjects: - kind: User name: "<SERVICE_PRINCIPAL_OBJECT_ID>" apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: devops-agent-reader apiGroup: rbac.authorization.k8s.io
  1. <SERVICE_PRINCIPAL_OBJECT_ID>替换为服务主体的对象 ID。要找到它,请执行以下操作:Azure Portal → Entra ID → 企业应用程序 → 搜索应用程序名称(要么是获得管理员同意的AWS DevOps 代理,要么是你自己的 Entra 应用程序进行应用程序注册)。

  2. 适用于每个集群:

az aks get-credentials --resource-group <rg> --name <cluster-name> kubectl apply -f devops-agent-reader.yaml

权限最低的自定义角色(可选)

为了实现更严格的访问控制,你可以创建一个自定义 Azure 角色,该角色的范围仅限于 A AWS DevOps gent 使用的资源提供者,而不是广泛的读者角色:

{ "Name": "AWS DevOps Agent - Azure Reader", "Description": "Least-privilege read-only access for AWS DevOps Agent incident investigations.", "Actions": [ "Microsoft.AlertsManagement/*/read", "Microsoft.Compute/*/read", "Microsoft.ContainerRegistry/*/read", "Microsoft.ContainerService/*/read", "Microsoft.ContainerService/managedClusters/commandResults/read", "Microsoft.DocumentDB/*/read", "Microsoft.Insights/*/read", "Microsoft.KeyVault/vaults/read", "Microsoft.ManagedIdentity/*/read", "Microsoft.Monitor/*/read", "Microsoft.Network/*/read", "Microsoft.OperationalInsights/*/read", "Microsoft.ResourceGraph/resources/read", "Microsoft.ResourceHealth/*/read", "Microsoft.Resources/*/read", "Microsoft.Sql/*/read", "Microsoft.Storage/*/read", "Microsoft.Web/*/read" ], "NotActions": [], "DataActions": [], "NotDataActions": [], "AssignableScopes": [ "/subscriptions/{your-subscription-id}" ] }

将订阅与代理空间关联

在帐户级别注册 Azure 后,将特定订阅与您的代理空间相关联:

  1. 在 AWS DevOps 代理控制台中,选择您的代理空间

  2. 前往 “功能” 选项卡

  3. 在 “次要来源” 部分中,单击 “添加

  4. 选择 Azure

  5. 为要关联的 Azure 订阅提供订阅 ID

  6. 单击 “添加” 完成关联

你可以将多个订阅与同一个代理空间相关联,让代理在你的 Azure 环境中可见。

管理 Azure 资源连接

  • 查看已连接的订阅-在 “功能” 选项卡中,“次要来源” 部分列出了所有连接的 Azure 订阅。

  • 删除订阅-要断开订阅与代理空间的连接,请在 “辅助来源” 列表中选择该订阅并单击 “删除”。这不会影响账户级别的注册。

  • 移除注册-要完全删除 Azure Cloud 注册,请转到功能提供者页面并删除注册。必须先移除所有代理空间关联。