Skip to content

本文为 SPIRE 官方文档 plugin_agent_nodeattestor_azure_msi 的中文译本,以英文原文为准。 🔗 穿越源码分析:Agent 详解 · NodeAttestor

Agent 插件:NodeAttestor "azure_msi"

必须与服务端 azure_msi 插件配合使用

azure_msi 插件用于认证运行在 Microsoft Azure 中、且启用了托管服务标识(Managed Service Identity,MSI)的节点。Agent 节点获取一个已签名的 MSI 令牌,并将其传递给 Server。Server 校验该已签名的 MSI 令牌,并从中提取租户 ID(Tenant ID)和主体 ID(Principal ID)以构成 Agent 的 SPIFFE ID。该 SPIFFE ID 形如:

xml
spiffe://<trust_domain>/spire/agent/azure_msi/<tenant_id>/<principal_id>

Agent 必须运行在 Azure 中、且运行在已启用 MSI 的虚拟机(VM)内,才能使用这种节点认证方式。

配置项说明默认值
resource_id为 MSI 令牌请求的资源 ID(resource ID,或称受众 audience)。Server 会拒绝其无法识别的资源 ID 对应的令牌https://management.azure.com/

需要特别注意的是,resource ID 必须是某个知名的 Azure 服务,或者是 Azure AD 中已注册应用的 app ID。Azure 不会为它不认识的资源签发 MSI 令牌。

所选择的 resource ID 具有安全方面的影响。如果 Server 被攻陷,Agent 就等于把"被攻陷的 Server 代表 Agent 虚拟机访问相应资源"的权限授予了它。如果这对你的部署而言是个顾虑,你应当在 Azure AD 中注册一个应用,并使用一个虚拟(dummy)URI 作为资源,以此限制可被重放(replay)的范围。

一个使用默认 resource ID(即 resource manager)的示例配置:

hcl
    NodeAttestor "azure_msi" {
        plugin_data {
        }
    }

一个使用自定义 resource ID 的示例配置:

hcl
    NodeAttestor "azure_msi" {
        plugin_data {
            resource_id = "http://example.org/app/"
        }
    }