跳转到主要内容

IAMbic 是一个多云 IAM 控制平面,它将 AWS、Okta、Azure Active Directory、Google Workspace 等云身份管理统一到 Git。

项目描述

noqdev - iambic Supported Versions codecov.io stars - iambic forks - iambic

slack

IAMbic: 云 IAM 作为代码

"IAMbic: IAM 的版本控制"

IAMbic 是为 DevSecOps、安全和合规团队设计的。它提供了增强的可见性、审计和(可选)对规模 IAM 的控制。它集成了 IAM 源,如 AWS、Okta、Azure AD 和 Google Workspace,并将它们合并到单个版本控制系统(Git)中,这些系统以人类可读的 YAML 文件形式存在,称为“IAMbic 模板”。

无论您是通过 Terraform、CDK、CloudFormation、手动控制台操作还是这些操作的组合来管理资源,IAMbic 都会确保您的 Git 仓库与云 IAM 的实时状态保持同步。任何 IAM 变更,无论其来源如何,都会触发 git 提交。这确保您有一个包含所有 IAM 的 Git 仓库,以统一的格式呈现,包括 Git 历史中的全面审计跟踪。此跟踪详细说明了每个变更、其时间戳和责任实体。

如果您希望采取不干预的方法,IAMbic 可以仅作为审计和可见性工具运行,以便对 IAM 变更有更大的可见性,如上所述。但是,您也可以使用 IAMbic 来管理和防止您指定的 IAM 资源漂移。IAMbic 模板是双向的,这意味着 IAMbic 可以通过您的 CI/CD 管道将 IAM 变更写回云中。GitHub 上会创建一个带有所需更改的拉取请求,经过批准后,然后在云和 Git 中进行反映。此外,IAMbic 允许您声明临时访问或权限 - 它将在定义的过期期结束后处理策略的过期和删除。例如,请参阅 IAMbic 快速入门指南

如果您想了解更多关于通过 Github Pull-Request 流程进行 IAM 变更的信息,请查看我们 GitOps/IAMOps 哲学页面 上的示例。我们还有一个由 IAMbic 完全管理的 iambic-templates 示例仓库

更多信息请访问 https://docs.iambic.org

以下是 BeABetterDev 的 IAMbic 概述和深度分析视频,快速了解 IAMbic 的功能。

IAMbic Overview and Deep Dive video

如果您需要帮助开始或者有任何问题,请访问我们的 Slack

与 Terraform 或其他 IaC 工具的集成

IAMbic 设计与 Terraform 和其他基础设施即代码 (IaC) 解决方案协同工作。它作为一个补充工具,通过提供集中式可见性和审计来增强现有 IaC 设置的强度。要了解 IAMbic 和 Terraform 如何共同提升 IAM,以及如何在您的 DevOps 流程中无缝集成,请查看我们的 深度博客文章

以下是 IAMbic 和 Terraform 之间关键区别的表格

功能 IAMbic Terraform (或其他 IaC)
多账户 AWS 和组织 原生支持 第三方工具 (Terragrunt 等)
声明式临时
访问/权限
原生支持
导入当前 IAM
到 VCS
第三方工具
(限于单个 AWS 账户)
自动将新的 IAM
更改提交到 VCS
云审计 IAM 变更
双向同步
漂移预防 有限
集中式真实来源
所有 IAM 的当前状态
多云支持 目前支持 AWS、Azure AD、Okta 和 Google Workspace,
更多即将到来。
语言 YAML HCL
开源
集中式
治理与合规
原生在 VCS
社区支持 增长中 强大

关键功能

  • IAM 版本控制:IAMbic 通过将它们集中到一个易于阅读的 Git 仓库中,帮助您审核和(可选)管理来自不同来源的 IAM。
  • 全面的审计跟踪:IAMbic 为所有 IAM 变更创建 Git 提交,无论它们是如何发生的。这为您提供了 Git 历史记录中的全面审计跟踪。
  • 临时访问和权限:声明性地定义和自动化资源、权限和访问规则的到期日期。
  • 漂移预防:保护您希望通过 IAMbic 专有管理的 IAM 资源。IAMbic 将自动还原这些资源的任何非计划更改。
  • 动态 AWS 权限:通过灵活的模板简化多账户 AWS 管理,允许多账户角色在不同的账户上有不同的权限和访问规则。
  • 集中式管理:IAMbic 保持 Git 更新,以反映云环境的最新、完整状态,在 Git 中维护多个云提供商的单一来源的真实性,以进行审计和合规性。
  • 可扩展性:通过强大的插件架构与各种云和应用程序集成。
  • 可审计性:使用 Git 历史记录跟踪 IAM 策略、权限和规则的更改。对于 AWS,IAMbic 用 CloudTrail 的详细信息注释非计划提交。

查看IAMbic IAMOps 哲学IAMbic 模板示例仓库,以了解 IAMbic 的实际应用。

📣 一起来聊聊

您想与我们贡献者取得联系吗?

只需点击下面的按钮,并按照说明操作。

slack

入门指南

