繁体   English   中英

Cloudwatch 代理未在 Windows 上使用环境变量凭证

[英]Cloudwatch agent not using environment variable credentials on Windows

我正在尝试使用脚本配置 AMI,该脚本通过使用 static IAM 凭据在 AWS 和本地 Windows 机器上安装统一的 Cloudwatch 代理。 作为脚本的一部分,我使用静态设置凭据(作为测试)

$Env:AWS_ACCESS_KEY_ID="myaccesskey"
$Env:AWS_SECRET_ACCESS_KEY="mysecretkey"
$Env:AWS_DEFAULT_REGION="us-east-1"

拥有 AMI 后,我会创建一台机器并连接到它,然后通过运行aws configure list验证凭据是否存在

  Name                    Value             Type    Location
  ----                    -----             ----    --------
  profile                <not set>             None    None
  access_key     ****************C6IF          env
  secret_key     ****************SCnC          env
  region                us-east-1              env    ['AWS_REGION', 'AWS_DEFAULT_REGION']

但是当我启动代理时,我在日志中收到以下错误。

2022-12-26T17:51:49Z I,第一次为日志组test-cloudwatch-agent设置保留,更新map避免设置两次
2022-12-26T17:51:49Z E:无法从 session 获取凭证:NoCredentialProviders:链中没有有效的提供者
原因:EnvAccessKeyNotFound:无法在环境中找到凭据。
SharedCredsLoad:无法加载配置文件,。
EC2RoleRequestError:找不到 EC2 实例角色
原因:EC2MetadataError:无法发出 EC2Metadata 请求

我正在使用管理员用户安装代理,然后在 RDP 连接到机器时使用。 有什么我想念的吗? 我已经尝试将凭据添加到.aws/credentials文件并修改common-config.toml文件以使用配置文件。 这样就可以了,但就我而言,我只想使用环境变量。

编辑:我测试了在 userdata 脚本中添加凭据并稍微修改了它们的创建方式,现在它似乎可以工作了。

$env:aws_access_key_id = "myaccesskeyid"  
$env:aws_secret_access_key = "mysecretaccesskey"    
[System.Environment]::SetEnvironmentVariable('AWS_ACCESS_KEY_ID',$env:aws_access_key_id,[System.EnvironmentVariableTarget]::Machine)      
[System.Environment]::SetEnvironmentVariable('AWS_SECRET_ACCESS_KEY',$env:aws_secret_access_key,[System.EnvironmentVariableTarget]::Machine)       
[System.Environment]::SetEnvironmentVariable('AWS_DEFAULT_REGION','us-east-1',[System.EnvironmentVariableTarget]::Machine)

现在的问题是,我正在尝试使用文档中的命令在用户数据脚本的末尾启动代理,但它什么也没做(我在代理日志中看到命令,但没有错误)。 如果我通过 RDP 进入机器并在 Powershell 中启动相同的命令,它工作正常。 命令是:

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m onPrem -s -c file:"C:\ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json"

我终于能够让它工作,但我不确定为什么它以前没有。 我在用

$env:aws_access_key_id = "accesskeyid"  
$env:aws_secret_access_key = "secretkeyid"    
[System.Environment]::SetEnvironmentVariable('AWS_ACCESS_KEY_ID',$env:aws_access_key_id,[System.EnvironmentVariableTarget]::Machine)      
[System.Environment]::SetEnvironmentVariable('AWS_SECRET_ACCESS_KEY',$env:aws_secret_access_key,[System.EnvironmentVariableTarget]::Machine)       
[System.Environment]::SetEnvironmentVariable('AWS_DEFAULT_REGION','us-east-1',[System.EnvironmentVariableTarget]::Machine)

设置变量,但随后代理无法初始化。 我不得不补充

$env:aws_default_region = "us-east-1"  

所以它能够运行。 我之前找不到问题,因为在 Windows 服务器 2022 上我没有从执行中获取日志。 我不得不尝试使用 Windows Server 2019 在启动代理时实际看到错误。

我仍然不知道为什么我在机器 scope 中设置的环境变量在登录机器后起作用,但在将它们用作用户数据脚本的一部分时却不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM