

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

# Greengrass 服务角色


<a name="greengrass-service-role-intro"></a>Greengrass 服务角色 AWS Identity and Access Management 是一个 (IAM) 服务角色，它 AWS IoT Greengrass 授权代表您访问服务中的资源。 AWS 此角色 AWS IoT Greengrass 使验证客户端设备的身份和管理核心设备的连接信息成为可能。

**注意**  
AWS IoT Greengrass V1 还使用此角色来执行基本任务。有关更多信息，请参阅《AWS IoT Greengrass V1 开发人员指南》**中的 [Greengrass 服务角色](https://docs.aws.amazon.com/greengrass/v1/developerguide/service-role.html)。

 AWS IoT Greengrass 要允许访问您的资源，Greengrass 服务角色必须与 AWS 账户 您的关联并 AWS IoT Greengrass 指定为可信实体。该角色必须包含[AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy)托管策略或自定义策略，该策略定义了您使用的 AWS IoT Greengrass 功能的等效权限。 AWS 维护此策略，该策略定义了 AWS IoT Greengrass 用于访问您的 AWS 资源的权限集。有关更多信息，请参阅 [AWS 托管策略： AWSGreengrassResourceAccessRolePolicy](security-iam-aws-managed-policies.md#aws-managed-policies-AWSGreengrassResourceAccessRolePolicy)。

你可以重复使用相同的 Greengrass 服务角色 AWS 区域，但你必须在每个使用的地方将其与你的账户关联。 AWS 区域 AWS IoT Greengrass如果当前未配置服务角色 AWS 区域，则核心设备将无法验证客户端设备，也无法更新连接信息。

以下各节介绍如何使用或创建和管理 Greengrass 服务角色。 AWS 管理控制台 AWS CLI

**Topics**
+ [

## 管理 Greengrass 服务角色（控制台）
](#manage-greengrass-service-role-console)
+ [

## 管理 Greengrass 服务角色（CLI）
](#manage-service-role-cli)
+ [

## 另请参阅
](#service-role-see-also)

**注意**  
除了授权服务级别访问权限的服务角色外，您还可以为 Greengrass 核心设备分配一个*令牌交换角色*。令牌交换角色是一个单独的 IAM 角色，用于控制核心设备上的 Greengrass 组件和 Lambda 函数如何访问服务。 AWS 有关更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

## 管理 Greengrass 服务角色（控制台）
管理服务角色（控制台）

通过 AWS IoT 控制台，您可以轻松管理您的 Greengrass 服务角色。例如，当您为核心设备配置客户端设备发现时，控制台会检查您的 AWS 账户 是否附加到您当前 AWS 区域中的 Greengrass 服务角色。如果没有，则控制台可以为您创建和配置服务角色。有关更多信息，请参阅 [创建 Greengrass 服务角色（控制台）](#create-greengrass-service-role-console)。

您可以使用 控制台执行以下角色管理任务：

**Topics**
+ [

### 查找您的 Greengrass 服务角色（控制台）
](#get-greengrass-service-role-console)
+ [

### 创建 Greengrass 服务角色（控制台）
](#create-greengrass-service-role-console)
+ [

### 更改 Greengrass 服务角色（控制台）
](#update-greengrass-service-role-console)
+ [

### 移除 Greengrass 服务角色（控制台）
](#remove-greengrass-service-role-console)

**注意**  
登录到控制台的用户必须有权查看、创建或更改服务角色。

### 查找您的 Greengrass 服务角色（控制台）
查找您的 Greengrass 服务角色

使用以下步骤查找当前中 AWS IoT Greengrass 使用的服务角色 AWS 区域。

1. <a name="open-iot-console"></a>导航至 [AWS IoT 控制台](https://console.aws.amazon.com/iot)。

1. <a name="open-iot-settings"></a>在导航窗格中，选择**设置**。

1. 滚动到 **Greengrass 服务角色**部分以查看您的服务角色及其策略。

   如果没有看到服务角色，控制台可以为您创建或配置一个。有关更多信息，请参阅 [创建 Greengrass 服务角色](#create-greengrass-service-role-console)。

### 创建 Greengrass 服务角色（控制台）
创建 Greengrass 服务角色

控制台可以为您创建和配置默认 Greengrass 服务角色。此角色具有以下属性：


| 属性 | 值 | 
| --- | --- | 
| Name | Greengrass\$1ServiceRole | 
| 可信任的实体 | AWS service: greengrass | 
| Policy | [AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy) | 

**注意**  
如果您使用 [AWS IoT Greengrass V1 设备设置脚本](https://docs.aws.amazon.com/greengrass/v1/developerguide/quick-start.html)创建此角色，则角色名称为 `GreengrassServiceRole_random-string`。

当你为核心设备配置客户端设备发现时，控制台会检查当前的 Greengrass 服务角色是否与你的关联。 AWS 账户 AWS 区域否则，控制台会提示您 AWS IoT Greengrass 允许代表您读取和写入 AWS 服务。

如果您授予权限，控制台会检查您的 AWS 账户中是否存在名为 `Greengrass_ServiceRole` 的角色。
+ 如果该角色存在，则控制台会在当前版本 AWS 账户 中将服务角色附加到您 AWS 区域。
+ 如果该角色不存在，则控制台会创建一个默认 Greengrass 服务角色，并在当前版本中将其附加到你的。 AWS 账户 AWS 区域

**注意**  
如果要使用自定义角色策略创建服务角色，请使用 IAM 控制台创建或修改角色。有关更多信息，请参阅 *IAM 用户指南*中的[创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)或[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)。确保该角色针对您使用的功能和资源授予和 `AWSGreengrassResourceAccessRolePolicy` 托管策略同等的权限。我们建议您在信任策略中加入 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键，以帮助防止出现*混淆代理人*安全问题。条件上下文键可限制访问权限，仅允许来自指定账户和 Greengrass 工作空间的请求。有关混淆代理人问题的更多信息，请参阅 [防止跨服务混淆代理](cross-service-confused-deputy-prevention.md)。  
如果您创建了服务角色，请返回 AWS IoT 控制台并将该角色附加到您的 AWS 账户。可以在**设置**页面上的 **Greengrass 服务角色**下执行此操作。

### 更改 Greengrass 服务角色（控制台）
更改 Greengrass 服务角色

使用以下步骤选择其他 Greengrass 服务角色以附加到控制台中 AWS 账户 当前选 AWS 区域 定的角色。

1. <a name="open-iot-console"></a>导航至 [AWS IoT 控制台](https://console.aws.amazon.com/iot)。

1. <a name="open-iot-settings"></a>在导航窗格中，选择**设置**。

1. 在 **Greengrass 服务角色**下，选择 **更改角色**。

   “**更新 Greengrass 服务**角色” 对话框打开，其中显示了 AWS 账户 您中定义为可信实体的 IAM 角色。 AWS IoT Greengrass 

1. 选择要附加的 Greengrass 服务角色。

1. 选择**附加角色**。

### 移除 Greengrass 服务角色（控制台）
移除 Greengrass 服务角色

使用以下步骤将当前的 Greengrass 服务角色与您的账户分离。 AWS AWS 区域这会撤消 AWS IoT Greengrass 访问当前 AWS AWS 区域服务的权限。

**重要**  
移除服务角色可能会中断有效操作。

1. <a name="open-iot-console"></a>导航至 [AWS IoT 控制台](https://console.aws.amazon.com/iot)。

1. <a name="open-iot-settings"></a>在导航窗格中，选择**设置**。

1. 在 **Greengrass 服务角色** 下，选择 **移除角色**。

1. 在确认对话框中，选择 **Detach (分离)**。

**注意**  
如果您不再需要该角色，则可在 IAM 控制台中将其删除。有关更多信息，请参阅《IAM 用户指南》**中的[删除角色或实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。  
其他角色可能 AWS IoT Greengrass 允许访问您的资源。要查找允许 AWS IoT Greengrass 代表您使用权限的所有角色，请在 IAM 控制台的**角色**页面上的**可信实体**列中查找包含 **AWS 服务: greengrass** 的角色。

## 管理 Greengrass 服务角色（CLI）
管理服务角色（CLI）

在以下步骤中，我们假设 AWS Command Line Interface 已安装并配置为使用您的 AWS 账户。有关更多信息，请参阅《AWS Command Line Interface 用户指南》中的[安装、更新和卸载 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 以及[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。**

您可以将 AWS CLI 用于以下角色管理任务：

**Topics**
+ [

### 获取 Greengrass 服务角色 (CLI)
](#get-service-role)
+ [

### 创建 Greengrass 服务角色 (CLI)
](#create-service-role)
+ [

### 删除 Greengrass 服务角色 (CLI)
](#remove-service-role)

### 获取 Greengrass 服务角色 (CLI)
获取您的 Greengrass 服务角色

使用以下过程了解 Greengrass 服务角色是否已与您在 AWS 区域中的 AWS 账户 关联。
+ 获取服务角色。*region*替换为你的 AWS 区域 （例如，`us-west-2`）。

  ```
  aws greengrassv2 get-service-role-for-account --region region
  ```

  如果 Greengrass 服务角色已与您的账户关联，则请求将返回以下角色元数据。

  ```
  {
    "associatedAt": "timestamp",
    "roleArn": "arn:aws:iam::account-id:role/path/role-name"
  }
  ```

  如果请求未返回角色元数据，则您必须创建服务角色（如果该角色不存在）并将其与您在 AWS 区域中的账户关联。

### 创建 Greengrass 服务角色 (CLI)
创建 Greengrass 服务角色

使用以下步骤创建角色，并将其与您的 AWS 账户关联。

**使用 IAM 创建服务角色**

1. 使用允许代入该角色 AWS IoT Greengrass 的信任策略创建角色。此示例将创建一个名为 `Greengrass_ServiceRole` 的角色，但您也可以使用其他名称。我们建议您在信任策略中加入 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键，以帮助防止出现*混淆代理人*安全问题。条件上下文键可限制访问权限，仅允许来自指定账户和 Greengrass 工作空间的请求。有关混淆代理人问题的更多信息，请参阅 [防止跨服务混淆代理](cross-service-confused-deputy-prevention.md)。

------
#### [ Linux or Unix ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
           },
           "StringEquals": {
             "aws:SourceAccount": "account-id"
           }
         }
       }
     ]
   }'
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"greengrass.amazonaws.com\"},\"Action\":\"sts:AssumeRole\",\"Condition\":{\"ArnLike\":{\"aws:SourceArn\":\"arn:aws:greengrass:region:account-id:*\"},\"StringEquals\":{\"aws:SourceAccount\":\"account-id\"}}}]}"
   ```

------
#### [ PowerShell ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
           },
           "StringEquals": {
             "aws:SourceAccount": "account-id"
           }
         }
       }
     ]
   }'
   ```

------

1. 从输出中的角色元数据复制角色 ARN。使用该 ARN 将角色与您的账户关联。

1. 将 `AWSGreengrassResourceAccessRolePolicy` 策略附加到该角色。

   ```
   aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
   ```

**将服务角色与您的关联 AWS 账户**
+ 将角色与您的账户关联。*role-arn*替换为服务角色 ARN 和您*region*的 AWS 区域 （例如）。`us-west-2`

  ```
  aws greengrassv2 associate-service-role-to-account --role-arn role-arn --region region
  ```

  如果成功，请求将返回类似于以下内容的响应。

  ```
  {
    "associatedAt": "timestamp"
  }
  ```

### 删除 Greengrass 服务角色 (CLI)
删除 Greengrass 服务角色

使用以下步骤解除 Greengrass 服务角色与您的 AWS 账户的关联。
+ 取消服务角色与您的账户的关联。*region*替换为你的 AWS 区域 （例如，`us-west-2`）。

  ```
  aws greengrassv2 disassociate-service-role-from-account --region region
  ```

  如果成功，将返回以下响应。

  ```
  {
    "disassociatedAt": "timestamp"
  }
  ```
**注意**  
如果您未在任何服务角色中使用该角色，则应将其删除 AWS 区域。先使用 [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html) 从角色中移除 `AWSGreengrassResourceAccessRolePolicy` 托管策略，然后使用 [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html) 删除角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除角色或实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。

## 另请参阅

+ 在 *IAM 用户指南*中@@ [创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)
+ *《IAM 用户指南》*中的[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)
+ *IAM 用户指南*中的[删除角色或实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。
+ AWS IoT Greengrass 命令*参考中的AWS CLI 命令*
  + [associate-service-role-to-账户](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/associate-service-role-to-account.html)
  + [disassociate-service-role-from-账户](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/disassociate-service-role-from-account.html)
  + [get-service-role-for-账户](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-service-role-for-account.html)
+ *AWS CLI 命令参考*中的 IAM 命令
  + [attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)
  + [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html)
  + [delete-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html)
  + [delete-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html)