

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

# 準備安全性
<a name="preparing-security"></a>

本節討論 AWS IoT Device Management 軟體套件目錄的主要安全需求。

## 以資源為基礎的身分驗證
<a name="resource-based-authorization"></a>

軟體套件目錄在更新機群上的軟體時，會使用以資源為基礎的授權來提升安全性。這表示您必須建立 AWS Identity and Access Management (IAM) 政策，授予對軟體套件和套件版本執行 `create`、`delete`、、 和 `read` `update``list`動作的權限，並參考您想要在 `Resources`區段中部署的特定軟體套件和套件版本。您也需要這些權限，以便更新[預留已命名影子](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#reserved-named-shadow)。您可以在每個實體中納入 Amazon Resource Name (ARN) 來參考軟體套件和套件版本。

**注意**  
若您希望該政策能授予套件版本 API 呼叫的權限 (例如 [CreatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackageVersion.html)、[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)、[DeletePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackageVersion.html))，則您必須在政策中*同時*納入軟體套件和套件版本 ARN。若您希望該政策能授予軟體套件 API 呼叫的權限 (例如 [CreatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackage.html)、[UpdatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackage.html) 和 [DeletePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_DeletePackage.html))，則您在政策中僅能納入軟體套件 ARN。

請遵循下方說明，建構軟體套件和套件版本 ARN：
+ 軟體套件：`arn:aws:iot:<region>:<accountID>:package/<packageName>/package`
+ 套件版本：`arn:aws:iot:<region>:<accountID>:package/<packageName>/version/<versionName>`

**注意**  
您可能會在此政策中納入其他相關權利。例如，您可以會納入 `job`、`thinggroup` 和 `jobtemplate` 的 ARN。如需詳細資訊和政策選項的完整清單，請參閱[使用 AWS IoT 任務保護使用者和裝置](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs-security.html)。

例如，若您有如下名稱的軟體套件和套件版本：
+ AWS IoT 物件： `myThing`
+ 套件名稱：`samplePackage`
+ 版本 `1.0.0`

該政策看起來類似以下範例：

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:createPackage",
                "iot:createPackageVersion",
                "iot:updatePackage",
                "iot:updatePackageVersion"
            ],
            "Resource": [
               "arn:aws:iot:us-east-1:111122223333:package/samplePackage",
               "arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/1.0.0"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Resource": "arn:aws:iot:us-east-1:111122223333:thing/myThing/$package"
        }
    ]
}
```

## AWS IoT 部署套件版本的任務權限
<a name="job-rights-deploy-versions"></a>

基於安全考量，您必須授予部署套件和套件版本的權限，並為允許部署的特定套件和套件版本命名。若要執行這項動作，您可以建立 IAM 角色和政策，以授予透過套件版本部署任務的權限。政策必須將目的地套件版本指定為資源。

**IAM 政策**

IAM 政策授予建立任務的權限，其中包含在 `Resource` 區段中命名的套件和版本。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:CreateJob",
                "iot:CreateJobTemplate"
            ],
            "Resource":[
                "arn:aws:iot:*:111122223333:job/<jobId>",
                "arn:aws:iot:*:111122223333:thing/<thingName>/$package",
                "arn:aws:iot:*:111122223333:thinggroup/<thingGroupName>",
                "arn:aws:iot:*:111122223333:jobtemplate/<jobTemplateName>",
                "arn:aws:iot:*:111122223333:package/<packageName>/version/<versionName>"
            ]
        }
    ]
}
```

**注意**  
如果您想要部署解除安裝軟體套件和套件版本的任務，您必須授權套件版本為 的 ARN`$null`，如下列所示：

```
arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$null
```

## AWS IoT 更新預留具名影子的任務權限
<a name="job-rights-update-reserved-named-shadow"></a>

若要允許任務在完成時更新物件的預留已命名影子，您必須建立 IAM 角色和政策。您可以在 AWS IoT 控制台透過兩種方式執行此動作。第一，在控制台建立軟體套件時。若您看到**啟用套件管理的相依性**對話方塊，您可以選擇使用現有角色或建立新角色。或者，在 AWS IoT 主控台選擇**設定**，接著選擇**管理索引**以及**管理裝置套件和版本的索引**。