通过我们的快速入门指南深入了解 IAMbic,并探索 AWS 多账户角色、身份中心(SSO)权限集、服务控制策略、动态权限、Okta 应用和组分配、Azure Active Directory 用户和组以及 Google Workspace 组分配等强大的模板示例。

我们正在快速扩展对现有资源和云提供商的支持,请经常查看!

IAMbic 安装和支持版本

  1. 安装必需的先决条件
  2. 安装和配置 IAMbic

模板示例

以下是展示 IAMbic 功能的一些示例

AWS 多账户 Cloudwatch 角色

创建一个具有静态权限的 Cloudwatch 角色,跨三个账户动态生成角色名称。该模板将在相应的 AWS 账户上创建三个角色:“dev_cloudwatch”、“staging_cloudwatch”和“prod_cloudwatch”。

有关更多信息,请参阅AWS 入门指南、我们的示例模板仓库中的 AWS IAM 角色部分以及我们关于多账户角色的博客文章

template_type: NOQ::AWS::IAM::Role
identifier: '{{var.account_name}}_cloudwatch'
included_accounts:
    - dev
    - staging
    - prod
properties:
  description:
    - description: Cloudwatch role for {{var.account_name}}
  assume_role_policy_document:
    statement:
      - action:
          - sts:AssumeRole
          - sts:TagSession
        effect: Allow
        principal:
          aws: arn:aws:iam::123456789012:role/ExampleRole
    version: '2012-10-17'
  inline_policies:
    policy_name: cloudwatch_logs
    statement:
      - effect: allow
        action:
            - logs:DescribeLogGroups
            - logs:DescribeLogStreams
            - logs:GetLogEvents
            - logs:GetLogRecord
            - logs:GetQueryResults
            - logs:TestMetricFilter
            - logs:FilterLogEvents
            - logs:StartQuery
            - logs:StopQuery
        resource: "*"
  managed_policies:
    - policy_arn: arn:aws:iam::aws:policy/AdministratorAccess
  role_name: '{{var.account_name}}_cloudwatch'
  tags:
    - key: owner
      value: devops

AWS 动态权限

创建一个根据 AWS 账户权限变化的 BackendDeveloperRole。有关更多信息,请参阅AWS 入门指南

template_type: NOQ::AWS::IAM::Role
identifier: '{{var.account_name}}_backend_developer'
included_accounts:
  - '*'
excluded_accounts:
  - compliance
properties:
  description:
    - description: Backend developer role for {{var.account_name}}
  assume_role_policy_document:
    statement:
      - action:
          - sts:AssumeRole
          - sts:TagSession
        effect: Allow
        principal:
          aws: arn:aws:iam::123456789012:role/ExampleRole
    version: '2012-10-17'
  inline_policies:
    - policy_name: s3_policy
      statement:
        - # Policy applies to role on all accounts except `customer_data`.
          excluded_accounts:
            - customer_data
          effect: allow
          action:
              - s3:GetObject
              - s3:ListObject
          resource:
              - "*"
          condition:
            StringNotEquals:
                s3:ResourceTag/sensitive: 'true'
        - # Allow write access to non-sensitive resources on the dev account
          included_accounts:
            - dev
          effect: allow
          action:
              - s3:PutObject
          resource:
              - "*"
          condition:
                StringNotEquals:
                    s3:ResourceTag/sensitive: 'true'
  role_name: '{{var.account_name}}_backend_developer'
  tags:
    - key: owner
      value: devops

AWS 身份中心(SSO)权限集

创建一个根据 AWS 账户权限变化的 AWS 身份中心(SSO)权限集。有关更多信息,请参阅AWS 入门指南、我们的示例模板仓库中的 AWS IC/SSO 权限集部分以及我们关于使用 IAMbic 调整 AWS 身份中心(SSO)权限的博客文章。

template_type: NOQ::AWS::IdentityCenter::PermissionSet
access_rules:
  - expires_at: 2028-05-19T14:17 UTC
    groups:
      - engineering
identifier: design
properties:
  name: design
  customer_managed_policy_references:
    - name: base_deny
  inline_policy:
    statement:
      - action:
          - ec2:list*
        effect: Deny
        resource:
          - '*'
      - action:
          - ec2:list*
        effect: Deny
        expires_at: 2033-05-19T14:17 UTC
        resource:
          - '*'
  managed_policies:
    - arn: arn:aws:iam::aws:policy/AWSHealthFullAccess
  permissions_boundary:
    customer_managed_policy_reference:
      name: base_permission_boundary
  session_duration: PT4H
  tags:
    - key: owner
      value: design@example.com

Okta 应用分配

管理 Okta 应用分配,包括特定用户的到期日期。有关更多信息,请参阅Okta 入门指南

template_type: NOQ::Okta::App
idp_name: development
properties:
  name: Salesforce.com
  assignments:
    - user: username@example.com
    - user: username2@example.com
    - user: username3@example.com
      expires_at: 2023-09-01T00:00 UTC
  status: ACTIVE

AWS 服务控制策略

