Azure service fabric 如何将托管服务标识添加到托管在Azure VM Scaleset或服务结构内的容器中?

Azure service fabric 如何将托管服务标识添加到托管在Azure VM Scaleset或服务结构内的容器中?,azure-service-fabric,azure-keyvault,azure-vm-scale-set,azure-managed-identity,Azure Service Fabric,Azure Keyvault,Azure Vm Scale Set,Azure Managed Identity,我想利用MSI访问托管在Azure服务结构VMS中的容器内的应用程序(特别是对我来说:Azure功能运行时)中的KeyVault 我需要做些什么才能做到这一点?基于以下提示: 步骤1-向虚拟机添加标识 扩展群集的ARM模板Microsoft.Compute/virtualmachinescaleetsresource。在资源的根级别添加identity元素,如properties ... "identity": { "type": "SystemAssigned" },

我想利用MSI访问托管在Azure服务结构VMS中的容器内的应用程序(特别是对我来说:Azure功能运行时)中的KeyVault

我需要做些什么才能做到这一点?

基于以下提示:

步骤1-向虚拟机添加标识

扩展群集的ARM模板
Microsoft.Compute/virtualmachinescaleets
resource。在资源的根级别添加
identity
元素,如
properties

...
  "identity": {
    "type": "SystemAssigned"
  },      
...
(重新)部署集群

步骤2-将路线添加到集装箱

在Windows容器中,默认情况下,到MSI终结点的路由不起作用。为此,我添加了一个入口脚本,例如entry.PS1(在我的例子中,不要忘记添加容器的原始入口点-
ServiceMonitor.exe
,因为我有一个IIS容器):

并修改了Dockerfile/containers条目:

...
ENTRYPOINT ["powershell.exe","C:\\entry.PS1"]
背景:在入口点级别添加
路由add
将在构建时执行语句,并将路由添加到构建主机/容器中

步骤3-可选重新映像VMS节点

但是,我仍然遇到一个现有集群的问题。使用访问令牌端点时

Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net%2F' -Method GET -Headers @{Metadata="true"} -UseBasicParsing
我还是犯了这个错误

Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:1
+ Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oaut ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
要解决这个问题,我必须基于以下提示:

步骤1-向虚拟机添加标识

扩展群集的ARM模板
Microsoft.Compute/virtualmachinescaleets
resource。在资源的根级别添加
identity
元素,如
properties

...
  "identity": {
    "type": "SystemAssigned"
  },      
...
(重新)部署集群

步骤2-将路线添加到集装箱

在Windows容器中,默认情况下,到MSI终结点的路由不起作用。为此,我添加了一个入口脚本,例如entry.PS1(在我的例子中,不要忘记添加容器的原始入口点-
ServiceMonitor.exe
,因为我有一个IIS容器):

并修改了Dockerfile/containers条目:

...
ENTRYPOINT ["powershell.exe","C:\\entry.PS1"]
背景:在入口点级别添加
路由add
将在构建时执行语句,并将路由添加到构建主机/容器中

步骤3-可选重新映像VMS节点

但是,我仍然遇到一个现有集群的问题。使用访问令牌端点时

Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net%2F' -Method GET -Headers @{Metadata="true"} -UseBasicParsing
我还是犯了这个错误

Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:1
+ Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oaut ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

要解决这个问题,我必须

那么你是说vms节点(vm)中的容器拥有与父vms\vm相同的权限级别?好的,只要他们能够与管理端点对话正确-没有容器,只有主机/虚拟机特定的授权,对于没有powershell的映像,我将使用以下两行创建一个批处理文件:for/f“tokens=3”%%a in('路由打印0.0.0.0-4^ findstr/c:“0.0.0”'))如果%errorlevel%==0%1%2%3%4%5%6%7%8%9和docker文件:ENTRYPOINT[“cmd”、“/c”、“LaunchWithMSI.bat”、“dotnet”、“mycolapp.dll”](仍然需要以管理员身份运行容器应用程序),则是否添加169.254.169.0掩码255.255.255.0%%@KaiWalter是一个入口脚本,我可以在启动VM时运行它,这样所有容器都可以获取端点,而我不必修改docker文件?我的用例稍有不同,我只对在Azure VM上使用docker容器的托管标识感兴趣,直到我将服务移动到一个更云的原生世界。@pijemcolu-是的,我想这也适用于Azure VM上的docker。原理和基础架构是相同的。那么您是说vms节点(vm)中的容器与父vms\vm具有相同的权限级别?好的,只要他们能够与管理端点对话正确-没有容器,只有主机/虚拟机特定的授权,对于没有powershell的映像,我将使用以下两行创建一个批处理文件:for/f“tokens=3”%%a in('路由打印0.0.0.0-4^ findstr/c:“0.0.0”'))如果%errorlevel%==0%1%2%3%4%5%6%7%8%9和docker文件:ENTRYPOINT[“cmd”、“/c”、“LaunchWithMSI.bat”、“dotnet”、“mycolapp.dll”](仍然需要以管理员身份运行容器应用程序),则是否添加169.254.169.0掩码255.255.255.0%%@KaiWalter是一个入口脚本,我可以在启动VM时运行它,这样所有容器都可以获取端点,而我不必修改docker文件?我的用例稍有不同,我只对在Azure VM上使用docker容器的托管标识感兴趣,直到我将服务移动到一个更云的原生世界。@pijemcolu-是的,我想这也适用于Azure VM上的docker。这些原则和基础设施是相同的。