You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Kubernetes配置AWS服务及实现IAM连接的最佳实践

这是个很棒的需求——用Kubernetes Chart统一管理AWS资源和应用,同时用IAM实现安全的无密钥访问,我来给你梳理下业界公认的最佳实践方案:

核心方案:AWS Controllers for Kubernetes (ACK) + IAM Roles for Service Accounts (IRSA)

这两个工具是AWS官方推出的黄金组合,完美匹配你想要的「用K8s Chart配置AWS服务+IAM认证访问」的场景。

1. 先部署ACK的DynamoDB控制器

ACK是专门用来在Kubernetes中管理AWS服务的Operator,它通过自定义资源定义(CRD)让你像操作Deployment、Service一样操作DynamoDB、S3等AWS资源。

首先安装DynamoDB对应的ACK控制器(用Helm最方便):

helm install dynamodb-ack oci://public.ecr.aws/aws-controllers-k8s/dynamodb-chart --namespace ack-system --create-namespace

安装完成后,你的K8s集群就会新增DynamoDB Table的CRD,接下来就能用Chart定义DynamoDB表了。

2. 把你的自定义Chart转换成ACK兼容的格式

你提供的示例Chart需要调整成ACK的DynamoDB Table CRD格式,这样ACK控制器才能识别并在AWS上创建表。调整后的模板文件(比如templates/dynamodb-table.yaml)大概是这样:

apiVersion: dynamodb.services.k8s.aws/v1alpha1
kind: Table
metadata:
  name: a-test-table
spec:
  attributeDefinitions:
    - attributeName: some_id
      attributeType: S  # 字符串类型,对应你的hash_key
    - attributeName: some_order
      attributeType: N  # 数字类型,对应你的range_key
  keySchema:
    - attributeName: some_id
      keyType: HASH
    - attributeName: some_order
      keyType: RANGE
  # 按需配置吞吐量,也可以用按需模式
  provisionedThroughput:
    readCapacityUnits: 5
    writeCapacityUnits: 5

把这段放到你的Chart里,部署时ACK就会自动在AWS上创建名为a-test-table的DynamoDB表。

3. 用IRSA实现无密钥IAM访问

IRSA是AWS推荐的K8s Pod访问AWS服务的安全方式,它让K8s的Service Account直接关联AWS IAM角色,Pod使用这个SA时会自动获取临时IAM凭证,完全不需要硬编码密钥对。

具体步骤:

  • 创建IAM角色并配置权限:新建一个IAM角色,给它附加访问目标DynamoDB表的权限(建议用最小权限原则,比如只允许dynamodb:GetItem、dynamodb:PutItem等必要操作,而不是全量权限)。
  • 配置信任关系:在IAM角色的信任策略中,添加你的K8s集群的OIDC提供商作为信任实体,指定只有特定的K8s Service Account可以扮演这个角色。
  • 在Pod中使用关联的Service Account:在你的应用Deployment的Pod模板里,指定serviceAccountName为刚才关联了IAM角色的SA。这样Pod启动后,会自动获得对应的IAM权限,直接访问DynamoDB即可。

4. 整合到你的Chart中

你可以把DynamoDB Table CRD、应用Deployment、关联IRSA的Service Account都打包到同一个Chart里,或者拆分成子Chart来维护。比如:

  • 在templates目录下添加dynamodb-table.yaml(上面的CRD内容)
  • 添加service-account.yaml定义关联IRSA的Service Account
  • 在Deployment的Pod模板里引用这个Service Account

5. 验证部署效果

部署完成后,你可以做这些验证:

  • 用kubectl get tables.dynamodb.services.k8s.aws查看K8s中DynamoDB资源的状态,确认STATUS为ACTIVE
  • 登录AWS控制台,检查DynamoDB控制台是否存在a-test-table
  • 进入应用Pod,执行aws dynamodb describe-table --table-name a-test-table(如果安装了AWS CLI),应该能正常返回表信息,且不需要配置任何密钥环境变量

内容的提问来源于stack exchange,提问作者Fuyang Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:44:29