

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

# 限制 AWS 账户中的代理访问权限
<a name="aws-devops-agent-security-limiting-agent-access-in-an-aws-account"></a>

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

## 了解 AWS DevOps 代理的 IAM 角色
<a name="understanding-iam-roles-for-aws-devops-agent"></a>

AWS DevOps 代理使用 IAM 角色访问两种账户中的资源：
+ **主账户角色**-授予代理访问您在其中创建代理空间的 AWS 账户中的资源的访问权限。
+ **次要账户角色**-授予代理访问您连接到代理空间的其他 AWS 账户中的资源的权限。

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

## 选择您的资源边界
<a name="choosing-your-resource-boundaries"></a>

限制资源访问权限时，您需要为代理提供足够的权限才能成功调查应用程序事件。这包括：
+ 代理应监控和调查的范围内应用程序的所有资源
+ 这些应用程序所依赖的所有支持基础架构

支持基础设施可能包括：
+ 网络组件（子网VPCs、负载均衡器、API 网关）
+ 数据存储（数据库、缓存、对象存储）
+ 计算资源（EC2 实例、Lambda 函数、容器）
+ 监控和记录服务 (CloudWatch, CloudTrail)
+ 了解权限所需的身份和访问管理资源

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

## 限制服务访问
<a name="restricting-service-access"></a>

您可以通过修改附加到代理角色的 IAM 策略来限制代理可以访问的 AWS 服务。创建自定义策略时，请遵循以下最佳实践：
+ **仅授予只读权限**-代理需要在调查期间读取资源配置、指标和日志。避免授予允许代理修改或删除资源的权限。
+ 仅@@ **限于必要的服务**-仅包括包含与您的应用程序相关的资源的 AWS 服务。例如，如果您的应用程序不使用 Amazon RDS，则不要在策略中包含 RDS 权限。
+ **使用特定操作代替通配符**-与其授予`service:*`权限，不如指定单个操作，例如`cloudwatch:GetMetricData`或`ec2: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": "*"
    }
  ]
}
```

## 限制资源访问权限
<a name="restricting-resource-access"></a>

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

**使用资源 ARN 模式：**

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

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

**使用基于标签的限制：**

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

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

## 限制区域访问
<a name="restricting-regional-access"></a>

要限制代理可以访问哪些 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 策略
<a name="creating-custom-iam-policies"></a>

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

**创建代理空间时**

从 AWS 管理控制台中的 DevOps 代理控制台...
+ 选择 “**使用策略文档创建新的 DevOps 代理角色”，**然后按照说明进行操作

**编辑代理空间时**

从 AWS 管理控制台中的 DevOps 代理控制台...
+ 选择 “权**能**” 选项卡
+ 从 “**云端**” 部分选择要编辑的辅助账户，然后单击 “编辑”
+ 选择**使用模板创建新的 DevOps 代理策略，**然后按照说明进行操作

## 自定义策略最佳实践
<a name="custom-policy-best-practices"></a>
+ **仅授予只读权限**-避免允许修改或删除资源的权限
+ **尽可能使用资源级权限 — 使用** ARN 模式或标签限制对特定资源的访问
+ **定期审查和审计权限** — 定期审查代理的 IAM 政策，确保它们仍然符合您的安全要求