什么是托管身份 (MSI)?

tor*_*tte 2 azure-managed-identity

Azure 文档将托管身份定义为

Azure Active Directory 中由 Azure 自动管理的标识(更具体地说,一种特殊类型的服务主体)。在开发云应用程序时,通常使用托管标识来管理用于向 Azure 服务进行身份验证的凭据。

但仍然不确定它们是什么。

tor*_*tte 6

0. 姓名

\n
\n

Azure 资源的托管标识是以前称为托管服务标识 (MSI)的服务的新名称。

\n
\n

谢谢@WillHuang

\n

1. 定义

\n
\n

托管标识(MSI 1 ) 是一种特殊类型的服务主体,分配给Azure 资源,支持使用托管标识来访问其他 Azure 服务/资源而无需凭据

\n
\n

2. 条款

\n

此处将使用以下术语(一些是任意选择的):

\n
    \n
  • MSI 资源支持拥有(或赋予)托管标识的 Azure 资源

    \n
  • \n
  • 目标资源MSI 资源尝试访问的Azure 资源

    \n
  • \n
  • 身份Azure Active Directory 身份);快速概述:

    \n
    security\nprincipal\n    \xe2\x94\x82\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x96\xba user\n    \xe2\x94\x82\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x96\xba group\n    \xe2\x94\x82                  managed\n    \xe2\x94\x94\xe2\x94\x80\xe2\x96\xba service  \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x96\xba identity\n        principal      (MSI)\n
    Run Code Online (Sandbox Code Playgroud)\n

    (另请参阅[此答案](/sf/answers/5309538881/)。)

    \n
  • \n
  • 服务主体

    \n
    \n

    应用程序或服务用来访问特定 Azure 资源的安全标识。您可以将其视为应用程序的用户身份(用户名和密码或证书)。
    \n (来自分配 Azure 角色的步骤

    \n
    \n

    或者

    \n
    \n

    当组织使用 Azure Active Directory 时,其令牌可用于验证用户应用程序、服务或自动化工具中的特定 Azure 资源并授予其访问权限

    \n

    本质上,通过使用服务主体,您可以避免在 Azure AD 中创建 \xe2\x80\x9cfake 用户\xe2\x80\x9d(我们将其称为本地 Active Directory\xe2\x80\xa6 中的服务帐户)来管理当您需要访问 Azure 资源时进行身份验证。
    \n (来自揭秘服务主体 \xe2\x80\x93 托管身份

    \n
    \n
  • \n
\n

3. 托管身份的属性

\n

长话短说

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n
用户分配的 MSI系统分配的 MSI
如果MSI资源被删除怎么办?未分配且保持不变已删除

一个 MSI 资源可以分配多少个?
任何数字只有1个

目标资源上可以授权多少个?
任何数字任何数字
是否可以
同时在多个目标资源上进行授权?
是的是的
\n
\n

MSI 资源=/= 托管身份)

\n

MSI 资源托管身份之间的关系类似于带有标签的框或具有姓名和昵称/别名的人员:

\n

MSI资源

\n
    \n
  • 可以拥有一个系统分配的托管身份

    \n

    (如一个人只允许有一个法定姓名)

    \n
  • \n
  • 可以分配许多用户分配的托管身份

    \n

    (例如一个人的同事可能会用不同的昵称来称呼一个人)

    \n
  • \n
\n

不确定这种设计选择的意图是什么,但这允许为MSI 资源创建多个身份(或者,换句话说,MSI 资源可以采用多个身份),每个身份都可以被授权对 MSI 资源执行不同的操作目标资源。(目标资源还可以授权多个 MSI;请参阅下面的“示例”部分。)

\n

当删除MSI 资源时,

\n
    \n
  • 系统分配的MSI 也随之删除

    \n
  • \n
  • 用户分配的托管身份将保留(这些身份只会被取消分配)

    \n
  • \n
\n

3.1 为什么不需要凭证?

\n

因为使用的是访问令牌。总体工作流程总结如下:

\n
    \n
  1. 将托管标识分配给MSI 资源
  2. \n
  3. 授予对目标资源上该托管标识的访问权限。
  4. \n
  5. 请求访问令牌
  6. \n
  7. 通过/从MSI 资源使用令牌对目标资源执行操作。
  8. \n
  9. 当令牌过期时,转到步骤 3。
  10. \n
\n

有关详细信息,请参阅下面的“示例 A(带命令)”部分。

\n

4. 示例2

\n
\n

注意
\n在下面的示例中,目标资源的类型是Azure Key Vault,支持访问控制 (IAM) 和访问策略来授权 MSI;这是一个棘手的话题,但是这个 Stackoverflow 线程有一个很好的解释。

\n
\n

4.1 示例 A(概述)

\n
    \n
  1. AZVM使用系统分配的MSI ( )设置虚拟机 ( ) AZVM-id
  2. \n
  3. 在 Azure 密钥保管库 ( AZKV) 中授权此身份。
  4. \n
  5. 通过 SSH 进入AZVM.
  6. \n
  7. 获取访问令牌。
  8. \n
  9. 执行允许执行的操作(通过其AZKV) (在步骤 2.中)。AZVMAZVM-id
  10. \n
\n

有关详细信息,请参阅下面的“示例 A(带命令)”部分。

\n
                          (e.g., REST API)\n                   \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n                   \xe2\x94\x82                                    \xe2\x94\x82\n         \xe2\x94\x8c\xe2\x94\x80AZVM\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x82 \xe2\x94\x80\xe2\x94\x90                \xe2\x94\x8c\xe2\x94\x80AZKV\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90  \xe2\x94\x82\n         \xe2\x94\x82            \xe2\x94\x82                \xe2\x94\x82             \xe2\x94\x82  \xe2\x94\x82\n         \xe2\x94\x82         \xe2\x94\x82  \xe2\x94\x82                \xe2\x94\x82             \xe2\x94\x82\n                   \xe2\x96\xbc  \xe2\x94\x82                \xe2\x94\x82             \xe2\x94\x82  \xe2\x94\x82\n   \xe2\x94\x8c\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80(service) \xe2\x94\x82                \xe2\x94\x82 + secrets   \xe2\x94\x82  \xe2\x94\x82\n   \xe2\x94\x82                  \xe2\x94\x82                \xe2\x94\x82 + keys      \xe2\x94\x82\n         \xe2\x94\x82            \xe2\x94\x82                    + key1       \xe2\x94\x82\n   \xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98          \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x96\xba + key2 \xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n   \xe2\x94\x82         identities=         \xe2\x94\x82\n   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x96\xba[ AZVM-id ]\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98     \xe2\x94\x82             \xe2\x94\x82\n                                       \xe2\x94\x82             \xe2\x94\x82\n                                       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

4.2 示例B

\n
    \n
  1. AZVM-<n>使用系统分配的托管标识 ( )设置(现有)虚拟机 ( AZVM-id-<n>)。
  2. \n
  3. 分配其他用户分配的 MSI(AZVM-user-id-<n>文档:创建和分配
  4. \n
  5. 在多个密钥保管库上授权上述 MSI ( AZKV-<n>)。
  6. \n
\n
                                   \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n                                   \xe2\x94\x82                             \xe2\x94\x82\n                                   \xe2\x94\x82         \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80AZKV-1\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90  \xe2\x94\x82\n              \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80AZVM-1\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90      \xe2\x94\x82         \xe2\x94\x82                \xe2\x94\x82  \xe2\x94\x82\n              \xe2\x94\x82             \xe2\x94\x82      \xe2\x94\x82         \xe2\x94\x82                \xe2\x94\x82  \xe2\x94\x82\n              \xe2\x94\x82             \xe2\x94\x82      \xe2\x94\x82         \xe2\x94\x82 + keys         \xe2\x94\x82  \xe2\x94\x82\n           \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 (service) \xe2\x97\x84\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98         \xe2\x94\x82    + key-1     \xe2\x94\x82  \xe2\x94\x82\n           \xe2\x94\x82  \xe2\x94\x82             \xe2\x94\x82           \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x96\xba  + key-2 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n           \xe2\x94\x82  \xe2\x94\x82             \xe2\x94\x82           \xe2\x94\x82    \xe2\x94\x82                \xe2\x94\x82 \n           \xe2\x94\x82  \xe2\x94\x82             \xe2\x94\x82           \xe2\x94\x82    \xe2\x94\x82                \xe2\x94\x82\n           \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98           \xe2\x94\x82    \xe2\x94\x82 + secrets      \xe2\x94\x82\n           \xe2\x94\x82      identities=           \xe2\x94\x82    \xe2\x94\x82   + secret-1   \xe2\x94\x82\n           \xe2\x94\x82        [ AZVM-id-1         \xe2\x94\x82  \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + password \xe2\x97\x84\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n           \xe2\x94\x82        , AZVM-user-id-1    \xe2\x94\x82  \xe2\x94\x82 \xe2\x94\x82                \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x82        , AZVM-user-id-2    \xe2\x94\x82  \xe2\x94\x82 \xe2\x94\x82                \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x96\xba , AZVM-user-id-3 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98  \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98   \xe2\x94\x82\n                    ]                      \xe2\x94\x82                      \xe2\x94\x82\n                                           \xe2\x94\x82                      \xe2\x94\x82\n                                           \xe2\x94\x82 \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80AZKV-2\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90   \xe2\x94\x82\n                                           \xe2\x94\x82 \xe2\x94\x82                \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80AZVM-2\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90              \xe2\x94\x82 \xe2\x94\x82 + secrets      \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x82                \xe2\x94\x82              \xe2\x94\x82 \xe2\x94\x82   + secret-2   \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x82                \xe2\x94\x82              \xe2\x94\x82 \xe2\x94\x82   + password   \xe2\x94\x82   \xe2\x94\x82\n     USER \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\xe2\x97\x84\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98 \xe2\x94\x82                \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x82  \xe2\x94\x82             \xe2\x94\x82                \xe2\x94\x82 + keys         \xe2\x94\x82   \xe2\x94\x82\n           \xe2\x94\x82  \xe2\x94\x82             \xe2\x94\x82     \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 + key-3 \xe2\x97\x84\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90 \xe2\x94\x82\n           \xe2\x94\x82  \xe2\x94\x82 \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80(service) \xe2\x97\x84\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98          \xe2\x94\x82   + key-4      \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\n           \xe2\x94\x82  \xe2\x94\x82 \xe2\x94\x82           \xe2\x94\x82                \xe2\x94\x82                \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\n           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x82\xe2\x94\x80\xe2\x94\x82\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98                \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98 \xe2\x94\x82 \xe2\x94\x82\n              \xe2\x94\x82 \xe2\x94\x82 identities=                                   \xe2\x94\x82 \xe2\x94\x82\n              \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x96\xba[ AZVM-id-2  \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98 \xe2\x94\x82\n              \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x96\xba, AZVM-user-id-3 \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n                    ]\n
Run Code Online (Sandbox Code Playgroud)\n

4.3 示例A(带命令)

\n
    \n
  1. 为虚拟机(MSI 资源)赋予系统分配的托管标识

    \n

    使用门户时,可以通过转到门户上虚拟机页面中的“身份”菜单项来完成此操作(请参阅揭秘服务主体 \xe2\x80\x93 托管身份为 Azure 资源配置托管身份)使用文档中的Azure 门户的 VM )。

    \n

    Azure 门户中虚拟机页面的屏幕截图,突出显示菜单中的“身份”项。

    \n
  2. \n
  3. 授予对密钥保管库(目标资源)上系统分配的托管标识的访问权限。

    \n

    使用门户时,可以通过单击“访问策略”菜单项,然后单击“+ 创建”按钮来完成此操作。第一页将要求选择要分配给策略的权限,第二页将询问要使用哪个身份,因此请在步骤 1 中选择系统分配的 MSI。请参阅文档中的Azure Key Vault 安全性了解更多信息。

    \n
  4. \n
  5. 通过 SSH 连接到步骤 1 中的虚拟机。

    \n
    ssh -l <username> -i <private_key> 1.2.3.4\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 请求令牌。

    \n

    通过.curl

    \n

    (该jq命令不是必需的;它只是使输出更易于阅读。)

    \n
    $ curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net" \\\n    -H Metadata:true  | jq\n\n{\n  "access_token": "...",\n  "client_id": "12345678-9abc-def1-2345-6789abcdef12",\n  "expires_in": "84162",\n  "expires_on": "1680292962",\n  "ext_expires_in": "86399",\n  "not_before": "1680206262",\n  "resource": "https://vault.azure.net",\n  "token_type": "Bearer"\n}\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 使用令牌。

    \n

    例如,要列出密钥保管库中的密钥(再次通过以下方式使用Azure REST APIcurl):

    \n
    $ curl https://my-project.vault.azure.net/keys?api-version=7.3 \\\n    -H "Authorization: Bearer <ACCESS_TOKEN-FROM-STEP-4>" | jq\n\n{\n  "value": [\n    {\n      "kid": "https://my-project.vault.azure.net/keys/keyname",\n      "attributes": {\n        "enabled": true,\n        "created": 1679939404,\n        "updated": 1679939404,\n        "recoveryLevel": "Recoverable+Purgeable",\n      


归档时间:

查看次数:

2231 次

最近记录:

2 年 前