

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 授權核心裝置與 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 核元件](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 核心軟體建立此角色，它會使用下列許可政策來允許核心裝置連接和傳送日誌 AWS。政策的名稱預設為以 結尾的 IAM 角色名稱`Access`。例如，如果您使用預設 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 Resource Name (ARN)。您可以在下一個步驟中使用此 ARN 將此政策連接至核心裝置角色。

1. 執行下列命令，將政策連接至核心裝置角色。以您在執行 AWS IoT Greengrass Core 軟體時指定的角色名稱取代 {{GreengrassV2TokenExchangeRole}}。然後，將政策 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 儲存貯體的成品。