AWS CDK:如何在另一个账户中访问 VPC

AWS CDK: How to access VPC in another account

我需要从我的 "tools" 账户访问我的 staging/prod 账户的 VPC 中的资源(我在两个 VPC 中都有一个 RDS 实例,并希望将架构升级自动化作为我的一部分CI/CD).

如何从 "tools" 账户的堆栈中的 staging/prod 账户导入 VPC?

Vpc.fromLookup() 不起作用,因为它会在堆栈的区域和帐户中搜索 VPC,但不会在其他 regions/accounts 中搜索。

编辑:

我想授予 "tools" 账户中的 CodeBuild 项目(CodePipeline 的一部分)访问 prod/staging 账户的 VPC 中的 RDS 实例的权限。 为了授予它访问权限,我在 CodeBuild 项目上使用 vpc attribute

我不确定使用 CodePipeline/CodeBuild 解决模式升级的最佳方法是什么。 理想情况下,RDS 实例应位于 private/isolated 子网中。

const dbMigrateBuild = new codebuild.PipelineProject(this, 'MigrateBuild', {
  buildSpec: codebuild.BuildSpec.fromSourceFilename('buildspec-migrate.yml'),
  environment: {
    buildImage: codebuild.LinuxBuildImage.STANDARD_4_0,
  },
  environmentVariables: {
    migrationBucketId: {
      type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
      value: sourceOutput.bucketName,
    },
    dbEndpoint: {
      type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
      value: dbEndpoint,
    },
    dbSecretId: {
      type: codebuild.BuildEnvironmentVariableType.PLAINTEXT,
      value: dbSecretId,
    },
  },
  vpc: ec2.Vpc.fromLookup(this, 'Vpc', { vpcId }), // <-- this is not working
});

// dbMigrateBuild.connections.allowToDefaultPort(db); // how to grant permission ??

const dbMigrateAction = new codepipeline_actions.CodeBuildAction({
  actionName: 'Db_Migrate',
  project: dbMigrateBuild,
  input: sourceOutput,
  runOrder: 130,
});

为此,您需要执行以下操作之一:

  • 担任 "other account" 的角色。
  • 通过在 CLI 上执行 export of the variables,使用担任此角色的凭据检索您的值。

这必须在 运行 cdk 命令之前执行,使用 sts assume-role 命令。