

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

# 安全配置和 IAM 角色
<a name="dotnet-migrating-applications-security"></a>

该**eb migrate**命令通过 IAM 角色、实例配置文件和服务角色管理 AWS 安全配置。了解这些组件可确保在迁移期间实现适当的访问控制和安全合规。

## 实例配置文件配置
<a name="dotnet-migrating-applications-security-instance"></a>

实例配置文件用作 IAM 角色（即 Elastic Beanstalk 附加到您环境中 EC2 实例的角色）的容器。执行 **eb migrate** 时，您可以指定自定义实例配置文件：

```
PS C:\migrations_workspace> eb migrate --instance-profile "CustomInstanceProfile"
```

如果不指定实例配置文件，**eb migrate** 会使用以下权限创建默认配置文件：

------
#### [ JSON ]

****  

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

------

## 服务角色管理
<a name="dotnet-migrating-applications-security-service"></a>

服务角色允许 Elastic Beanstalk 代表你管理资源 AWS 。使用以下命令指定迁移期间的自定义服务角色：

```
PS C:\migrations_workspace> eb migrate --service-role "CustomServiceRole"
```

如果不指定，**eb migrate** 会创建名为 `aws-elasticbeanstalk-service-role` 的默认服务角色，而且该服务角色具有允许 Elastic Beanstalk 担任服务角色的信任策略。要让 Elastic Beanstalk 监控环境运行状况和执行托管平台更新，此服务角色必不可少。该服务角色需要两个受管策略：
+ `AWSElasticBeanstalkEnhancedHealth`：允许 Elastic Beanstalk 使用增强型运行状况报告系统监控实例和环境运行状况
+ `AWSElasticBeanstalkManagedUpdates`：允许 Elastic Beanstalk 执行托管平台更新，包括在有新平台版本可用时更新环境资源

使用这些策略，服务角色有权执行以下操作：
+ 创建并管理自动扩缩组
+ 创建并管理应用程序负载均衡器
+ 将日志上传到亚马逊 CloudWatch
+ 管理 EC2 实例

有关服务角色的更多信息，请参阅《Elastic Beanstalk 开发人员指南》中的 [Elastic Beanstalk 服务角色](concepts-roles-service.md)。

## 安全组配置
<a name="dotnet-migrating-applications-security-sg"></a>

**eb migrate** 命令会根据您的 IIS 站点绑定情况自动配置安全组。例如，如果您的源环境中有使用端口 80、443 和 8081 的站点，则配置结果如下：

```
<site name="Default Web Site">
    <bindings>
        <binding protocol="http" bindingInformation="*:80:" />
        <binding protocol="https" bindingInformation="*:443:" />
    </bindings>
</site>
<site name="InternalAPI">
    <bindings>
        <binding protocol="http" bindingInformation="*:8081:" />
    </bindings>
</site>
```

迁移过程会完成以下操作：
+ 创建负载均衡器安全组，允许端口 80 和 443 上来自互联网（0.0.0.0/0）的入站流量
+ 创建 EC2 安全组，允许来自负载均衡器的流量
+ 配置其他端口，例如 8081（如果 `--copy-firewall-config` 已指定）

默认情况下，应用程序负载均衡器会配置为可通过互联网进行公共访问。如果您需要自定义此行为，例如限制对特定 IP 范围的访问或使用私有负载均衡器，则可以使用 `--vpc-config` 参数覆盖默认 VPC 和安全组配置：

```
PS C:\migrations_workspace> eb migrate --vpc-config vpc-config.json
```

例如，下列 `vpc-config.json` 配置会在私有子网中创建私有负载均衡器：

```
{
    "id": "vpc-12345678",
    "publicip": "false",
    "elbscheme": "internal",
    "ec2subnets": ["subnet-private1", "subnet-private2"],
    "elbsubnets": ["subnet-private1", "subnet-private2"]
}
```