**注意**  
如果您選擇讓 AWS IoT 任務服務在任務成功完成時更新保留的具名影子，則 API 呼叫會計入您的 **Device Shadow 和登錄操作**，並可能產生費用。如需詳細資訊，請參閱 [AWS IoT Core 定價](https://aws.amazon.com/iot-core/pricing/)。

使用**建立角色**選項時產生的角色名稱開頭為 `aws-iot-role-update-shadows` 且包含下列政策：

**設定角色**

**許可**  
權限政策授予查詢和更新物件影子的權限。資源 ARN 中的 `$package` 參數則針對預留已命名影子。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:DescribeEndpoint",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Resource": [
            "arn:aws:iot:us-east-1:111122223333:thing/<thingName>/$package"
            ]
        }
    ]
}
```

**信任關係**  
除了權限政策之外，角色也需要與 AWS IoT Core 的信任關係，以便實體擔任該角色並更新預留已命名影子。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "iot.amazonaws.com"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

**設定使用者政策**

**iam:PassRole 權限**  
最後，當您呼叫 [ UpdatePackageConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageConfiguration.html) API 操作 AWS IoT Core 時，您必須擁有將角色傳遞至 的許可。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "iot:UpdatePackageConfiguration"
            ],
            "Resource": "arn:aws:iam::111122223333:role/<roleName>"
        }
    ]
}
```

## AWS IoT 從 Amazon S3 下載的任務許可
<a name="job-rights-download-job-document"></a>

任務文件會儲存於 Amazon S3。當您透過 AWS IoT 任務分派時，您會參考此檔案。您必須提供 AWS IoT Jobs 下載檔案 (`s3:GetObject`) 的權限。您還必須在 Amazon S3 和 AWS IoT 任務之間設定信任關係。如需建立這些政策的指示，請參閱[管理任務](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html)中的[預先簽章的 URL](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html#create-manage-jobs-presigned-URLs)。

## 更新套件版本之軟體物料清單的許可
<a name="job-rights-update-sbom"></a>

若要更新 `Draft`、 `Published`或 `Deprecated`生命週期狀態中套件版本的軟體物料清單，您需要 AWS Identity and Access Management 角色和政策，才能在 Amazon S3 中尋找新的軟體物料清單，並更新套件版本 AWS IoT Core。

首先，您會將更新的軟體物料清單放在版本控制的 Amazon S3 儲存貯體中，並使用包含的 `sboms` 參數呼叫 `[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)` API 操作。接下來，您的授權委託人將擔任您建立的 IAM 角色，在 Amazon S3 中尋找更新的軟體物料清單，並在 中更新軟體套件目錄 AWS IoT Core 的套件版本。

執行此更新需要下列政策：

**政策**
+ **信任政策** 與擔任 IAM 角色的授權委託人建立信任關係，以便從 Amazon S3 中的版本控制儲存貯體找到更新的軟體物料清單，並在其中更新套件版本 AWS IoT Core。
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "s3.amazonaws.com"
            },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "iot.amazonaws.com"
            },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```
+ **許可政策**：存取 Amazon S3 版本控制的儲存貯體的政策，其中儲存套件版本的軟體物料清單，並更新套件版本 AWS IoT Core。
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::awsexamplebucket1"
                ]
            }
        ]
    }
    ```
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "iot:UpdatePackageVersion"
                ],
                "Resource": [
                    "arn:aws:iot:*:111122223333:package/<packageName>/version/<versionName>"
                ]
            }
        ]
    }
    ```
+ **傳遞角色許可**：當您呼叫 `[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)` API 操作 AWS IoT Core 時，授予許可將 IAM 角色傳遞至 Amazon S3 的政策。
  +   
****  

    ```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:PassRole",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::awsexamplebucket1"
          ]
        }
      ]
    }
    ```
  +   
****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "iam:PassRole",
                    "iot:UpdatePackageVersion"
                ],
                "Resource": "arn:aws:iam::111122223333:role/<roleName>"
            }
        ]
    }
    ```

**注意**  
您無法更新已轉換為`Deleted`生命週期狀態之套件版本的軟體物料清單。

如需為 AWS 服務建立 IAM 角色的詳細資訊，請參閱[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

如需建立 Amazon S3 儲存貯體並上傳物件的詳細資訊，請參閱[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)和[上傳物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。