View a markdown version of this page

限制代理访问权限 AWS Account - AWS DevOps 代理人

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

限制代理访问权限 AWS Account

AWS DevOps 在事件调查和预防性评估期间,代理使用 IAM 角色来发现和描述 AWS 资源。您可以通过配置附加到这些角色的 IAM 策略来控制代理的访问级别。应用程序拓扑不会显示代理可以访问的所有内容,IAM 策略是真正限制代理可以访问的 AWS 服务 API 和资源的唯一方法。

了解 IAM 角色适用于 AWS DevOps 代理人

AWS DevOps 代理使用 IAM 角色访问两种账户中的资源:

  • 主账户角色-授予代理访问您在其中创建代理空间的 AWS 账户中的资源的访问权限。

  • 次要账户角色-授予代理访问您连接到代理空间的其他 AWS 账户中的资源的权限。

无论哪种类型的账户,您都可以限制代理可以访问哪些 AWS 服务,限制对这些服务中特定资源的访问以及控制代理可以在哪些区域中运行。

了解权限护栏

AWS DevOps 代理在访问您的 AWS 资源时对其创建的每个会话应用权限护栏。该护栏起着上限的作用,它定义了代理可以使用的最大权限集,无论您向 IAM 角色授予什么权限。

工作原理

当代理担任您的 IAM 角色时,它会通过会话策略,限制该会话的有效权限。有效权限是以下各项的交集:

  1. 您的 IAM 角色策略 — 托管策略和您附加到该角色的任何内联策略。

  2. 权限护栏 — AWS DevOps 代理在担任角色时应用的会话策略。

两层都必须有权限才能生效。如果您为角色添加的权限未包含在护栏中,则代理将无法使用该权限。

默认权限

AIDevOpsAgentAccessPolicy托管策略提供代理用于调查的默认只读权限集。这些权限包含在护栏中,因此无需额外配置即可运行。

将权限扩展到默认权限之外

AWS DevOps 除了默认托管策略之外,代理还支持一组精选的额外权限。这些权限包含在护栏中,但默认情况下未启用。要使用它们,请将特定权限作为内联策略添加到您的角色中。

例如,要允许代理在调查期间读取您的 S3 存储桶中的对象,请向您的角色添加内联策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-application-bucket", "arn:aws:s3:::my-application-bucket/*" ] } ] }

由于s3:GetObject和包含s3:ListBucket在护栏中,因此此内联策略生效。您可以将范围限定Resource为特定的存储桶,以遵循最低权限原则。

支持的额外权限

以下权限包含在护栏中,可以通过将它们作为内联策略添加到您的角色中来启用。默认情况下不授予这些权限,您必须明确选择加入。

服务 操作 使用案例
Amazon Athena athena:GetQuery*, athena:StartQueryExecution, athena:StopQueryExecution 对您的数据目录运行 Athena 查询并检索托管查询结果
Amazon CloudWatch 日志 logs:GetLogRecord 调查应用程序问题时检索单个日志记录
Amazon DynamoDB dynamodb:Scan, dynamodb:Query, dynamodb:GetItem, dynamodb:BatchGetItem 在调查期间从 DynamoDB 表中读取项目
Amazon S3 s3:GetObject, s3:ListBucket 读取 S3 中存储的应用程序数据、日志或配置
AWS Glue glue:GetPartition 从 Glue 数据目录中读取 Athena 查询的分区元数据
AWS KMS kms:Decrypt 解密加密资源,例如 S3 对象
AWS Support support:DescribeCommunications 阅读 AWS 与调查相关的 Support 案例通信
AWS Systems Manager ssm:GetParameter 读取您的应用程序使用的 Systems Manager 参数

权限被护栏屏蔽

如果您为角色添加的权限不在护栏中,则代理将无法使用该权限。这是设计使然 —— 护栏可防止代理在其预期范围之外执行操作,即使角色本来允许他们这样做。

例如,诸如s3:PutObjectec2:TerminateInstances、或之类的写入操作dynamodb:DeleteItem不包含在护栏中。即使您的角色授予了这些权限,代理也无法执行这些操作。

Summary

谁在控制它 用途
IAM 角色策略 You 定义你希望代理能够做什么
许可护栏 AWS DevOps 代理人 定义代理可以做的最大值
有效的权限 两者的交集 代理实际能做什么

此模型可确保代理在明确定义的安全边界内运行,同时允许您灵活地针对您的特定用例扩展其功能。

选择您的资源边界

限制资源访问权限时,您需要为代理提供足够的权限才能成功调查应用程序事件。这包括:

  • 代理应监控和调查的范围内应用程序的所有资源

  • 这些应用程序所依赖的所有支持基础架构

支持基础设施可能包括:

  • 网络组件(VPC、子网、负载均衡器、API 网关)

  • 数据存储(数据库、缓存、对象存储)

  • 计算资源(EC2 实例、Lambda 函数、容器)

  • 监控和记录服务 (CloudWatch, CloudTrail)

  • 了解权限所需的身份和访问管理资源

如果您限制访问权限的范围过于狭窄,则代理可能无法确定源于您定义的边界之外的支持基础架构的根本原因。

限制服务访问

您可以通过修改附加到代理角色的 IAM 策略来限制代理可以访问的 AWS 服务。创建自定义策略时,请遵循以下最佳实践:

  • 仅授予只读权限-代理需要在调查期间读取资源配置、指标和日志。避免授予允许代理修改或删除资源的权限。

  • 仅@@ 限于必要的服务-仅包括包含与您的应用程序相关的资源的 AWS 服务。例如,如果您的应用程序不使用 Amazon RDS,则不要在策略中包含 RDS 权限。

  • 使用特定操作代替通配符-与其授予service:*权限,不如指定单个操作,例如cloudwatch:GetMetricDataec2:DescribeInstances

限制特定服务的政策示例:

json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:DescribeAlarms", "logs:GetLogEvents", "logs:FilterLogEvents", "ec2:DescribeInstances", "lambda:GetFunction", "lambda:GetFunctionConfiguration" ], "Resource": "*" } ] }

限制资源访问权限

要将代理限制为服务中的特定资源,请在 IAM 策略中使用资源级权限。这允许您仅向符合特定模式的资源授予访问权限。

使用资源 ARN 模式:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:GetFunctionConfiguration" ], "Resource": "arn:aws:lambda:*:*:function:production-*" } ] }

此示例限制代理只能访问名称以 “production-” 开头的 Lambda 函数。

使用基于标签的限制:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceStatus" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "production" } } } ] }

此示例限制代理只能访问标记为的 EC2 实例Environment=production

限制区域访问

要限制代理可以访问哪些 AWS 区域,请使用您的 IAM 策略中的aws:RequestedRegion条件密钥:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "lambda:Get*", "cloudwatch:Get*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "us-east-1", "us-west-2" ] } } } ] }

此示例限制代理只能访问 us-east-1 和 us-west-2 区域的资源。

创建自定义 IAM 策略

创建代理空间或添加辅助账户时,您可以选择使用策略模板创建自定义 IAM 角色。这使您可以实现最小权限原则。

创建代理空间时

从 AWS 管理控制台中的 DevOps 代理控制台...

  • 选择 “使用策略文档创建新的 DevOps 代理角色”,然后按照说明进行操作

编辑代理空间时

从 AWS 管理控制台中的 DevOps 代理控制台...

  • 选择 “权” 选项卡

  • 从 “云端” 部分选择要编辑的辅助账户,然后选择 “编辑”

  • 选择使用模板创建新的 DevOps 代理策略,然后按照说明进行操作

自定义策略最佳实践

  • 仅授予只读权限-避免使用允许修改或删除资源的权限

  • 尽可能使用资源级权限 — 使用 ARN 模式或标签限制对特定资源的访问

  • 定期审查和审计权限 — 定期审查代理的 IAM 政策,确保它们仍然符合您的安全要求