【问题标题】:Powershell Invoke-WebRequest returns (401) UnauthorizedPowershell Invoke-WebRequest 返回 (401) Unauthorized
【发布时间】:2021-10-19 11:27:13
【问题描述】:

我有一个 PowerShell 脚本,它在 ValidateServiceCodeDeploy 中运行。下面是几行代码,我得到错误:

$instancePrivateIp = Invoke-RestMethod http://169.254.169.254/latest/meta-data/local-ipv4

# $instancePrivateIp --> 20.12.xx.yyy
# $instancePrivateIp.GetType() -->
# IsPublic IsSerial Name                                     BaseType
# -------- -------- ----                                     --------
# True     True     String                                   System.Object

$uri = "http://{0}:8080/api/2.0/GetVersion" -f $instancePrivateIp
$response = Invoke-WebRequest -URI $uri
$statusCode = $response | Select-Object -Expand StatusCode
...
...

当 CodeDeploy 执行此脚本时,我得到 (401) Unauthorized。以下是完整的消息:

[stdout]Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.
[stdout]At C:\ProgramData\Amazon\CodeDeploy\7f9ade01-914b-44d7-9f7a-030e7aefe75e\d-T4EL
[stdout]8RNVB\deployment-archive\scripts\verify_deployment.ps1:12 char:25
[stdout]+ $response = Invoke-WebRequest -URI $uri
[stdout]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
[stdout] + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt
[stdout] pWebRequest) [Invoke-WebRequest], WebException
[stdout] + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe
[stdout] ll.Commands.InvokeWebRequestCommand

而如果我在同一台 EC2 机器上手动执行此脚本,它会给我 200 响应。我尝试添加一些睡眠并点击该 API 15 分钟,但我一直得到 401。谁能帮帮我。

谢谢。

【问题讨论】:

  • 你能告诉我们$instancePrivateIp$instancePrivateIp.GetType()的值吗?
  • @Theo 我现在已经在问题中添加了它。
  • 谢谢,我觉得很好。你确定要http而不是https吗?
  • 是的,它是http

标签: powershell amazon-ec2 aws-code-deploy


【解决方案1】:

You are double hopping,默认情况下您的组织中可能不允许使用。双跳是连接到远程系统并尝试隐式使用用于对第一个系统进行身份验证的凭据来对第二个系统进行身份验证。这通常被认为是不安全的,不允许这种行为未经检查。


如果CodeDeploy 正在运行您为连接到实例并运行脚本而设计的命令,如果您的组织没有禁用它,您可以尝试使用CredSSP 身份验证机制。否则,您将需要委派服务帐户才能进行第二次跃点(堆栈溢出的主题),或者您可以将CodeDeploy 的用户名和密码作为脚本参数显式传递(DON' T 将构建的PSCredential 作为参数传递给远程系统,除非您有可用的解密密钥,否则您将无法解密它),并在您的动态中构建PSCredential 对象脚本。

警告:虽然很容易,但不要硬编码您的凭据

【讨论】:

  • 谢谢,我正在传递凭据,现在我不再收到 401。
猜你喜欢
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2015-03-13
  • 2021-09-02
  • 1970-01-01
相关资源
最近更新 更多