与AWS IAM集成Istio

AEl*_*dge 6 amazon-web-services amazon-iam kubernetes istio

我目前正在探索使用EKS在AWS上运行Istio/Kubernetes集群.我希望能够为群集中运行的每个服务分配不同的IAM角色,以限制每个服务的AWS权限.

在非Istio Kubernetes集群中,这个设施由kube2iam等项目提供,但这在Istio世界看来并不理想,因为kube2iam依赖于iptables规则,Istio已经在使用iptables规则将所有出站流量转移到Envoy边车.

Istio 安全文档说,身份模型适用于不同的底层实现,而在AWS上,实现是IAM:

在Istio身份模型中,Istio使用一流的服务标识来确定服务的身份.这为代表人类用户,个人服务或一组服务提供了极大的灵活性和粒度.在没有此类身份的平台上,Istio可以使用可以对服务实例进行分组的其他身份,例如服务名称.

不同平台上的Istio服务标识:

Kubernetes:Kubernetes服务帐户
GKE/GCE:可以使用GCP服务帐户
GCP:GCP服务帐户
AWS:AWS IAM用户/角色帐户

但我没有遇到任何关于如何将IAM角色分配给Istio ServiceRoles的其他文档.

有没有人找到解决方案?

小智 1

我也在为此苦苦挣扎,但几乎没有找到帮助。我确实根据这个人的建议取得了成功 https://groups.google.com/forum/m/#!topic/istio-users/3-fp2JPb2dQ

在我添加该服务条目之前,我没有运气让 kube2iam 正常工作(请参阅下文或点击链接)

基本上你添加这个

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: apipa
spec:
  hosts:
  - 169.254.169.254
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS
  location: MESH_EXTERNAL
Run Code Online (Sandbox Code Playgroud)

在应用 serviceentry 之前查看 istio-proxy sidecar,您可能会在日志中发现大量 404 错误,其路径看起来都像 aws api 调用。服务进入后,这些就变成了200。

更新...后来我发现这是使用 istio 进行任何外部网格通信时的预期要求。请参阅https://istio.io/docs/concepts/traffic-management/#service-entries