亚马逊AWS官方博客

Amazon EKS Pod Identity 简化了 Amazon EKS 集群上的应用程序的 IAM 权限



从今天开始,您可以利用 Amazon EKS Pod Identity 简化访问 AWS 服务的应用程序。使用此增强功能,您可以无缝、轻松地配置体验,以便为 Amazon Elastic Kubernetes Service(Amazon EKS)集群中的应用程序定义所需的 IAM 权限,从而连接集群之外的 AWS 服务。

Amazon EKS Pod Identity 可以帮助您解决在很多 EKS 集群中管理权限时面临的越来越多的挑战。

利用 Amazon EKS Pod Identity 简化体验
2019 年,我们推出了面向服务账户的 IAM 角色(IRSA)。IRSA 可以将 IAM 角色与 Kubernetes 服务账户相关联。它可以只向容器组(pod)提供它们所需的权限,以帮助您实施最低权限原则。这种方法优先考虑 IAM 中的容器组(pod),并帮助开发人员为应用程序配置精细权限,以便能够对 AWS 服务进行最低权限访问。

现在,使用 Amazon EKS Pod Identity,可以更加轻松地配置和自动授予对 Kubernetes 身份的 AWS 权限。作为集群管理员,您无需再在 Amazon EKS 与 IAM 服务之间切换,即可对要访问所有 AWS 资源的应用程序执行身份验证。

开始使用 Amazon EKS Pod Identity 的整体工作流可以概括为几个简单的步骤:

  • 步骤 1:创建一个对应用程序拥有所需权限的 IAM 角色,并在它的信任策略中指定 pods.eks.amazonaws.com 作为服务主体。
  • 步骤 2:使用 Amazon EKS 控制台或 AWS 命令行界面(AWS CLI),安装 Amazon EKS Pod Identity Agent 插件。
  • 步骤 3:在 Amazon EKS 控制台、API 或 AWS CLI 中,直接将此角色映射到一个服务账户。

完成之后,会自动将使用此服务账户的任何新容器组(pod)配置为接收 IAM 凭证。

我们开始吧
我将向大家展示如何开始使用 EKS Pod Identity。对于本文中的演示,我需要为我的 Amazon EKS 集群中运行的简单 API 配置权限,它将返回我的 Amazon Simple Storage Service(Amazon S3)存储桶中的文件列表。

首先,我需要创建一个 IAM 角色以提供所需的权限,以使我的应用程序能够正常运行。在此示例中,我需要配置权限,以访问我的 S3 存储桶。

接下来,在同一个 IAM 角色上,我需要配置它的信任策略,并将主体配置为 pods.eks.amazonaws.com。下面是我使用的 IAM 模板:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "pods.eks.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession"
            ]
        }
    ]
}

在此阶段,我的 IAM 角色已经准备就绪,现在我们需要在我的集群中配置 Amazon EKS Pod Identity Agent。在本文中,我正在使用一个现有的 EKS 集群。如果您希望了解如何执行此操作,请访问 Amazon EKS 入门

接下来,我导航到 Amazon EKS 控制面板,然后选择我的 EKS 集群。

在我的 EKS 集群页面中,我需要选择插件选项卡,然后选择获取更多插件

随后,我需要添加 Amazon EKS Pod Identity Agent 插件。

在下一页上,如果需要,我可以添加其他配置。在此示例中,我保留默认配置并选择下一步

随后,我只需查看我的插件配置并选择创建

几分钟后,将为我的集群激活 Amazon EKS Pod Identity Agent 插件。

当我的集群拥有 Amazon EKS Pod Identity 之后,我需要将 IAM 角色与我的 Kubernetes 容器组(pod)相关联。

我需要导航到我的 EKS 集群中的访问选项卡。在 Pod Identity 关联部分中,我选择创建 Pod Identity 关联,以便将我的 IAM 角色映射到 Kubernetes 容器组(pod)。

在这里,我使用我最初创建的 IAM 角色。我还需要定义我的 Kubernetes 命名空间和服务账户。如果它们尚不存在,我可以键入命名空间和服务账户的名称。如果它们已经存在,我可以从下拉列表中选择它们。随后,我选择创建

以上是我需要执行的所有步骤,这样即可使用 EKS Pod Identity 为在 Amazon EKS 上运行的应用程序配置 IAM 权限。现在,我可以看到 Pod Identity 关联中列出了我的 IAM 角色。

当我测试在 Amazon EKS 上运行的 API 时,它会按预期方式运行,并返回我的 S3 存储桶中的文件列表。

curl -X https://<API-URL> -H "Accept: application/json" 

{
   "files": [
         "test-file-1.md",
         "test-file-2.md"
    ]        
}

我发现,Amazon EKS Pod Identity 简化了我为 Amazon EKS 上运行的应用程序管理 IAM 角色的体验。我可以轻松在多个 EKS 集群中重复使用 IAM 角色,而无需在每次创建新集群时更新角色信任策略。

用来配置 EKS Pod Identity 的新 AWS API
使用 AWS CLI,您还可以灵活地为您的集群配置 Amazon EKS Pod Identity。Amazon EKS Pod Identity 提供了一组新的 API 供您使用。

例如,我可以使用 aws eks create-addon 将 Amazon EKS Pod Identity Agent 插件安装到我的集群中。下面是用来执行此操作的 AWS CLI 命令:

$ aws eks create-addon \
--cluster-name <CLUSTER_NAME> \
--addon-name eks-pod-identity-agent \
--addon-version v1.0.0-eksbuild.1

{
    "addon": {
    "addonName": "eks-pod-identity-agent",
    "clusterName": "<CLUSTER_NAME>",
    "status": "CREATING",
    "addonVersion": "v1.0.0-eksbuild.1",
    "health": {
        "issues": []
        },
    "addonArn": "<ARN>",
    "createdAt": 1697734297.597,
    "modifiedAt": 1697734297.612,
    "tags": {}
    }
}

另一个能够说明 AWS API 用途的示例是将 IAM 角色映射到您的 Kubernetes 容器组(pod)。

$ aws eks create-pod-identity-association \
  --cluster-name <CLUSTER_NAME> \
  --namespace <NAMESPACE> \
  --service-account <SERVICE_ACCOUNT_NAME> \
  --role-arn <IAM_ROLE_ARN>

注意事项

可用性 – Amazon EKS Pod Identity 已在 Amazon EKS 支持的所有 AWS 区域提供,但 AWS GovCloud(美国东部)、AWS GovCloud(美国西部)、中国(北京,由北京光环新网科技股份有限公司运营)和中国(宁夏,由宁夏西云数据科技有限公司运营)区域除外。

定价 – Amazon EKS Pod Identity 免费提供。

支持的 Amazon EKS 集群 – Amazon EKS Pod Identity 支持在 Amazon EKS 中运行 1.24 和更高版本的 Kubernetes。您可以查看 EKS Pod Identity 集群版本,以了解更多信息。

支持的 AWS SDK 版本 – 您需要更新应用程序,才能使用最新的 AWS SDK 版本。请查看 AWS 开发人员工具,以了解如何安装和更新您的 AWS SDK。

立即开始并访问 EKS Pod Identity 文档页面,以详细了解如何简化应用程序的 IAM 管理。

祝大家构建顺利!
Donnie