

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

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

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

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

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

对于任一类型的帐户，您都可以限制代理可以访问哪些 AWS 服务，限制对这些服务中特定资源的访问权限，并控制代理可以在哪些区域运行。

## 了解权限护栏
<a name="understanding-permission-guardrails"></a>

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

### 工作原理
<a name="how-it-works"></a>

当代理担任您的 IAM 角色时，它会传递一项[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)，限制该会话的有效权限。有效权限是以下内容的交叉点：

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

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

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

### 默认权限
<a name="default-permissions"></a>

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

### 将权限扩展到默认权限之外
<a name="extending-permissions-beyond-the-default"></a>

默认`AIDevOpsAgentAccessPolicy`托管策略仅授予护栏允许范围的一部分。护栏还允许`ReadOnlyAccess` AWS 托管策略中的所有操作，以及一些额外的权限。要使用护栏允许但默认策略不授予的权限，请将其作为内联策略添加到您的角色中。

例如，要允许代理在调查期间从您的 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`为特定的存储桶，以遵循最小权限原则。

### 支持的额外权限
<a name="supported-additional-permissions"></a>

您可以通过将 guardrail 支持的任何权限作为内联策略添加到您的角色中来启用该权限。默认情况下，这些权限不被授予——你必须明确选择加入。

我们已经进行了全面测试和验证，只有`AIDevOpsAgentAccessPolicy`托管策略中的权限才能安全地用于代理。护栏支持的其他权限尚未通过代理测试。为他们提供支持属于责任[AWS 共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)。您负责评估这些操作是否适合代理对您的资源执行操作。调整它们的范围，使其遵循最小特权原则。

下表列出了护栏在`ReadOnlyAccess`托管策略之外支持的其他权限。


| 服务 | 操作 | 使用案例 | 
| --- | --- | --- | 
| Amazon Athena | athena:StartQueryExecution, athena:StopQueryExecution | 对您的数据目录运行 Athena 查询 | 
| AWS KMS | kms:Decrypt | 解密加密资源，例如 S3 对象 | 

**注意：随着向 AWS DevOps 代理添加新功能，**此列表可能会随着时间的推移而扩展。护栏会阻止此处或`AIDevOpsAgentAccessPolicy`和`ReadOnlyAccess`托管策略中未列出的任何权限。

### 权限被护栏封锁
<a name="permissions-blocked-by-the-guardrail"></a>

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

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

### Summary
<a name="summary"></a>


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

该模型可确保代理在明确定义的安全边界内运行，同时使您可以灵活地扩展其功能，以适应您的特定用例。

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

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

支持基础设施可能包括：
+ 网络组件（VPC、子网、负载均衡器、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-*"
    }
  ]
}
```

此示例限制代理只能访问名称以 “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 政策，确保它们仍然符合您的安全要求