

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

# 连接你的 亚马逊 GameLift 服务器 将游戏服务器托管给其他人 AWS 资源
<a name="gamelift-sdk-server-resources"></a>

当您创建要在 Amazon GameLift Servers 实例集上部署的游戏服务器生成包时，您可能希望游戏生成包中的应用程序能够与您拥有的其他 AWS 资源直接安全地通信。由于 Amazon GameLift Servers 管理您的游戏托管实例集，因此您必须向 Amazon GameLift Servers 提供对这些资源和服务的有限访问权限。

一些示例场景包括：
+ 使用 Amazon CloudWatch 代理从托管的 EC2 队列和 Anywhere 队列收集指标、日志和跟踪。
+ 将实例日志数据发送到 Amazon L CloudWatch ogs。
+ 将消息存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中。
+ 读写在 Amazon DynamoDB 数据库或其他数据存储服务中存储的游戏数据，例如游戏模式或清单。
+ 使用 Amazon Simple Queue Service（Amazon SQS）将信号直接发送到实例。
+ 访问在 Amazon Elastic Compute Cloud (Amazon EC2) 上部署和运行的自定义资源。

Amazon GameLift Servers 支持以下方法来建立访问权限：
+ [访问 AWS 具有 IAM 角色的资源](#gamelift-sdk-server-resources-roles)
+ [访问 AWS 具有 VPC 对等关系的资源](#gamelift-sdk-server-resources-vpc)

## 访问 AWS 具有 IAM 角色的资源
<a name="gamelift-sdk-server-resources-roles"></a>

使用 IAM 角色指定谁可以访问您的资源并设置访问限制。受信任方可以“担任”角色并获得临时安全证书，以授权他们与资源进行交互。当各方发出与资源相关的 API 请求时，他们必须提供证书。

要设置由 IAM 角色控制的访问权限，请执行以下任务：

1. [创建 IAM 角色。](#gamelift-sdk-server-resources-roles-create)

1. [修改应用程序以获取凭证](#gamelift-sdk-server-resources-roles-apps)

1. [将实例集与 IAM 角色关联](#gamelift-sdk-server-resources-roles-fleet)

### 创建 IAM 角色。
<a name="gamelift-sdk-server-resources-roles-create"></a>

在此步骤中，您将创建一个 IAM 角色，该角色具有一组控制 AWS 资源访问权限的权限和授予Amazon GameLift Servers使用该角色权限的信任策略。

有关如何设置 IAM 角色的说明，请参阅[为 Amazon GameLift Servers 设置 IAM 服务角色](setting-up-role.md)。在创建权限策略时，请选择您的应用程序需要使用的特定服务、资源和操作。作为最佳实操，请尽可能限制权限的范围。

创建角色后，记下其 Amazon 资源名称（ARN）。在创建实例集期间，您需要角色 ARN。

### 修改应用程序以获取凭证
<a name="gamelift-sdk-server-resources-roles-apps"></a>

在此步骤中，您将应用程序配置为获取 IAM 角色的安全证书，并在与 AWS 资源交互时使用这些证书。参见下表，根据（1）应用程序的类型以及（2）您的游戏用于与 Amazon GameLift Servers 通信的服务器 SDK 版本来确定如何修改您的应用程序。


|  | 游戏服务器应用程序 | 其他客户端应用程序 | 
| --- | --- | --- | 
| **使用服务器软件开发工具包版本 5.x** | 从您的游戏服务器代码中调用服务器软件开发工具包方法 `GetFleetRoleCredentials()`。 | 向应用程序添加代码，以便从队列实例上的共享文件中提取证书。 | 
| **使用服务器软件开发工具包版本 4 或更早版本** |  `[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)`使用角色 ARN 调用 AWS Security Token Service (AWS STS)。 | `[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)`使用角色 ARN 调用 AWS Security Token Service (AWS STS)。 | 

**注意**  
对于容器队列，`FleetRoleArn`证书会注入到每个容器中。您的应用程序可以使用默认 AWS 凭证提供商来访问这些证书。你仍然可以调用`GetFleetRoleCredentials()`，这会返回相同的证书。这些舰队角色证书只能在容器内部访问。

对于与服务器软件开发工具包 5.x 集成的游戏，此图说明了您部署的游戏版本中的应用程序如何获取 IAM 角色的证书。

![游戏可执行文件调用 GetFleetRoleCredentials()。其他文件使用本地存储的共享凭证。](https://docs.aws.amazon.com/zh_cn/gameliftservers/latest/developerguide/images/instance-role-creds_vsd.png)


#### Call `GetFleetRoleCredentials ()`（服务器 SDK 5.x）
<a name="gamelift-sdk-server-resources-roles-apps-sdk5"></a>

在您的游戏服务器代码（该代码应该已经与 Amazon GameLift Servers 服务器 SDK 5.x 集成）中，调用 `GetFleetRoleCredentials`（[C\+\+](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-getfleetrolecredentials)）（[C\#](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-getfleetrolecredentials)）（[Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-getfleetrolecredentials)）（[Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-getfleetrolecredentials)）以检索一组临时凭证。证书过期后，您可以通过再次调用 `GetFleetRoleCredentials` 来刷新凭证。

#### 使用共享凭据（服务器软件开发工具包 5.x）
<a name="gamelift-sdk-server-resources-roles-apps-sdk5-shared"></a>

对于使用服务器 SDK 5.x 与游戏服务器生成包一起部署的非服务器应用程序，请添加代码以获取和使用存储在共享文件中的凭证。Amazon GameLift Servers 会为每个实例集实例生成一个凭证配置文件。这些凭证可供实例上的所有应用程序使用。Amazon GameLift Servers 会不断刷新临时凭证。

您必须将队列配置为在创建队列时生成共享凭证文件。

在每个需要使用共享凭据文件的应用程序中，指定文件位置和配置文件名称，如下所示：

Windows：

```
[credentials]
shared_credential_profile= "FleetRoleCredentials"
shared_credential_file= "C:\\Credentials\\credentials"
```

Linux：

```
[credentials]
shared_credential_profile= "FleetRoleCredentials"
shared_credential_file= "/local/credentials/credentials"
```

**示例：设置 CloudWatch 代理来收集Amazon GameLift Servers队列实例的指标 **

如果您想使用亚马逊 CloudWatch 代理收集Amazon GameLift Servers队列中的指标、日志和跟踪，请使用此方法授权代理向您的账户发送数据。在此场景中，请采取以下步骤：

1. 检索或写入 CloudWatch 代理`config.json`文件。

1. 如上所述，更新 `common-config.toml` 代理文件以识别凭证文件名和配置文件名称。

1. 设置游戏服务器版本安装脚本以安装和启动 CloudWatch 代理。

#### 使用 `AssumeRole ()`（服务器 SDK 4）
<a name="gamelift-sdk-server-resources-roles-apps-sdk4"></a>

向您的应用程序添加代码以代入 IAM 角色并获得与 AWS 资源交互的证书。任何在带有服务器 SDK 4 或更早版本的 Amazon GameLift Servers 实例集实例上运行的应用程序都可以代入 IAM 角色。

在应用程序代码中，在访问 AWS 资源之前，应用程序必须调用 AWS Security Token Service (AWS STS) `[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)` API 操作并指定角色 ARN。此操作返回一组临时证书，用于授权应用程序访问 AWS 资源。有关更多信息，请参阅 * IAM 用户指南[中的将临时证书与 AWS 资源一起](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)使用*。

### 将实例集与 IAM 角色关联
<a name="gamelift-sdk-server-resources-roles-fleet"></a>

在创建 IAM 角色并更新游戏服务器版本中的应用程序以获取和使用访问凭证后，您可以部署队列。配置新队列时，设置以下参数。

对于集装箱船队：
+  [FleetRoleArn](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateContainerFleet.html#gameliftservers-CreateContainerFleet-request-FleetRoleArn)— 将此参数设置为 IAM 角色的 ARN。

对于其他舰队类型：
+  [ InstanceRoleArn](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_FleetAttributes.html#gamelift-Type-FleetAttributes-InstanceRoleArn)— 将此参数设置为 IAM 角色的 ARN。
+  [ InstanceRoleCredentialsProvider](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_FleetAttributes.html#gamelift-Type-FleetAttributes-InstanceRoleCredentialsProvider)— Amazon GameLift Servers 要提示为每个舰队实例生成共享凭证文件，请将此参数设置为`SHARED_CREDENTIAL_FILE`。

创建队列时必须设置这些值。以后，无法对其进行更新。

## 访问 AWS 具有 VPC 对等关系的资源
<a name="gamelift-sdk-server-resources-vpc"></a>

您可以使用亚马逊虚拟私有云 (Amazon VPC) 对等互连在Amazon GameLift Servers实例上运行的应用程序与其他 AWS 资源之间进行通信。VPC 是您定义的虚拟专用网络，其中包括一组通过您的管理的资源 AWS 账户。每个 Amazon GameLift Servers 队组都有它自己的 VPC。通过 VPC 对等互连，您可以在 VPC 之间为您的队列和其他 AWS 资源建立直接网络连接。

Amazon GameLift Servers 简化了为游戏服务器设置 VPC 对等连接的过程。它会处理对等请求、更新路由表，并根据需要配置连接。有关如何为游戏服务器设置 VPC 对等连接的更多信息，请参阅[为设置 VPC 对等互连 亚马逊 GameLift 服务器](vpc-peering.md)。

**注意**  
容器队列不支持 VPC 对等互连。

## 设置 AWS 适用于 SDK 请求的区域
<a name="gamelift-sdk-server-resources-region"></a>

当您的队列中的应用程序使用 AWS SDK 调用其他 AWS 服务或资源时，SDK 需要知道要将请求发送到哪个 AWS 区域。如果您的代码未明确设置区域， AWS SDK 将使用其默认区域分辨率。区域分辨率按顺序检查以下内容：

1. 在代码中设置的区域

1. `AWS_REGION`环境变量

1. 共享 AWS 配置文件中的区域

1. 亚马逊弹性计算云 (Amazon EC2) 实例元数据服务

在Amazon GameLift Servers队列计算上，分辨率通常会达到实例元数据。实例元数据返回计算实际运行的区域。

为了帮助您的应用程序定位正确的区域，请在托管 EC2 队列和托管容器队列中的每一次计算上Amazon GameLift Servers设置以下环境变量。您的应用程序可以在运行时读取这些变量。


| 环境变量 | 说明 | 
| --- | --- | 
| `GAMELIFT_REGION` | 舰队的所在区域（例如，`us-west-2`）。该值在队列中的每台计算上都相同。当您的游戏服务器需要访问舰队所在区域的资源时，请使用此变量。 | 
| `GAMELIFT_LOCATION` | 计算运行的位置（`us-west-2`例如，本地区域计算或远程位置`ap-northeast-2`的计算）。在多地点队列中，该值可能因计算而异，并且与实例元数据报告的区域相匹配。 | 