管理对 AWS 服务的访问可能很复杂。这就是服务控制策略(SCP)的用武之地。SCP 允许您定义 AWS 账户中可访问的服务和操作。借助 IAMbic,您可以导入现有的 SCP,创建新的 SCP 来限制对特定 AWS 服务的访问,并防止出现任何漂移,以确保您以预期的方式保护敏感信息。

例如,假设您想限制对某些 AWS 区域的访问。您可以创建一个 SCP,拒绝除您指定的区域以外的所有区域的访问。如果您希望更严格地控制数据居住地和合规性,这特别有用。

以下是如何设置此功能的示例

template_type: NOQ::AWS::Organizations::SCP
account_id: '123456789012'
iambic_managed: enforced
identifier: RestrictRegions
org_id: o-123456
properties:
  policy_document:
    statement:
      - condition:
          StringNotEquals:
            aws:RequestedRegion:
              - us-east-1
              - us-west-2
        effect: Deny
        not_action:
          - a4b:*
          - budgets:*
          - ce:*
          - chime:*
          - cloudfront:*
          - cur:*
          - globalaccelerator:*
          - health:*
          - iam:*
          - importexport:*
          - mobileanalytics:*
          - organizations:*
          - route53:*
          - route53domains:*
          - shield:*
          - support:*
          - trustedadvisor:*
          - waf:*
          - wellarchitected:*
        resource:
          - '*'
  policy_name: RestrictRegions
  targets:
    roots:
      - r-123

在这个示例中,名为 RestrictRegions 的 SCP 拒绝访问除 us-east-1us-west-2 之外的所有 AWS 区域。它还排除了某些全局服务。

有关如何开始使用AWS和SCP的更多信息,请参阅我们的AWS入门指南以及示例模板仓库中的AWS SCP部分。您还可以在我们的博客文章中了解更多关于如何使用IAMbic按账户定制AWS身份中心(SSO)权限的信息。

Okta群组分配

轻松管理带有成员到期日期的Okta群组分配。有关更多信息,请参阅Okta入门指南

template_type: NOQ::Okta::Group
idp_name: main
properties:
  name: engineering_interns
  description: Engineering Interns
  members:
    - username: intern1@example.com
      expires_at: 2023-09-01 # Interns last day
    - username: intern2@example.com
      expires_at: 2023-09-01

Google群组分配

管理Google Workspace群组分配,包括外部用户的临时访问。有关更多信息,请参阅Google Workspace入门指南

template_type: NOQ::GoogleWorkspace::Group
properties:
  name: DockerHub
  description: Dockerhub Access
  domain: example.com
  email: dockerhub@example.com
  members:
    - email: owner@example.com
      role: OWNER
    - email: external_user@gmail.com
    - email: some_engineer@example.com
      expires_at: 2023-03-05

Azure Active Directory用户

管理Azure Active Directory用户及其属性。有关更多信息,请参阅Azure AD入门指南

expires_at: 2025-01-01
template_type: NOQ::AzureAD::User
idp_name: development
properties:
  display_name: Example User
  given_name: Example
  username: user@example.com

Azure Active Directory群组和群组分配

管理Azure Active Directory群组和群组分配,包括外部用户的临时访问。有关更多信息,请参阅Azure AD入门指南

template_type: NOQ::AzureAD::Group
idp_name: development
properties:
  name: iambic_test_group
  description: A test group to use with IAMbic
  members:
    - name: user@example.com
      data_type: user
      expires_at: tomorrow

预览独立的IAMbic模板仓库

在GitHub上预览独立的IAMbic模板仓库,了解IAMbic如何跟踪多云IAM资产。此仓库已公开供您研究。无需将您的仓库公开。

IAMbic - 测试版软件

IAMbic目前处于测试版,不建议在生产环境中使用。我们正在积极改进软件的稳定性和性能,并欢迎社区反馈。

如果您选择在当前状态下使用IAMbic,请注意您可能会遇到错误、性能问题或其他意外行为。我们强烈建议在生产环境中使用IAMbic之前,在非生产环境中对其进行彻底测试。

请将任何问题或反馈报告给我们的GitHub问题跟踪器。感谢您对项目的支持和贡献!

贡献

欢迎并鼓励向IAMbic做出贡献!如果您发现错误或想提出改进建议,请创建一个问题。我们也欢迎合并请求。

联系我们

如果您有任何问题或反馈,请通过Slack联系我们。我们很乐意听到您的声音!

许可协议

IAMbic (此仓库)

IAMbic遵循Apache-2.0许可协议。Noq Software,Inc.还提供商业许可和支持。

提供商插件

提供商插件(如AWS、Okta、Azure Active Directory和Google Workspace插件)遵循Apache 2许可协议。您可以在不发布其源代码的情况下自由编写自己的提供商插件以用于内部服务。

有关更多信息,请访问https://docs.iambic.org/license

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

iambic_core-0.11.97.tar.gz (266.4 kB 查看哈希值)

上传时间

构建分发

iambic_core-0.11.97-py3-none-any.whl (330.8 kB 查看哈希值)

上传时间 Python 3

支持