【问题标题】:How to assign AWS IAM Role to Service Account with Terraform?如何使用 Terraform 将 AWS IAM 角色分配给服务账户?
【发布时间】:2021-01-22 12:46:14
【问题描述】:
我在 AWS 上有一个 Kubernetes EKS 集群,我的目标是能够在我的 Spring Boot 应用程序中查看特定的配置映射。
在我的本地环境中,一切正常,但是当我在 AWS 中使用此设置时,我进入禁止状态并且我的应用程序无法运行。
我创建了一个服务帐户,但不明白如何创建可以分配所需 IAM 角色的 Terraform 脚本。
任何帮助将不胜感激。
【问题讨论】:
标签:
amazon-web-services
kubernetes
terraform
amazon-iam
amazon-eks
【解决方案2】:
首先我使用以下代码创建了必要的角色:
data "aws_iam_policy_document" "eks_pods" {
statement {
actions = ["sts:AssumeRoleWithWebIdentity"]
effect = "Allow"
condition {
test = "StringEquals"
variable = "${replace(aws_iam_openid_connect_provider.eks.url, "https://", "")}:sub"
values = ["system:serviceaccount:kube-system:aws-node"]
}
principals {
identifiers = [aws_iam_openid_connect_provider.eks.arn]
type = "Federated"
}
}
}
# create a role that can be attached to pods.
resource "aws_iam_role" "eks_pods" {
assume_role_policy = data.aws_iam_policy_document.eks_pods.json
name = "eks-pods-iam-role01"
depends_on = [aws_iam_openid_connect_provider.eks]
}
resource "aws_iam_role_policy_attachment" "aws_pods" {
role = aws_iam_role.eks_pods.name
policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
depends_on = [aws_iam_role.eks_pods]
}
然后我使用以下命令将创建的角色附加到服务帐户。我还没有在 terraform 中找到任何方法:
kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/role-arn=arn:aws:iam::<your_account>:role/eks-pods-iam-role01
然后您可以验证您的服务帐户,它应该会显示新的注释。
kubectl describe sa aws-node -n kube-system
Name: aws-node
Namespace: kube-system
Labels: <none>
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<ur_account>:role/eks-pods-iam-role01
Image pull secrets: <none>
Mountable secrets: aws-node-token-xxxxx
Tokens: aws-node-token-xxxxx
Events: <none>
【解决方案3】:
我认为您在这里遗漏了一些东西..您应该在角色和 oidc 提供者之间添加信任关系,如下所述: