跨多个 AWS 账户跟踪 AWS 资源

跨多个 AWS 账户跟踪 AWS 资源

如何有效管理多个 AWS 账户中的 AWS 资源?目前,我想要:

  • 获取 EC2、RDS 等资源列表。
  • 执行基本操作,例如重启/启动/停止实例
  • 安排在办公时间后停止实例并在办公时间内启动 - 目前我有一个 CloudWatch 事件触发实例的停止/启动

我应该探索什么服务?对于所有这些任务,我已在 1 个 AWS 账户上成功实施。

我使用 AWS SDK 获取资源列表并对这些资源执行操作。但挑战在于 Lambda,我认为要做到这一点,我需要安装这些函数以及所有区域的所有账户的所有 CloudWatch 警报?有没有更好的方法?

AWS Organizations 会解决这个问题吗?我的账户目前是普通的 AWS 根账户


我正在探索使用 CloudFormation 将这些 Lambda 函数部署到所有账户和区域。这是最有效的方法吗?还有更好的选择吗?有些地区不支持 Lambda,这意味着我的跟踪仅适用于支持它的区域。

答案1

您可以尝试使用 IAM 角色在多个 AWS 账户之间委派访问权限。假设您有一个 lambda 函数,用于在办公时间之后/期间停止/启动 EC2 实例。这意味着您可以在一个 master账户(您的1 个 AWS 账户) 并调用其他managed账户中的 AWS API。在master账户中,您已部署函数及其 IAMmaster执行角色。此角色允许函数承担managed部署在账户中的另一个角色managed以调用相应的 AWS API,例如 boto3 ec2 客户端 stop_instances 或 start_instances 方法。IAMmanaged角色允许调用managed账户中的 AWS API,并且该函数可以承担该角色。

IAM 角色的简洁示例(AWS CloudFormation 片段):

    "MasterRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": "master_role",
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "Path": "/",
        "Policies": [
          {
            "PolicyName": "master_assume_policy",
            "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": [
                    "sts:AssumeRole"
                  ],
                  "Resource": [
                    "*"
                  ]
                }

              ]
            }
          },
          ...

    "AccountRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "RoleName": "managed_role",
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "AWS": ">>> ARN_OF_MASTER_ROLE <<<"
                        },
                        "Action": "sts:AssumeRole"
                    }
                ]
            },
            "Path": "/",
            "Policies": [
                {
                    "PolicyName": "managed_ec2_policy",
                    "PolicyDocument": {
                        "Version": "2012-10-17",
                        "Statement": [
                            {
                                "Action": [
                                    "ec2:StopInstances",
                                    "ec2:StartInstances",
            ...

您还需要managed通过从 lambda 函数调用AssumeRoleAPI 切换到 IAM 角色。有一个不错的文档可描述此过程。总之,您需要managed通过 STS 承担 IAM 角色,它将返回调用 API 所需的凭据。

以下链接可能有助于您了解 IAM 跨账户委派:

使用 IAM 角色跨 AWS 账户委托访问权限

创建角色以委托权限

关于 AWS Organizations,我认为它可以帮助您以更集中的方式管理 managed账户。您可以创建 SCP 或服务控制策略,以集中控制从managed账户访问 AWS 服务的级别。该策略指定用户和角色可以在账户中使用的服务和操作。您还可以managed使用 CloudFormation 自动创建 AWS 账户并根据需要进行配置。这可能包括创建 IAM 用户、角色、策略等。AWS 博客上有一篇关于它的好文章:

AWS Organizations - 基于策略的多个 AWS 账户管理

相关内容