tor*_*tte 2 azure-managed-identity
Azure 文档将托管身份定义为
Azure Active Directory 中由 Azure 自动管理的标识(更具体地说,一种特殊类型的服务主体)。在开发云应用程序时,通常使用托管标识来管理用于向 Azure 服务进行身份验证的凭据。
但仍然不确定它们是什么。
\n\nAzure 资源的托管标识是以前称为托管服务标识 (MSI)的服务的新名称。
\n
谢谢@WillHuang!
\n\n\n托管标识(MSI 1 ) 是一种特殊类型的服务主体,分配给Azure 资源,支持使用托管标识来访问其他 Azure 服务/资源而无需凭据。
\n
此处将使用以下术语(一些是任意选择的):
\nMSI 资源:支持拥有(或赋予)托管标识的 Azure 资源
\n目标资源:MSI 资源尝试访问的Azure 资源
\n身份:Azure Active Directory 身份);快速概述:
\nsecurity\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)\nRun Code Online (Sandbox Code Playgroud)\n(另请参阅[此答案](/sf/answers/5309538881/)。)
\n服务主体:
\n\n\n应用程序或服务用来访问特定 Azure 资源的安全标识。您可以将其视为应用程序的用户身份(用户名和密码或证书)。
\n
\n (来自分配 Azure 角色的步骤)
或者
\n\n\n“当组织使用 Azure Active Directory 时,其令牌可用于验证用户应用程序、服务或自动化工具中的特定 Azure 资源并授予其访问权限”
\n本质上,通过使用服务主体,您可以避免在 Azure AD 中创建 \xe2\x80\x9cfake 用户\xe2\x80\x9d(我们将其称为本地 Active Directory\xe2\x80\xa6 中的服务帐户)来管理当您需要访问 Azure 资源时进行身份验证。
\n
\n (来自揭秘服务主体 \xe2\x80\x93 托管身份)
长话短说
\n| 用户分配的 MSI | 系统分配的 MSI | |
|---|---|---|
| 如果MSI资源被删除怎么办? | 未分配且保持不变 | 已删除 |
一个 MSI 资源可以分配多少个? | 任何数字 | 只有1个 |
目标资源上可以授权多少个? | 任何数字 | 任何数字 |
| 是否可以 同时在多个目标资源上进行授权? | 是的 | 是的 |
(MSI 资源=/= 托管身份)
\nMSI 资源和托管身份之间的关系类似于带有标签的框或具有姓名和昵称/别名的人员:
\nMSI资源
\n可以拥有一个系统分配的托管身份
\n(如一个人只允许有一个法定姓名)
\n可以分配许多用户分配的托管身份
\n(例如一个人的同事可能会用不同的昵称来称呼一个人)
\n不确定这种设计选择的意图是什么,但这允许为MSI 资源创建多个身份(或者,换句话说,MSI 资源可以采用多个身份),每个身份都可以被授权对 MSI 资源执行不同的操作目标资源。(目标资源还可以授权多个 MSI;请参阅下面的“示例”部分。)
\n当删除MSI 资源时,
\n系统分配的MSI 也随之删除
\n用户分配的托管身份将保留(这些身份只会被取消分配)
\n有关详细信息,请参阅下面的“示例 A(带命令)”部分。
\n\n\n注意
\n
\n在下面的示例中,目标资源的类型是Azure Key Vault,支持访问控制 (IAM) 和访问策略来授权 MSI;这是一个棘手的话题,但是这个 Stackoverflow 线程有一个很好的解释。
AZVM使用系统分配的MSI ( )设置虚拟机 ( ) AZVM-id。AZKV) 中授权此身份。AZVM.AZKV) (在步骤 2.中)。AZVMAZVM-id有关详细信息,请参阅下面的“示例 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\nRun Code Online (Sandbox Code Playgroud)\nAZVM-<n>使用系统分配的托管标识 ( )设置(现有)虚拟机 ( AZVM-id-<n>)。AZVM-user-id-<n>;文档:创建和分配)AZKV-<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 ]\nRun Code Online (Sandbox Code Playgroud)\n为虚拟机(MSI 资源)赋予系统分配的托管标识
\n使用门户时,可以通过转到门户上虚拟机页面中的“身份”菜单项来完成此操作(请参阅揭秘服务主体 \xe2\x80\x93 托管身份或为 Azure 资源配置托管身份)使用文档中的Azure 门户的 VM )。
\n\n授予对密钥保管库(目标资源)上系统分配的托管标识的访问权限。
\n使用门户时,可以通过单击“访问策略”菜单项,然后单击“+ 创建”按钮来完成此操作。第一页将要求选择要分配给策略的权限,第二页将询问要使用哪个身份,因此请在步骤 1 中选择系统分配的 MSI。请参阅文档中的Azure Key Vault 安全性了解更多信息。
\n通过 SSH 连接到步骤 1 中的虚拟机。
\nssh -l <username> -i <private_key> 1.2.3.4\nRun Code Online (Sandbox Code Playgroud)\n请求令牌。
\n通过.curl
(该jq命令不是必需的;它只是使输出更易于阅读。)
$ 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}\nRun Code Online (Sandbox Code Playgroud)\n使用令牌。
\n例如,要列出密钥保管库中的密钥(再次通过以下方式使用Azure REST APIcurl):
$ 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 次 |
| 最近记录: |