# @factbird/drata-cdk-stackset 中文文档

规范地址：https://npmcn.com/package/%40factbird/drata-cdk-stackset/

版本：0\.1\.0
npm 元数据更新时间：2024-12-23T09:29:25.496Z
中文译文更新时间：2026-11-14T13:41:40.786Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40factbird/drata-cdk-stackset
原文对照：https://npmcn.com/package/%40factbird/drata-cdk-stackset/?lang=original
项目主页：https://github.com/FactbirdHQ/drata-cdk-stackset#readme
源码仓库：https://github.com/FactbirdHQ/drata-cdk-stackset

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：8.5 kB，6 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：3 个
- peer 依赖：aws-cdk-lib ^2\.173\.2，cdk-stacksets ^0\.0\.150，constructs ^10\.4\.2
- 首次发布：2024-12-19T22:48:39.623Z
- 最新版本发布：2024-12-23T09:29:25.293Z
- 近 30 天下载量：2025（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 0 个）

## 中文简介

由 Drata 的官方模板生成的 CDK 构造 [https://github.com/drata/aws-cloudform-drata-setup 页面存档备份,存于互联网档案馆](https://github.com/drata/aws-cloudformation-drata-setup)

## 安装

```sh
npm install @factbird/drata-cdk-stackset
```

也可以使用：`pnpm add @factbird/drata-cdk-stackset`、`yarn add @factbird/drata-cdk-stackset`、`bun add @factbird/drata-cdk-stackset`

## README

# Drata CDK 堆栈集

由 Drata 的官方模板生成的 CDK 构造 [https://github.com/drata/aws-cloudform-drata-setup 页面存档备份,存于互联网档案馆](https://github.com/drata/aws-cloudformation-drata-setup)

## 安装

```bash
npm i --save-dev @factbird/drata-cdk-stackset
```

## 使用量

这一设置假设了以下账户结构:

1.  一个被信任为授权管理员账户的孤立的 Drata 账户
2.  管理( 与 AWS CloudFormationStackSet ExecutionRole 连接, 以信任孤立的 Drata 账户)
3.  目标账户

由服务管理的StackSets不会部署到管理账户,因此为什么 自我管理的变体是必要的。 类似地,一个堆栈集 `UNION` 部署 对创建事件不支持目标过滤器.

1\. 和2. 均作为自行管理的堆放装置部署,3. 被作为一个装置部署 服务管理堆栈, 将新账户添加到 OU 中 自动.

如果 2 还没有执行角色, 您可以单独部署, 否则跳过此步骤, 而是扩展您 Drata 账户的信任政策 :

```typescript
import { App, Stack } from 'aws-cdk-lib';
import { AccountPrincipal, ManagedPolicy, Role } from 'aws-cdk-lib/aws-iam';

const yourAccounts = {
  drata: '987654321',
  management: '1234567890',
};

const app = new App();

const stack = new Stack(app, 'stackset-execution', {
  env: {
    account: yourAccounts.management,
  },
});

new Role(stack, 'StackSetExecutionRole', {
  roleName: 'AWSCloudFormationStackSetExecutionRole',
  managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('AdministratorAccess')],
  assumedBy: new AccountPrincipal(yourAccounts.drata),
});
```

对于 Drata 相关资源, StackSets 的两个变体都可以像这样创建:

```typescript
import { App, Stack } from 'aws-cdk-lib';
import { DeploymentType, StackSet, StackSetTarget, StackSetTemplate } from 'cdk-stacksets';
import { DrataStackSet } from '@factbird/drata-cdk-stackset';

const organizationalUnits = {
  targetAccounts: 'ou-1234567',
};

const yourAccounts = {
  drata: '987654321',
  management: '1234567890',
};

const externalId = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee';

const app = new App();

const stack = new Stack(app, 'drata', {
  env: {
    account: yourAccounts.drata,
  },
});

// The Drata account itself needs to execute the StackSets as a self-managed
// variant
new Role(stack, 'StackSetExecutionRole', {
  roleName: 'AWSCloudFormationStackSetExecutionRole',
  managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('AdministratorAccess')],
  assumedBy: new AccountPrincipal(yourAccounts.drata),
});


const drataStackSet = new DrataStackSet(stack, 'DrataStack');

const serviceManaged = new StackSet(stack, 'drata-service-managed', {
  target: StackSetTarget.fromOrganizationalUnits({
    regions: ['us-east-1'],
    organizationalUnits: Object.values(organizationalUnits),
    parameterOverrides: {
      externalId,
    },
  }),
  deploymentType: DeploymentType.serviceManaged(),
  template: StackSetTemplate.fromStackSetStack(drataStackSet),
  capabilities: [Capability.NAMED_IAM],
});

const selfManaged = new StackSet(stack, 'drata-self-managed', {
  target: StackSetTarget.fromAccounts({
    regions: ['us-east-1'],
    accounts: [yourAccounts.management, yourAccounts.drata],
    parameterOverrides: {
      externalId,
    },
  }),
  template: StackSetTemplate.fromStackSetStack(drataStackSet),
  capabilities: [Capability.NAMED_IAM],
});

// Consider if the following two workarounds are still necessary:

// See https://github.com/cdklabs/cdk-stacksets/pull/678
if (selfManaged.role) {
  selfManaged.node.addDependency(selfManaged.role);
}

// See https://github.com/cdklabs/cdk-stacksets/issues/115
for (const stackSet of [serviceManaged, selfManaged]) {
  const cfnStackSet = stackSet.node.defaultChild as CfnStackSet;
  cfnStackSet.addOverride('Properties.Parameters', [
    {
      ParameterKey: 'externalId',
      ParameterValue: '',
    },
  ]);
}
```

然后简单地将 StackSets 部署到 Drata AWS 专用账户中,账户为:

```typescript
npx cdk deploy
```

## 捐款

安装 Nix并输入开发 shell,

```bash
nix develop --impure
```

或简单 `direnv allow` 如果你安装了格伦夫.

## 发布

外壳环境中有出版的脚本可供使用. 简单运行 :

```bash
publish
```

## 常见问题

### @factbird/drata-cdk-stackset 是什么？

由 Drata 的官方模板生成的 CDK 构造 https://github\.com/drata/aws-cloudform-drata-setup 页面存档备份,存于互联网档案馆

### 如何安装 @factbird/drata-cdk-stackset？

在项目目录运行 npm install @factbird/drata-cdk-stackset，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：aws-cdk-lib（^2\.173\.2）、cdk-stacksets（^0\.0\.150）、constructs（^10\.4\.2）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @factbird/drata-cdk-stackset 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @factbird/drata-cdk-stackset 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @factbird/drata-cdk-stackset 可以商用吗？

@factbird/drata-cdk-stackset 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @factbird/drata-cdk-stackset 的下载量有多少？

根据 npm 官方下载统计，@factbird/drata-cdk-stackset 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,025 次，日均约 68 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @factbird/drata-cdk-stackset 还在维护吗？

最新版本 0\.1\.0 发布于 2024/12/23（1\.9 年前）；至今共发布 5 个版本，其中过去 12 个月发布了 0 个；首次发布于 2024/12/20。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

