

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

# 的身份和访问管理 AWS IoT Greengrass
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) AWS 服务 可帮助管理员安全地控制对 AWS 资源的访问权限。IAM 管理员控制谁可以*进行身份验证*（登录）和*授权*（拥有权限）使用 AWS IoT Greengrass 资源。您可以使用 IAM AWS 服务 ，无需支付额外费用。

**注意**  
本主题介绍 IAM 的概念和功能。有关所支持的 IAM 功能的信息 AWS IoT Greengrass，请参阅[如何 AWS IoT Greengrass 与 IAM 配合使用](security_iam_service-with-iam.md)。

## 受众
<a name="security_iam_audience"></a>

您的使用方式 AWS Identity and Access Management (IAM) 因您的角色而异：
+ **服务用户**：如果您无法访问功能，请从管理员处请求权限（请参阅[对的身份和访问问题进行故障排除 AWS IoT Greengrass](security_iam_troubleshoot.md)）
+ **服务管理员**：确定用户访问权限并提交权限请求（请参阅[如何 AWS IoT Greengrass 与 IAM 配合使用](security_iam_service-with-iam.md)）
+ **IAM 管理员**：编写用于管理访问权限的策略（请参阅[基于身份的策略示例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)）

## 使用身份进行身份验证
<a name="security_iam_authentication"></a>

身份验证是您 AWS 使用身份凭证登录的方式。您必须以 IAM 用户身份进行身份验证 AWS 账户根用户，或者通过担任 IAM 角色进行身份验证。

