如何告诉teamcity代理,哪个AWS帐户要运行terraform到

问题描述 投票:0回答:2

我将TeamCity拆分为Kubernetes集群。我有一个针对TeamCity服务器的部署,一个针对TeamCity构建代理的部署。当我在TeamCity构建代理上运行Terraform时,它在与托管TeamCity Kubernetes集群的EC2实例相同的AWS账户中创建资源。

我想运行一个构建,该构建在单独的AWS账户中创建AWS资源。我的想法是为TeamCity服务器分配一个AWS访问密钥和秘密密钥,并将它们传递给TeamCity构建代理,但是我不知道工作流程如何。

当前,我已将AWS访问密钥和秘密密钥声明为构建中的环境变量,但它们并未传递给代理。我的构建步骤仅包含3行

terraform init
terraform plan
terraform apply -auto-approve
amazon-web-services kubernetes teamcity
2个回答
1
投票

我处理过非常相似的情况。当我们开始使用AWS时,我们并未遵循有关脚本如何向AWS进行身份验证的最佳实践。

我们在每个帐户中创建了用户,并将访问权限和密钥导出到TeamCity构建自动化中,以使我们的脚本可以在这些帐户的上下文中运行。

您最终将拥有多个使用不同帐户的用户,并且将手动为这些用户旋转密钥,然后在每次需要旋转密钥时更新TeamCity中的访问和秘密密钥。

由于TeamCity构建代理服务器是EC2实例,因此在AWS中,最佳实践是在这种情况下使用角色代替用户。从AWS文档:

在Amazon EC2实例上运行的应用程序需要在以便访问其他AWS服务。向...提供凭据应用程序以安全的方式使用IAM角色。角色是一个实体,有自己的权限集,但不是用户或组。的角色也没有像IAM这样的永久证书集用户呢。对于Amazon EC2,IAM动态提供EC2实例的临时凭据,这些凭据是自动为您旋转。

来源:https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-roles-with-ec2

在这种情况下,您应该在每个有权创建terraform将构建的资源的帐户中创建一个角色。对于TeamCity构建代理服务器,您将需要另一个角色,该角色应该能够承担在每个帐户中创建的角色。

假设您有两个帐户:

  1. AccountA是您希望构建代理使用terraform运行构建资源的位置。
  2. AccountB是您的构建代理程序正在运行的帐户。

您需要的是:

  1. AccountA中具有创建资源权限的角色。
  2. AccountB中的一个角色,该角色授予ec2实例的访问权限以承担上述角色。

AccountB中角色的实例配置文件应分配给TeamCity构建代理服务器。这样,构建代理服务器就可以承担AccountA的角色,并以所需的权限在该帐户的上下文中运行,而无需硬编码的访问和秘密密钥。

您可以为要通过Terraform建立资源的其他帐户重复此过程。

您将必须在terraform脚本中将以下块添加到aws提供程序中,以使terraform知道要扮演的角色:

provider "aws" {
assume_role {
role_arn = "arn:aws:iam::<ACCOUNTA>:role/<ROLENAME>"
}
}

[这是一些AWS文档,说明如何授予与EC2实例不同的帐户中对S3存储桶的访问权限:https://aws.amazon.com/premiumsupport/knowledge-center/s3-instance-access-bucket/

另一个涵盖IAM Roes,EC2实例配置文件和通过角色进行跨帐户访问的有用文档页面在这里:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html

最后一个链接将准确显示您要执行的操作:https://blog.e-zest.com/aws-ec2-assume-role-with-terraform


0
投票

当我想为2个独立帐户添加两个注释时,我的agent.yml文件如下所示:>

规格:复制品:1选择器:matchLabels:应用程式:agent-pod模板:元数据:注释:iam.amazonaws.com/role:arn:aws:iam :: account:role / accoun1-s3-roleiam.amazonaws.com/role:arn:aws:iam :: account:role / account2-pods-s3-role

但是一旦我添加了两个注解,我的sts就将承担pod的角色,只向我显示第二角色。当我从teamcity运行构建时,出现此错误找不到适用于AWS提供商的有效凭据来源

© www.soinside.com 2019 - 2024. All rights reserved.