有关 VPC 配置选项的更多信息，请参阅 [VPC 配置](dotnet-migrating-applications-network.md#dotnet-migrating-applications-network-vpc)。

## SSL 证书集成
<a name="dotnet-migrating-applications-security-ssl"></a>

迁移具有 HTTPS 绑定的网站时，请通过 AWS Certificate Manager (ACM) 集成 SSL 证书：

```
PS C:\migrations_workspace> eb migrate --ssl-certificates "arn:aws:acm:region:account:certificate/certificate-id"
```

此配置会完成以下操作：
+ 将证书与应用程序负载均衡器进行关联
+ 在负载均衡器上维持 HTTPS 终止
+ 保留负载均衡器与 EC2 实例之间的内部 HTTP 通信

## Windows 身份验证
<a name="dotnet-migrating-applications-security-windows"></a>

对于使用 Windows 身份验证的应用程序，**eb migrate** 会按如下方式保留应用程序 `web.config` 中的身份验证设置：

```
<configuration>
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true">
                    <providers>
                        <add value="Negotiate" />
                        <add value="NTLM" />
                    </providers>
                </windowsAuthentication>
            </authentication>
        </security>
    </system.webServer>
</configuration>
```

**重要**  
**eb migrate** 命令不会将用户配置文件或账户从您的源环境复制到目标 Elastic Beanstalk 实例。迁移后，您在源服务器上创建的所有自定义用户账户或组均需要在目标环境中重新创建。

默认情况下，目标 Windows 服务器实例中会包含内置 Windows 账户（例如 `IIS_IUSRS`）和组（例如 `IUSR`）以及所有其他内置账户和组。有关内置 IIS 账户和组的更多信息，请参阅 Microsoft 文档中的[了解 IIS 7 中的内置用户和组帐户](https://learn.microsoft.com/en-us/iis/get-started/planning-for-security/understanding-built-in-user-and-group-accounts-in-iis)。

如果您的应用程序依赖自定义 Windows 用户账户或 Active Directory 集成，则需要在迁移完成后单独配置这些方面。

## 最佳实践和故障排除
<a name="dotnet-migrating-applications-security-best"></a>

### 角色管理
<a name="dotnet-migrating-applications-security-best-role"></a>

在管理您的 Elastic Beanstalk 环境的角色时实施 AWS IAM 最佳实践：

角色创建和管理  
+ 尽可能使用 AWS 托管策略创建角色
+ 遵循 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ 使用 [AWS 策略生成器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)生成自定义策略
+ 实施[权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)，提高安全性

监控和审计  
启用 AWS CloudTrail 以监控角色使用情况：  
+ 遵循《AWS CloudTrail User Guide》[https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ 配置 CloudWatch 日志集成以进行实时监控
+ 针对未经授权的 API 调用设置提醒

定期审查流程  
建立季度审查周期，执行以下任务：  
+ 使用 [IAM 访问权限分析器](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)审计未使用的权限
+ 移除已过时的权限
+ 根据最低权限原则更新角色

### 证书管理
<a name="dotnet-migrating-applications-security-best-cert"></a>

在 Elastic Beanstalk 环境中对 SSL/TLS 证书实施以下做法：

证书生命周期  
+ 使用 [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) 进行证书管理
+ 为 ACM 颁发的证书启用[自动续订](https://docs.aws.amazon.com/acm/latest/userguide/check-certificate-renewal-status.html)
+ 设置[到期通知](https://docs.aws.amazon.com/acm/latest/userguide/notifications-for-ACM.html)

安全标准  
+ 使用 TLS 1.2 或更高版本
+ 遵守 HTTPS 侦听器的 [AWS 安全策略](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies)
+ 实施 HTTP 严格传输安全（HSTS）（如需要）

### 安全组管理
<a name="dotnet-migrating-applications-security-best-sg"></a>

实施以下安全组最佳实践：

规则管理  
+ 记录所有自定义端口要求
+ 使用 [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)监控流量
+ 尽可能使用[安全组参考规则](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)而不是 IP 范围

定期审计  
建立每月审核以完成以下任务：  
+ 识别并删除未使用的规则
+ 验证 source/destination 需求
+ 检查是否有重叠的规则

### 日志记录和监控
<a name="dotnet-migrating-applications-security-best-logging"></a>

为了进行有效的安全监控，请配置以下日志：

EC2 实例上的 Windows 事件日志  

```
# Review Security event log
PS C:\migrations_workspace> Get-EventLog -LogName Security -Newest 50

# Check Application event log
PS C:\migrations_workspace> Get-EventLog -LogName Application -Source "IIS*"
```

CloudWatch 日志集成  
将 CloudWatch Logs 代理配置为将 Windows 事件日志流式传输到以 CloudWatch 进行集中监控和警报。

对于持续存在的问题，请收集这些日志并联系 AWS 支持 以获取以下信息：
+ 环境 ID
+ 部署 ID（如果适用）
+ 相关的错误消息
+ 安全变更时间表