您可以使用来自身份源的证书 AWS IAM Identity Center （例如（IAM Identity Center）、单点登录身份验证或 Google/Facebook 证书，以联合身份登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问， AWS 提供 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 root 用户
<a name="security_iam_authentication-rootuser"></a>

 创建时 AWS 账户，首先会有一个名为 AWS 账户 *root 用户的*登录身份，该身份可以完全访问所有资源 AWS 服务 和资源。我们强烈建议不要使用根用户进行日常任务。有关要求根用户凭证的任务，请参阅*《IAM 用户指南》*中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 用户和群组
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅 *IAM 用户指南*[中的要求人类用户使用身份提供商的联合身份验证才能 AWS 使用临时证书进行访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来代入角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用策略管理访问
<a name="security_iam_access-manage"></a>

您可以 AWS 通过创建策略并将其附加到 AWS 身份或资源来控制中的访问权限。策略定义了与身份或资源关联时的权限。 AWS 在委托人提出请求时评估这些政策。大多数策略都以 JSON 文档的 AWS 形式存储在中。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略
<a name="security_iam_access-manage-resource-based-policies"></a>

基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用 IAM 中的 AWS 托管策略。

### 访问控制列表 (ACLs)
<a name="security_iam_access-manage-acl"></a>

访问控制列表 (ACLs) 控制哪些委托人（账户成员、用户或角色）有权访问资源。 ACLs 与基于资源的策略类似，尽管它们不使用 JSON 策略文档格式。

Amazon S3 和 Amazon VPC 就是支持的服务示例 ACLs。 AWS WAF要了解更多信息 ACLs，请参阅《*亚马逊简单存储服务开发者指南*》中的[访问控制列表 (ACL) 概述](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

### 其他策略类型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支持其他策略类型，这些策略类型可以设置更常见的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略 (SCPs)**-在中指定组织或组织单位的最大权限 AWS Organizations。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略 (RCPs)**-设置账户中资源的最大可用权限。有关更多信息，请参阅《*AWS Organizations 用户指南》*中的[资源控制策略 (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型
<a name="security_iam_access-manage-multiple-policies"></a>

当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解在涉及多种策略类型时如何 AWS 确定是否允许请求，请参阅 *IAM 用户指南*中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

## 另请参阅
<a name="security_iam_service-see-also"></a>
+ [如何 AWS IoT Greengrass 与 IAM 配合使用](security_iam_service-with-iam.md)
+ [基于身份的策略示例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)
+ [对的身份和访问问题进行故障排除 AWS IoT Greengrass](security_iam_troubleshoot.md)

# 如何 AWS IoT Greengrass 与 IAM 配合使用
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理访问权限之前 AWS IoT Greengrass，您应该了解可与之配合使用的 IAM 功能 AWS IoT Greengrass。


| IAM 功能 | Greengrass 支持吗？ | 
| --- | --- | 
| [具有资源级权限的基于身份的策略](#security_iam_service-with-iam-id-based-policies) | 是 | 
| [基于资源的策略](#security_iam_service-with-iam-resource-based-policies) | 否 | 
| [访问控制列表 (ACLs)](#security_iam_service-with-iam-acls) | 否 | 
| [基于标签的授权](#security_iam_service-with-iam-tags) | 是 | 
| [临时凭证](#security_iam_service-with-iam-roles-tempcreds) | 是 | 
| [服务关联角色](#security_iam_service-with-iam-roles-service-linked) | 否 | 
| [服务角色](#security_iam_service-with-iam-roles-service-linked) | 是 | 

有关其他 AWS 服务如何与 IAM 配合使用的高级视图，请参阅 IAM *用户指南中的与 IAM* [配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## 基于身份的策略 AWS IoT Greengrass
<a name="security_iam_service-with-iam-id-based-policies"></a>

借助 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源，以及允许或拒绝操作的条件。 AWS IoT Greengrass 支持特定的操作、资源和条件键。要了解您在策略中使用的所有元素，请参阅 *IAM 用户指南*中的 [IAM JSON 策略元素参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

### 操作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。

策略操作在操作前 AWS IoT Greengrass 使用`greengrass:`前缀。例如，要允许某人使用 `ListCoreDevices` API 操作列出其中的核心设备 AWS 账户，您可以将该`greengrass:ListCoreDevices`操作包含在他们的策略中。策略声明必须包含`Action`或`NotAction`元素。 AWS IoT Greengrass 定义了自己的一组操作，这些操作描述了您可以使用此服务执行的任务。

要在单个语句中指定多项操作，请在方括号 (`[` `]`) 中列出这些操作，并用逗号将它们分隔开，如下所示：

```
"Action": [
  "greengrass:action1",
  "greengrass:action2",
  "greengrass:action3"
]
```

您可以使用通配符 (`*`) 指定多个操作。例如，要指定以单词 `List` 开头的所有操作，包括以下操作：

```
"Action": "greengrass:List*"
```

**注意**  
我们建议您避免使用通配符来指定服务的所有可用操作。最佳做法是，您应在策略中授予最低特权和范围狭窄的权限。有关更多信息，请参阅 [授予可能的最低权限](security-best-practices.md#least-privilege)。

有关 AWS IoT Greengrass 操作的完整列表，请参阅 *IAM 用户指南 AWS IoT Greengrass*中的[定义操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsiotgreengrass.html#awsiotgreengrass-actions-as-permissions)。

### 资源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

下表 ARNs 包含可在策略声明`Resource`元素中使用的 AWS IoT Greengrass 资源。有关 AWS IoT Greengrass 操作支持的资源级权限的映射，请参阅 *IAM 用户*指南 AWS IoT Greengrass中[定义的操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsiotgreengrass.html#awsiotgreengrass-actions-as-permissions)。

某些 AWS IoT Greengrass 操作（例如，某些列表操作）无法对特定资源执行。在这种情况下，您必须单独使用通配符。

```
"Resource": "*"
```

要在语句 ARNs 中指定多个资源，请将它们列在方括号 (`[``]`) 之间，并用逗号分隔，如下所示：

```
"Resource": [
  "resource-arn1",
  "resource-arn2",
  "resource-arn3"
]
```

有关 ARN 格式的更多信息，请参阅中的 A [mazon 资源名称 (ARNs) 和 AWS 服务命名空间](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。*Amazon Web Services 一般参考*

### 条件键
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

### 示例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



要查看 AWS IoT Greengrass 基于身份的策略的示例，请参阅。[基于身份的策略示例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)

## 基于资源的政策 AWS IoT Greengrass
<a name="security_iam_service-with-iam-resource-based-policies"></a>

AWS IoT Greengrass 不支持[基于资源的策略](security-iam.md#security_iam_access-manage-resource-based-policies)。

## 访问控制列表 (ACLs)
<a name="security_iam_service-with-iam-acls"></a>

AWS IoT Greengrass 不支持[ACLs](security-iam.md#security_iam_access-manage-acl)。

## 基于 AWS IoT Greengrass 标签的授权
<a name="security_iam_service-with-iam-tags"></a>

您可以将标签附加到支持的 AWS IoT Greengrass 资源，也可以在请求中传递标签 AWS IoT Greengrass。要基于标签控制访问，您需要使用 `aws:ResourceTag/${TagKey}`、`aws:RequestTag/${TagKey}` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。有关更多信息，请参阅 [标记您的 AWS IoT Greengrass Version 2 资源](tag-resources.md)。

## 的 IAM 角色适用于 AWS IoT Greengrass
<a name="security_iam_service-with-iam-roles"></a>

[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是 AWS 账户 中具有特定权限的实体。

### 将临时证书与 AWS IoT Greengrass
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

临时凭证可用于进行联合身份登录，代入 IAM 角色或代入跨账户角色。您可以调用 AWS STS API 操作（如[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) ）以获取临时安全凭证。

在 Greengrass 核心上，[设备角色](device-service-role.md)的临时凭证可供 Greengrass 组件使用。如果您的组件使用 AWS SDK，则无需添加逻辑即可获取凭证，因为 AWS SDK 会为您执行此操作。

### 服务关联角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

AWS IoT Greengrass 不支持[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。

### 服务角色
<a name="security_iam_service-with-iam-roles-service"></a>

此功能允许服务代表您担任[服务角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在 IAM 账户中，并归该账户所有。这意味着，IAM 管理员可以更改该角色的权限。但是，这样做可能会中断服务的功能。

AWS IoT Greengrass 核心设备使用服务角色允许 Greengrass 组件和 Lambda 函数代表您访问您的部分资源。 AWS 有关更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

AWS IoT Greengrass 使用服务角色代表您访问您的部分 AWS 资源。有关更多信息，请参阅 [Greengrass 服务角色](greengrass-service-role.md)。

# 基于身份的策略示例 AWS IoT Greengrass
<a name="security_iam_id-based-policy-examples"></a>

默认情况下，IAM 用户和角色没有创建或修改 AWS IoT Greengrass 资源的权限。他们也无法使用 AWS 管理控制台 AWS CLI、或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略，以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后，管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

## 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略决定了某人是否可以在您的账户中创建、访问或删除 AWS IoT Greengrass 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **开始使用 AWS 托管策略并转向最低权限权限** — 要开始向用户和工作负载授予权限，请使用为许多常见用例授予权限的*AWS 托管策略*。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果服务操作是通过特定 AWS 服务的（例如）使用的，则也可以使用条件来授予对服务操作的访问权限 CloudFormation。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证 (MFA**)-如果 AWS 账户您的场景需要 IAM 用户或根用户，请启用 MFA 以提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 策略示例
<a name="security_iam_id-based-policy-examples-list"></a>

以下客户定义的策略示例可为常见方案授予权限。

**Topics**
+ [允许用户查看他们自己的权限](#security_iam_id-based-policy-examples-view-own-permissions)

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略，请参阅《*IAM 用户指南*》中的[在 JSON 选项卡上创建策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。

### 允许用户查看他们自己的权限
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用 AWS CLI 或 AWS API 以编程方式完成此操作的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

# 授权核心设备与 AWS 服务交互
<a name="device-service-role"></a>

AWS IoT Greengrass 核心设备使用 AWS IoT Core 凭证提供程序来授权对 AWS 服务的调用。 AWS IoT Core 凭据提供程序允许设备使用其 X.509 证书作为对请求进行身份验证的唯一设备身份。 AWS 这样就无需在 AWS IoT Greengrass 核心设备上存储 AWS 访问密钥 ID 和私有访问密钥。有关更多信息，请参阅《*AWS IoT Core 开发人员指南》*中的[授权直接调用 AWS 服务](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)。

在运行 AWS IoT Greengrass Core 软件时，您可以选择配置核心设备所需的 AWS 资源。这包括您的核心设备通过 AWS IoT Core 证书提供商承担的 AWS Identity and Access Management (IAM) 角色。使用`--provision true`参数配置允许核心设备获取临时 AWS 证书的角色和策略。此参数还配置指向此 IAM AWS IoT 角色的角色别名。您可以指定要使用的 IAM 角色的名称和 AWS IoT 角色别名。如果您不使用这些其他名称参数指定 `--provision true`，Greengrass 核心设备将创建并使用以下默认资源：
+ IAM 角色：`GreengrassV2TokenExchangeRole`

  此角色具有名为 `GreengrassV2TokenExchangeRoleAccess` 的策略，以及允许 `credentials.iot.amazonaws.com` 代入角色的信任关系。该策略包括核心设备的最低权限。
**重要**  
该策略不包括对 S3 存储桶中文件的访问权限。您必须向该角色添加权限，才能允许核心设备从 S3 存储桶中检索组件构件。有关更多信息，请参阅 [允许访问 S3 存储桶中的组件构件](#device-service-role-access-s3-bucket)。
+ AWS IoT 角色别名：`GreengrassV2TokenExchangeRoleAlias`

  此角色别名指的是 IAM 角色。

有关更多信息，请参阅 [步骤 3：安装 AWS IoT Greengrass 核心软件](install-greengrass-v2.md)。

您也可以为现有核心设备设置角色别名。为此，请配置 [Greengrass Nucleus 组件](greengrass-nucleus-component.md)的 `iotRoleAlias` 配置参数。

您可以为此 IAM 角色获取临时 AWS 证书，以便在自定义组件中执行 AWS 操作。有关更多信息，请参阅 [与 AWS 服务交互](interact-with-aws-services.md)。

**Topics**
+ [核心设备的服务角色权限](#device-service-role-permissions)
+ [允许访问 S3 存储桶中的组件构件](#device-service-role-access-s3-bucket)

## 核心设备的服务角色权限
<a name="device-service-role-permissions"></a>

该角色允许以下服务代入角色：
+ `credentials.iot.amazonaws.com`

如果您使用 AWS IoT Greengrass Core 软件创建此角色，它将使用以下权限策略来允许核心设备连接并向其发送日志 AWS。策略的名称默认为以 `Access` 结尾的 IAM 角色的名称。例如，如果您使用默认 IAM 角色名称，则此策略的名称为 `GreengrassV2TokenExchangeRoleAccess`。

------
#### [ Greengrass nucleus v2.5.0 and later ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------
#### [ v2.4.x ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:DescribeCertificate",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------
#### [ Earlier than v2.4.0 ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:DescribeCertificate",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "iot:Connect",
        "iot:Publish",
        "iot:Subscribe",
        "iot:Receive",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------

## 允许访问 S3 存储桶中的组件构件
<a name="device-service-role-access-s3-bucket"></a>

默认核心设备角色不允许核心设备访问 S3 存储桶。要部署在 S3 存储桶中有构件的组件，必须添加 `s3:GetObject` 权限，以允许核心设备下载组件构件。您可以向核心设备角色添加新策略以授予此权限。

**添加允许访问 Amazon S3 中组件构件的策略**

1. 创建一个名为 `component-artifact-policy.json` 的文件，并将以下 JSON 复制到该文件中。此策略允许访问 S3 存储桶中的所有文件。将 amzn-s3-demo-bucket 替换为 S3 存储桶的名称，以允许核心设备访问。

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

****  

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

------

1. 运行以下命令，从 `component-artifact-policy.json` 中的策略文档创建策略。

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

   ```
   aws iam create-policy \
     --policy-name MyGreengrassV2ComponentArtifactPolicy \
     --policy-document file://component-artifact-policy.json
   ```

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

   ```
   aws iam create-policy ^
     --policy-name MyGreengrassV2ComponentArtifactPolicy ^
     --policy-document file://component-artifact-policy.json
   ```

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

   ```
   aws iam create-policy `
     --policy-name MyGreengrassV2ComponentArtifactPolicy `
     --policy-document file://component-artifact-policy.json
   ```

------

   从输出中的策略元数据复制策略 Amazon 资源名称（ARN）。您将在下一步中使用此 ARN 来将此策略附加到核心设备角色。

1. 运行以下命令以将策略附加到核心设备角色。*GreengrassV2TokenExchangeRole*替换为您在运行 C AWS IoT Greengrass ore 软件时指定的角色名称。然后，将 policy ARN 替换为上一步中的 ARN。

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

   ```
   aws iam attach-role-policy \
     --role-name GreengrassV2TokenExchangeRole \
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

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

   ```
   aws iam attach-role-policy ^
     --role-name GreengrassV2TokenExchangeRole ^
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

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

   ```
   aws iam attach-role-policy `
     --role-name GreengrassV2TokenExchangeRole `
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

------

   如果命令没有输出，则表示命令成功，且您的核心设备可以访问您上传到此 S3 存储桶的构件。

# 安装程序配置资源的最低 IAM 策略
<a name="provision-minimal-iam-policy"></a>

安装 AWS IoT Greengrass Core 软件时，您可以为设备预置所需的 AWS 资源， AWS IoT 例如设备和 IAM 角色。您也可以将本地开发工具部署到设备。安装程序需要 AWS 凭据才能在中执行这些操作 AWS 账户。有关更多信息，请参阅 [安装 AWS IoT Greengrass Core 软件](install-greengrass-core-v2.md)。

以下示例策略包括安装程序配置这些资源所需的最低操作集。如果您为安装程序指定 `--provision` 参数，则需要这些权限。*account-id*替换为您的 AWS 账户 ID，并*GreengrassV2TokenExchangeRole*替换为您在`--tes-role-name`[安装程序参数](configure-installer.md)中指定的令牌交换角色的名称。

**注意**  
只有在为安装程序指定 `--deploy-dev-tools` 参数时，才需要 `DeployDevTools` 策略声明。

------
#### [ Greengrass nucleus v2.5.0 and later ]

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTokenExchangeRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreatePolicy",
                "iam:CreateRole",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
                "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
                "arn:aws:iam::aws:policy/GreengrassV2TokenExchangeRoleAccess"
            ]
        },
        {
            "Sid": "CreateIoTResources",
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ Earlier than v2.5.0 ]

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTokenExchangeRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreatePolicy",
                "iam:CreateRole",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": [
            "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
    "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
                "arn:aws:iam::aws:policy/GreengrassV2TokenExchangeRoleAccess"
            ]
        },
        {
            "Sid": "CreateIoTResources",
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------

# Greengrass 服务角色
<a name="greengrass-service-role"></a>

<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 服务角色（控制台）
<a name="manage-greengrass-service-role-console"></a>

通过 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 服务角色（控制台）
<a name="get-greengrass-service-role-console"></a>

使用以下步骤查找当前中 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 服务角色（控制台）
<a name="create-greengrass-service-role-console"></a>

控制台可以为您创建和配置默认 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 服务角色（控制台）
<a name="update-greengrass-service-role-console"></a>

使用以下步骤选择其他 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 服务角色（控制台）
<a name="remove-greengrass-service-role-console"></a>

使用以下步骤将当前的 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）
<a name="manage-service-role-cli"></a>

在以下步骤中，我们假设 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)
<a name="get-service-role"></a>

使用以下过程了解 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)
<a name="create-service-role"></a>

使用以下步骤创建角色，并将其与您的 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)
<a name="remove-service-role"></a>

使用以下步骤解除 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)。

## 另请参阅
<a name="service-role-see-also"></a>
+ 在 *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)

# AWS 的托管策略 AWS IoT Greengrass
<a name="security-iam-aws-managed-policies"></a>

 AWS 托管策略是由创建和管理的独立策略 AWS。 AWS 托管策略旨在为许多常见用例提供权限，以便您可以开始为用户、组和角色分配权限。

请记住， AWS 托管策略可能不会为您的特定用例授予最低权限权限，因为它们可供所有 AWS 客户使用。我们建议通过定义特定于使用案例的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来进一步减少权限。

您无法更改 AWS 托管策略中定义的权限。如果 AWS 更新 AWS 托管策略中定义的权限，则更新会影响该策略所关联的所有委托人身份（用户、组和角色）。 AWS 最有可能在启动新的 API 或现有服务可以使用新 AWS 服务 的 API 操作时更新 AWS 托管策略。

有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

**Topics**
+ [AWS 托管策略： AWSGreengrassFullAccess](#aws-managed-policies-AWSGreengrassFullAccess)
+ [AWS 托管策略： AWSGreengrassReadOnlyAccess](#aws-managed-policies-AWSGreengrassReadOnlyAccess)
+ [AWS 托管策略： AWSGreengrassResourceAccessRolePolicy](#aws-managed-policies-AWSGreengrassResourceAccessRolePolicy)
+ [AWS IoT Greengrass AWS 托管策略的更新](#aws-managed-policy-updates)

## AWS 托管策略： AWSGreengrassFullAccess
<a name="aws-managed-policies-AWSGreengrassFullAccess"></a>

您可以将 `AWSGreengrassFullAccess` 策略附加到 IAM 身份。

此策略授予管理权限，允许主体完全访问所有 AWS IoT Greengrass 操作。

**权限详细信息**

该策略包含以下权限：
+ `greengrass`：允许主体完全访问所有 AWS IoT Greengrass 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## AWS 托管策略： AWSGreengrassReadOnlyAccess
<a name="aws-managed-policies-AWSGreengrassReadOnlyAccess"></a>

您可以将 `AWSGreengrassReadOnlyAccess` 策略附加到 IAM 身份。

此策略授予只读权限，允许主体查看 AWS IoT Greengrass中的信息，但无法修改。例如，拥有这些权限的主体可以查看部署到 Greengrass 核心设备的组件列表，但无法创建部署以更改在该设备上运行的组件。

**权限详细信息**

该策略包含以下权限：
+ `greengrass` - 允许主体执行返回项目列表或项目详细信息的操作。这包括以 `List` 或 `Get` 开头的 API 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:List*",
                "greengrass:Get*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## AWS 托管策略： AWSGreengrassResourceAccessRolePolicy
<a name="aws-managed-policies-AWSGreengrassResourceAccessRolePolicy"></a>

您可以将该`AWSGreengrassResourceAccessRolePolicy`策略附加到您的 IAM 实体。 AWS IoT Greengrass 还将此策略附加 AWS IoT Greengrass 到允许代表您执行操作的服务角色。有关更多信息，请参阅 [Greengrass 服务角色](greengrass-service-role.md)。

此策略授予管理权限， AWS IoT Greengrass 允许执行基本任务，例如检索您的 Lambda 函数、 AWS IoT 管理设备影子和验证 Greengrass 客户端设备。

**权限详细信息**

该策略包含以下权限。
+ `greengrass` – 管理 Greengrass 资源。
+ `iot`(`*Shadow`)-管理名称中包含以下特殊标识符的 AWS IoT 阴影。 AWS IoT Greengrass 需要这些权限才能与核心设备通信。
  + `*-gci`— AWS IoT Greengrass 使用此影子存储核心设备连接信息，以便客户端设备可以发现并连接到核心设备。
  + `*-gcm`— AWS IoT Greengrass V1 使用此影子通知核心设备 Greengrass 组的证书颁发机构 (CA) 证书已轮换。
  + `*-gda`— AWS IoT Greengrass V1 使用此影子将部署通知核心设备。
  + `GG_*` – 未使用。
+ `iot`（`DescribeThing`和`DescribeCertificate`）-检索有关 AWS IoT 事物和证书的信息。这些权限是必需的，这样 AWS IoT Greengrass 才能验证连接到核心设备的客户端设备。有关更多信息，请参阅 [与本地 IoT 设备交互](interact-with-local-iot-devices.md)。
+ `lambda`— 检索有关 AWS Lambda 函数的信息。需要此权限才能让 AWS IoT Greengrass V1 能够将 Lambda 函数部署到 Greengrass 内核。有关更多信息，请参阅 *AWS IoT Greengrass V1* 开发人员指南中的在[AWS IoT Greengrass 核心上运行 Lambda 函数](https://docs.aws.amazon.com/greengrass/v1/developerguide/lambda-functions.html)。
+ `secretsmanager`— 检索名称以开头的 AWS Secrets Manager 机密的值`greengrass-`。 AWS IoT Greengrass V1 需要此权限才能将 Secrets Manager 机密部署到 Greengrass 内核。有关更多信息，请参阅 *AWS IoT Greengrass V1 开发人员指南*[中的将密钥部署到内 AWS IoT Greengrass 核](https://docs.aws.amazon.com/greengrass/v1/developerguide/secrets.html)。
+ `s3` – 从名称包含 `greengrass` 或 `sagemaker` 的 S3 存储桶中检索文件对象。这些权限是必需的，这样 AWS IoT Greengrass V1 才能部署您存储在 S3 存储桶中的机器学习资源。有关更多信息，请参阅《*AWS IoT Greengrass V1 开发者指南*》中的[机器学习资源](https://docs.aws.amazon.com/greengrass/v1/developerguide/ml-inference.html#ml-resources)。
+ `sagemaker`— 检索有关 Amazon SageMaker AI 机器学习推理模型的信息。 AWS IoT Greengrass V1 需要此权限才能将机器学习模型部署到 Greengrass 内核。有关更多信息，请参阅《*AWS IoT Greengrass V1 开发者*指南》中的[执行机器学习推理](https://docs.aws.amazon.com/greengrass/v1/developerguide/ml-inference.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGreengrassAccessToShadows",
            "Action": [
                "iot:DeleteThingShadow",
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iot:*:*:thing/GG_*",
                "arn:aws:iot:*:*:thing/*-gcm",
                "arn:aws:iot:*:*:thing/*-gda",
                "arn:aws:iot:*:*:thing/*-gci"
            ]
        },
        {
            "Sid": "AllowGreengrassToDescribeThings",
            "Action": [
                "iot:DescribeThing"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:*:*:thing/*"
        },
        {
            "Sid": "AllowGreengrassToDescribeCertificates",
            "Action": [
                "iot:DescribeCertificate"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:*:*:cert/*"
        },
        {
            "Sid": "AllowGreengrassToCallGreengrassServices",
            "Action": [
                "greengrass:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassToGetLambdaFunctions",
            "Action": [
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassToGetGreengrassSecrets",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:secretsmanager:*:*:secret:greengrass-*"
        },
        {
            "Sid": "AllowGreengrassAccessToS3Objects",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*Greengrass*",
                "arn:aws:s3:::*GreenGrass*",
                "arn:aws:s3:::*greengrass*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*sagemaker*"
            ]
        },
        {
            "Sid": "AllowGreengrassAccessToS3BucketLocation",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassAccessToSageMakerTrainingJobs",
            "Action": [
                "sagemaker:DescribeTrainingJob"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:sagemaker:*:*:training-job/*"
            ]
        }
    ]
}
```

------

## AWS IoT Greengrass AWS 托管策略的更新
<a name="aws-managed-policy-updates"></a>

您可以查看自该服务开始跟踪这些更改之时 AWS IoT Greengrass 起的 AWS 托管策略更新的详细信息。要获得有关此页面更改的自动提醒，请在 [AWS IoT Greengrass V2 文档历史记录页面](document-history.md)上订阅 RSS feed。


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  AWS IoT Greengrass 已开始跟踪更改  |  AWS IoT Greengrass 开始跟踪其 AWS 托管策略的更改。  |  2021 年 7 月 2 日  | 

# 防止跨服务混淆代理
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理问题是一个安全性问题，即不具有某操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS，跨服务模仿可能会导致混乱的副手问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况， AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全局条件上下文密钥来限制为资源 AWS IoT Greengrass 提供其他服务的权限。如果使用两个全局条件上下文键，在同一策略语句中使用时，`aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户必须使用相同的账户 ID。

`aws:SourceArn` 的值必须是与 `sts:AssumeRole` 请求关联的 Greengrass 客户资源。

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符（`*`）的 `aws:SourceArn` 全局上下文条件键。例如 `arn:aws:greengrass::account-id:*`。

有关使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文密钥的策略示例，请参阅[创建 Greengrass 服务角色](greengrass-service-role.md#create-service-role)。

# 对的身份和访问问题进行故障排除 AWS IoT Greengrass
<a name="security_iam_troubleshoot"></a>

使用以下信息来帮助您诊断和修复在使用 AWS IoT Greengrass 和 IAM 时可能遇到的常见问题。

**Topics**
+ [我无权在以下位置执行操作 AWS IoT Greengrass](#security_iam_troubleshoot-no-permissions)
+ [我无权执行 iam：PassRole](#security_iam_troubleshoot-passrole)
+ [我是一名管理员，想允许其他人访问 AWS IoT Greengrass](#security_iam_troubleshoot-admin-delegate)
+ [我想允许我以外的人 AWS 账户 访问我的 AWS IoT Greengrass 资源](#security_iam_troubleshoot-cross-account-access)

有关一般故障排除帮助，请参阅[故障排除 AWS IoT Greengrass V2](troubleshooting.md)。

## 我无权在以下位置执行操作 AWS IoT Greengrass
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到错误消息，提示您无权执行操作，必须联系您的管理员寻求帮助。您的管理员是指为您提供用户名和密码的那个人。

当 `mateojackson` IAM 用户尝试查看有关核心设备的详细信息，但不具备 `greengrass:GetCoreDevice` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: greengrass:GetCoreDevice on resource: arn:aws:greengrass:us-west-2:123456789012:coreDevices/MyGreengrassCore
```

在这种情况下，Mateo 请求他的管理员更新其策略，以允许他使用 `greengrass:GetCoreDevice` 操作访问 `arn:aws:greengrass:us-west-2:123456789012:coreDevices/MyGreengrassCore` 资源。

以下是您在使用 AWS IoT Greengrass时可能会遇到的一般 IAM 问题。

## 我无权执行 iam：PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到一个错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给。 AWS IoT Greengrass

有些 AWS 服务 允许您将现有角色传递给该服务，而不是创建新的服务角色或服务相关角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 AWS IoT Greengrass中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

## 我是一名管理员，想允许其他人访问 AWS IoT Greengrass
<a name="security_iam_troubleshoot-admin-delegate"></a>

要允许其他人访问 AWS IoT Greengrass，您必须向需要访问的人员或应用程序授予权限。如果使用 AWS IAM Identity Center 管理人员和应用程序，则可以向用户或组分配权限集来定义其访问权限级别。权限集会自动创建 IAM 策略并将其分配给与人员或应用程序关联的 IAM 角色。有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。

如果未使用 IAM Identity Center，则必须为需要访问的人员或应用程序创建 IAM 实体（用户或角色）。然后，您必须将策略附加到实体，以便在 AWS IoT Greengrass中向其授予正确的权限。授予权限后，向用户或应用程序开发人员提供凭证。他们将使用这些凭证访问 AWS。要了解有关创建 IAM 用户、组、策略和权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 身份](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)和 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

## 我想允许我以外的人 AWS 账户 访问我的 AWS IoT Greengrass 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个 IAM 角色，其他账户中的用户或组织以外的人员可以使用该角色来访问您的 AWS 资源。您可以指定谁值得信赖，可以带入角色。有关更多信息，请参阅 [IAM 用户指南中的向您拥有的另一 AWS 账户 个](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) *IAM 用户[提供访问权限和向第三方拥有的](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) IAM 用户*提供访问权限。 AWS 账户

AWS IoT Greengrass 不支持基于资源的策略或访问控制列表 () ACLs 的跨账户访问。