Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何将服务帐户连接到gke部署/服务,就像您可以连接ECS服务一样?_Kubernetes_Google Cloud Platform_Amazon Ecs_Google Kubernetes Engine_Google Cloud Iam - Fatal编程技术网

Kubernetes 如何将服务帐户连接到gke部署/服务,就像您可以连接ECS服务一样?

Kubernetes 如何将服务帐户连接到gke部署/服务,就像您可以连接ECS服务一样?,kubernetes,google-cloud-platform,amazon-ecs,google-kubernetes-engine,google-cloud-iam,Kubernetes,Google Cloud Platform,Amazon Ecs,Google Kubernetes Engine,Google Cloud Iam,我来自美国焊接学会(AWS),不知道如何使用gcp实现这一点。之前我问了一个关于服务账户的更一般的问题,这是针对gke的 在AWS中,我可以创建ECS服务角色。我将策略附加到该角色,以便为其提供所需的访问权限。然后我将角色附加到ECS服务。因此,我可以将多个服务部署到同一个ECS群集,并在不使用静态密钥、不传递秘密的情况下为它们提供不同的访问权限 我如何使用gke实现这一点?如何将gcp iam服务帐户附加到gke部署/服务等?您可以在部署yaml中使用注释来附加服务帐户吗 我希望在同一个gke

我来自美国焊接学会(AWS),不知道如何使用gcp实现这一点。之前我问了一个关于服务账户的更一般的问题,这是针对gke的

在AWS中,我可以创建ECS服务角色。我将策略附加到该角色,以便为其提供所需的访问权限。然后我将角色附加到ECS服务。因此,我可以将多个服务部署到同一个ECS群集,并在不使用静态密钥、不传递秘密的情况下为它们提供不同的访问权限

我如何使用gke实现这一点?如何将gcp iam服务帐户附加到gke部署/服务等?您可以在部署yaml中使用注释来附加服务帐户吗


我希望在同一个gke群集上使用不同的服务帐户隐式地进行多个部署和服务(不使用密钥)

简介:

Google Cloud Kubernetes集群由计算引擎VM实例组成。创建集群时,每个VM实例都会附加一个默认服务帐户。这些凭据存储在实例元数据中,可以通过使用默认应用程序
Client()
实例化(应用程序默认凭据)或指定凭据位置来访问

ADC凭据搜索:

from google.cloud import storage
client = storage.Client()
或者仅从元数据:

from google.auth import compute_engine
from google.cloud import storage
credentials = compute_engine.Credentials()
client = storage.Client(credentials=credentials, project=project)
[更新]

我不想推广糟糕的安全做法。应在安全生产Kubernetes群集上阻止上述技术

  • 为Kubernetes群集使用最低权限的服务帐户
  • 禁用旧版元数据服务器API并使用元数据隐藏
  • 使用Pod安全策略
  • 对节点池使用单独的服务帐户
  • 使用网络策略限制POD之间的流量
  • [结束更新]

    Google Kubernetes方法:

    Kubernetes推荐的技术是为集群中运行的每个应用程序创建一个单独的服务帐户,并减少应用于默认服务帐户的范围。分配给每个服务帐户的角色因应用程序所需的权限而异

    服务帐户凭据作为Json文件下载,然后作为
    机密文件存储在Kubernetes中。然后,您将装载包含该机密(凭据)的卷。然后,容器中运行的应用程序在创建Google应用程序客户端(如访问云存储)时需要加载凭据

    此命令将下载的凭据文件作为名为
    服务帐户凭据的机密存储到Kubernetes机密卷中。Kubernetes中的凭证文件名为
    key.json
    。凭据是从名为`/secrets/credentials.json的Google云下载的文件中加载的

    kubectl create secret generic service-account-credentials --from-file=key.json=/secrets/credentials.json
    
    在部署文件中添加以下内容以装载卷

    spec:
      volumes:
      - name: google-cloud-key
        secret:
          secretName: service-account-credentials
    ...
      containers:
        volumeMounts:
        - name: google-cloud-key
          mountPath: /var/secrets/google
    
    在容器内部,凭证从
    /var/secrets/google/key.json

    Python示例:

    from google.cloud import storage
    client = storage.Client.from_service_account_json('/var/secrets/google/key.json')
    
    本文档提供有关Kubernetes服务帐户凭据的逐步详细信息


    确定,因此无法隐式引用它们。我必须为每个服务帐户生成一个密钥,将其作为k8s机密上传,装入k8s机密卷,在我的应用程序代码中明确引用它-正确吗?基本上是的,这是官方方式。在容器内(或在VM实例中),您不能按名称引用凭据(AWS STS),您需要实际的凭据文件/OAuth访问令牌。Google Kubernetes容器没有独立的元数据服务器-这意味着元数据服务器是VM实例的一部分,在容器级别上没有隔离。不在这个问题的范围之内,但是您知道AWS上的eks是否支持ECS服务之类的服务角色吗?或者eks与gke的工作原理相同?AWS也是有限的,但也有选择。看看Kube2IAM。这可能也是谷歌K8s的一个想法。这并不难实现。谷歌是Kubernetes之父,因此AWS不能偏离K8s核心太远,否则更新和第三方支持将是一个问题。然而,AWS确实倾向于更快地推出安全功能,这是我喜欢的。