我们正在用新的身份验证机制https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/取代AWS Access密钥和机密
因此,现在我们有了AWS_ROLE_ARN和AWS_WEB_IDENTITY_TOKEN_FILE env变量,它们将在创建pod时注入,因此这些变量不存在于配置映射中。 我们有一个带配置初始化程序的Rails应用程序,在其中我们使用了这些变量,但部署失败并显示错误“找不到密钥”。 为了解决这个问题,我们在配置映射中添加了具有伪数据的键,考虑到一旦部署pod,变量值将被覆盖。找不到关键密钥的问题已通过此hack修复,但出现错误
Missing :web_identity_token_file parameter or invalid file path provided for Aws::AssumeRoleWebIdentityCredentials provider
我的理解是,应用程序在容器中初始化,然后将其部署到pod中,但是只有在将容器添加到pod中时变量才可用。 我可以用这种方法在kubernetes中解决这个问题吗?还是需要从初始化程序中移出我的应用程序代码,并且仅在向AWS发出实际请求时才使用它?
注意:我是kubernetes的新手。
编辑 Ruby代码
Client.configure do |config|
config.credentials = Aws::AssumeRoleWebIdentityCredentials.new(
client: Aws::STS::Client.new(region: 'us-west-2'),
role_arn: ENV.fetch('AWS_ROLE_ARN'),
web_identity_token_file: ENV.fetch('AWS_WEB_IDENTITY_TOKEN_FILE')
)
secrets.yml
apiVersion: v1
kind: Secret
metadata:
name: "${NAME}-secrets"
namespace: "${NAMESPACE}"
data:
AWS_ROLE_ARN: "${AWS_ROLE_ARN}"
AWS_WEB_IDENTITY_TOKEN_FILE: "${AWS_WEB_IDENTITY_TOKEN_FILE}"