AWS Go程序在Jenkins中无法读取自定义credentials.ini获取账号ID
问题:Go脚本在Jenkins环境中无法正确指定AWS配置文件执行操作
- 我的Go语言脚本用于对AWS Lambda执行读取/删除操作,支持通过
--profile <profile_name>参数指定AWS配置文件,例如执行命令:./golang-binary --profile stage -r us-east-1 - 脚本在本地Mac环境运行正常,但在Jenkins环境中,即使指定
--profile stage,仍会使用Jenkins默认配置文件 - Jenkins采用基于角色的访问方式(不存储AWS密钥),不同账号通过EC2实例元数据的凭证文件选择不同配置文件
- 需求:让代码读取应用目录下的
credentials.ini文件中指定的配置文件并创建会话,而非直接调用STS的GetCallerIdentity函数
当前代码问题
当前代码的getAccountID函数通过STS的GetCallerIdentity获取账号ID,导致Jenkins环境中获取的是Jenkins默认身份,而非指定配置文件对应的账号。
credentials.ini文件格式
[profile-1] region = region-1 credential_source = Ec2InstanceMetadata role_arn = arn:aws:iam::<accountID-1>:role/jenkins_role [profile-2] region = region-2 credential_source = Ec2InstanceMetadata role_arn = arn:aws:iam::<accountID-2>:role/jenkins_role
尝试解决后的报错
尝试通过--role-arn-file参数指定AWS凭证文件时,出现以下错误:
E0623 14:38:02.301269 5498 main.go:335] Failed to assume role: InvalidParameter: 1 validation error(s) found. - minimum field size of 20, AssumeRoleInput.RoleArn. E0623 14:38:02.301298 5498 main.go:96] Failed to getAccountID: InvalidParameter: 1 validation error(s) found. - minimum field size of 20, AssumeRoleInput.RoleArn.
不清楚解析过程中出现了什么问题。
内容的提问来源于stack exchange,提问作者jeez
相关产品推荐
相关产品推荐

