如何使用 OIDC 和 EKS 的 cdk 跨账户访问

How to use cdk cross-account access with OIDC and EKS

已关注此 link:Enabling cross-account access to Amazon EKS cluster resources 我可以让 ci account 中托管的 Amazon EKS 集群中的 pod 与 target account 中的 AWS 资源进行交互和管理。 这是 aws 配置文件:

[profile ci-env]
role_arn = arn:aws-cn:iam::CICD_ACCOUNT:role/eksctl-jenkins-cicd-demo-addon-iamserviceacc-Role1-1AQZO394370HE
web_identity_token_file = /var/run/secrets/eks.amazonaws.com/serviceaccount/token
region = cn-north-1

[profile target-env]
role_arn = arn:aws-cn:iam::TARGET_ACCOUNT:role/target-account-iam-role
source_profile = ci-env
role_session_name = xactarget
region = cn-north-1

当我 运行 aws s3 ls --profile target-env 时,它起作用并列出了我 target account 中的 s3 存储桶。

然后,我想在 ci account 上部署一个 cdk app,它可以在 target account 上创建 s3 存储桶。 但是当我运行cdk deploy --profile target-env的时候,出现了:

Need to perform AWS calls for account TARGET_ACCOUNT, but no credentials have been configured.

我很迷茫,不知道怎么解决。 我是aws服务的新手,在此先感谢您对我的帮助!

您需要 bootstrap 您的所有(目标)帐户都信任 CICD 帐户。

否则,您必须自己创建和管理 cross-account 访问权限。

  • IAM 角色 + 策略(在所有账户中)
  • 工件的 S3 存储桶 + 存储桶策略(在 CICD 帐户中)
  • 密钥管理服务 -> 客户管理的密钥 + 允许目标帐户的策略

您可以在此处找到一个示例架构,它正在应用:

如果可能的话,您可能会切换到 CDK Pipelines。 在本指南中,还应用了引导程序(包括信任),并且正在创建和正确配置上面提到的每个 step/resource。 它目前有一些缺点,但它处于开发人员预览阶段并且具有相当不错的可用性并且已经让您的生活变得更加轻松。