使用Crossplane创建AWS IAM角色失败:提示缺少区域
问题
使用Crossplane结合Kubernetes管理AWS基础设施,通过ArgoCD实现自动化部署,采用provider-aws@v0.40.0版本。创建IAM全局资源(Role、RolePolicyAttachment、Policy、OpenIDConnectProvider)时全部失败,错误提示缺少区域信息:
failed to get Role with name: operation error IAM: GetRole, failed to resolve service endpoint, an AWS region is required, but was not found
所用Role资源清单如下:
apiVersion: iam.aws.crossplane.io/v1beta1 kind: Role metadata: name: test-role spec: providerConfigRef: name: aws forProvider: assumeRolePolicyDocument: | { // redacted }
已知情况:IAM属于AWS全局服务,无需指定区域;Crossplane文档显示IAM相关资源无法传入区域参数,ProviderConfig也无区域配置入口;其他带有区域字段的AWS资源可正常部署。
解决方案
尽管IAM是全局服务,但provider-aws@v0.40.0依赖的AWS SDK要求必须指定区域才能正确解析服务端点,因此需要在ProviderConfig中添加区域配置:
- 编辑你的AWS ProviderConfig资源,添加
region字段(可填任意有效AWS区域,比如us-east-1):
apiVersion: aws.crossplane.io/v1beta1 kind: ProviderConfig metadata: name: aws spec: credentials: source: Secret secretRef: namespace: crossplane-system name: aws-creds key: credentials region: us-east-1
- 应用更新后的配置:
kubectl apply -f provider-config.yaml
- 重新触发IAM资源的部署(比如通过ArgoCD同步)
说明
AWS IAM的API端点是全局的(iam.amazonaws.com),但AWS SDK初始化时必须设置区域参数才能构建请求上下文。provider-aws@v0.40.0不会自动为全局服务填充默认区域,因此手动指定任意有效区域即可解决该问题,不会影响IAM资源的全局属性。
内容的提问来源于stack exchange,提问作者AlecBrooks
相关产品推荐
相关产品推荐

