gpt4 book ai didi

amazon-web-services - 如何让k8s Pod(由Jenkins生成)使用服务帐户IAM角色访问AWS资源

转载 作者:行者123 更新时间:2023-12-02 11:59:32 24 4
gpt4 key购买 nike

关注此link ,我可以创建一个pod,其服务帐户的角色可以访问AWS资源;所以 Pod 也可以访问它们。

然后,受到这个EKS-Jenkins-Workshop的启发,我对这个工作坊做了一点改变。我想部署Jenkins Pipeline,这个Jenkins Pipeline可以创建一个pod,其帐户服务的角色可以访问aws资源,但问题是这个pod中的cdk代码无法访问AWS资源。 (我编写了 cdk 代码来访问 AWS 资源,引用(您的第一个 AWS CDK 应用程序)[https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html])

这是我的 Jenkinsfile

pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
metadata:
name: jenkins-agent
Namespace: default
spec:
serviceAccountName: jenkins
containers:
- name: node-yuvein
image: node
command:
- cat
tty: true
"""
}
}

stages {
stage('Build') {
steps {
container('node-yuvein') {
dir('hello-cdk'){
sh "pwd"
sh 'npm --version'
sh 'node -v'
sh 'npm install -g typescript'
sh 'npm install -g aws-cdk'
sh 'npm install @aws-cdk/aws-s3'
sh 'npm run build'
sh 'cdk deploy'
}
}
}
}
}
}

当我运行管道时,出现以下错误:

User: arn:aws:sts::450261875116:assumed-role/eksctl-eksworkshop-eksctl3-nodegr-NodeInstanceRole-1TCVDYSM1QKSO/i-0a4df3778517df0c6 is not authorized to perform: cloudformation:DescribeStacks on resource: arn:aws:cloudformation:us-west-2:450261875116:stack/HelloCdkStack/*

我是K8s、Jenkins和cdk的初学者。希望可以有人帮帮我。非常感谢。

进一步调试:

  1. 在 Jenkins 控制台中,我可以获取 serviceAccountName: "jenkins",并且我在 EKS 中的服务帐户名称是 jenkins
  2. pod 也获得了正确的 ENV:
+ echo $AWS_ROLE_ARN
arn:aws:iam::450261875116:role/eksctl-eksworkshop-eksctl3-addon-iamservicea-Role1-YYYFXFS0J4M2

+ echo $AWS_WEB_IDENTITY_TOKEN_FILE
/var/run/secrets/eks.amazonaws.com/serviceaccount/token
  • 我安装的node.js和npm是最新版本。
  • + npm --version
    6.14.8

    + node -v
    v14.13.0
  • + aws sts get-caller-identity
    {
    "UserId": "AROAWRVNS7GWO5C7QJGRF:botocore-session-1601436882",
    "Account": "450261875116",
    "Arn": "arn:aws:sts::450261875116:assumed-role/eksctl-eksworkshop-eksctl3-addon-iamservicea-Role1-YYYFXFS0J4M2/botocore-session-1601436882"
    }

    当我运行此命令时,它会显示我的服务帐户角色。但我仍然得到原来的错误。

    最佳答案

    Jenkins podTemplateserviceAccount 选项: https://github.com/jenkinsci/kubernetes-plugin#pod-and-container-template-configuration

    • 创建映射到 EKS 集群的 IAM 角色
    • 创建映射到 IAM 角色的 ServiceAccount
    • 将 ServiceAccount 名称传递给 podTemplate

    进一步调试:

    1. 确保 Pod 具有正确的服务帐户名称。
    2. 检查 pod 是否获得 AWS_ROLE_ARNAWS_WEB_IDENTITY_TOKEN_FILE 环境变量(它们是自动添加的)。
    3. 检查您使用的 AWS SDK 是否高于最低版本:https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-minimum-sdk.html
    4. 运行 aws sts get-caller-identity 以查看角色,不要浪费时间运行实际作业。

    关于amazon-web-services - 如何让k8s Pod(由Jenkins生成)使用服务帐户IAM角色访问AWS资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64122635/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com