Jenkins和AWS SAM:AWS无法承担角色

uinbv5nw  于 2023-06-21  发布在  Jenkins
关注(0)|答案(1)|浏览(158)

我使用的是SAM CLI自动生成的hello world jenkinsfile:

steps {
        sh 'sam build --template ${SAM_TEMPLATE}'
        withAWS(
            credentials: env.PIPELINE_USER_CREDENTIAL_ID,
            region: env.TESTING_REGION,
            role: env.TESTING_PIPELINE_EXECUTION_ROLE,
            roleSessionName: 'deploying-feature') {
          sh '''
            sam deploy --stack-name $(echo ${BRANCH_NAME} | tr -cd '[a-zA-Z0-9-]') \
              --capabilities CAPABILITY_IAM \
              --region ${TESTING_REGION} \
              --s3-bucket ${TESTING_ARTIFACTS_BUCKET} \
              --no-fail-on-empty-changeset \
              --role-arn ${TESTING_CLOUDFORMATION_EXECUTION_ROLE}
          '''
        }
      }
    }
  1. PIPELINE_USER_CREDENTIAL_ID是一个用户名+密码jenkins凭证,带有我的iam用户访问密钥+密钥。IAM用户具有承担IAM角色的权限。
  2. TESTING_PIPELINE_EXECUTION_ROLE是一个IAM角色,它将上面的iam用户作为受信任实体,并附加了adminaccess策略。
    sam deploy命令失败,并显示:
File with same data already exists at a6dc4a9f480ec00ce6c24c290c1e5099.template, skipping upload
Error: Failed to create changeset for the stack: feature-001, An error occurred (ValidationError) when calling the CreateChangeSet operation: Role arn:aws:iam::xxx:role/myrole is invalid or cannot be assumed

我在想为什么这个角色不能扮演。我的jenkins访问密钥凭证是正确的,我的角色允许用户承担它,并且有管理员访问策略,所以应该能够在cloudformation中做任何事情。
我的Jenkins运行在ec2上,我需要对示例配置文件做些什么吗?或者,当使用withAWS插件时,我的角色的信任策略应该是其他的?

x6yk4ghg

x6yk4ghg1#

修复:SAM需要2个IAM角色,一个用于jenkins管道,一个用于cloudformation:

TESTING_PIPELINE_EXECUTION_ROLE
TESTING_CLOUDFORMATION_EXECUTION_ROLE

我把这两个设置为同一个IAM角色。修复方法是创建2个独立的IAM角色,或者对role和--role-arn使用相同的env变量。
我认为问题是这个角色试图扮演自己,却被拒绝了。

相关问题