

サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、[「 からの移行 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# シークレットを AWS IoT Greengrass コアにデプロイする
<a name="secrets"></a>

この機能は AWS IoT Greengrass Core v1.7 以降で使用できます。

AWS IoT Greengrass では、パスワード、トークン、その他のシークレットをハードコーディングすることなく、Greengrass デバイスからサービスやアプリケーションで認証できます。

AWS Secrets Manager は、シークレットをクラウドに安全に保存および管理するために使用できるサービスです。 は Secrets Manager を Greengrass コアデバイスに AWS IoT Greengrass 拡張するため、[コネクタ](connectors.md)と Lambda 関数はローカルシークレットを使用してサービスやアプリケーションを操作できます。たとえば、Twilio 通知コネクタは、ローカルに保存された認証トークンを使用します。

シークレットを Greengrass グループ内に統合するには、Secrets Manager シークレットを参照するグループリソースを作成します。この*シークレットリソース*は ARN に基づいてクラウドシークレットを参照します。シークレットリソースを作成、管理、および使用する方法については、「[シークレットリソースを使用する](secrets-using.md)」を参照してください。

AWS IoT Greengrass は、転送中および保管中にシークレットを暗号化します。グループのデプロイ中に、 は Secrets Manager からシークレット AWS IoT Greengrass を取得し、Greengrass コアに暗号化されたローカルコピーを作成します。Secrets Manager でクラウドシークレットを更新した後、グループを再デプロイして、更新された値をコアに伝達します。

以下の図では、シークレットを Core にデプロイする大まかなプロセスを示しています。シークレットは転送中および保管時に暗号化されます。

![\[AWS IoT Greengrass は からシークレットを取得し、シークレットリソースとしてコアデバイスに AWS Secrets Manager デプロイします。コアデバイスはコネクタと Lambda 関数で使用できます。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/deploy-local-secret.png)


 AWS IoT Greengrass を使用してシークレットをローカルに保存すると、次の利点があります。
+ **コードから分離 (ハードコードされない)。**これにより、一元管理された認証情報がサポートされ、機密データを侵害のリスクから守ることができます。
+ **オフラインシナリオで利用可能。**コネクタと関数はインターネットから切断された状態でローカルサービスとソフトウェアに安全にアクセスできます。
+ **シークレットへのアクセスをコントロール。**グループの承認されたコネクタと関数のみがシークレットにアクセスできます。 AWS IoT Greengrass はプライベートキー暗号を使用してシークレットを保護します。シークレットは転送中および保管時に暗号化されます。詳細については、「[シークレットの暗号化](#secrets-encryption)」を参照してください。
+ **更新をコントロール。**Secrets Manager でシークレットを更新した後、Greengrass グループを再デプロイして、シークレットのローカルコピーを更新します。詳細については、「[シークレットの作成と管理](secrets-using.md#secrets-create-manage)」を参照してください。
**重要**  
AWS IoT Greengrass は、クラウドバージョンがローテーションされた後、ローカルシークレットの値を自動的に更新しません。ローカル値を更新するには、グループを再デプロイする必要があります。

## シークレットの暗号化
<a name="secrets-encryption"></a>

AWS IoT Greengrass は、転送中および保管中のシークレットを暗号化します。

**重要**  
ユーザー定義の Lambda 関数がシークレットを安全に処理することと、シークレットに格納されている機密データをログに記録しないことを確認してください。詳細については、「AWS Secrets Manager ユーザーガイド」の「[Lambda 関数のログ記録とデバッグのリスクを軽減する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)」を参照してください。このドキュメントでは特に回転関数について言及していますが、こうした推奨事項は Greengrass Lambda 関数にも適用されます。

**転送時の暗号化**  
AWS IoT Greengrass は Transport Layer Security (TLS) を使用して、インターネットとローカルネットワークを介したすべての通信を暗号化します。これにより、転送中のシークレットが保護されます。この保護は、シークレットが Secrets Manager から取得されてコアにデプロイされるときに行われます。サポートされている TLS 暗号スイートについては、「[TLS 暗号スイートのサポート](gg-sec.md#gg-cipher-suites)」を参照してください。

**保管時の暗号化**  
AWS IoT Greengrass は、 で指定されたプライベートキー[`config.json`](gg-core.md#config-json)を使用して、コアに保存されているシークレットを暗号化します。このため、ローカルシークレットの保護には、プライベートキーの安全な保存が重要です。責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)では、コアデバイス上のプライベートキーの安全なストレージを保証するのはお客様の責任です。  
AWS IoT Greengrass は、プライベートキーストレージの 2 つのモードをサポートしています。  
+ ハードウェアセキュリティモジュールの使用。詳細については、「[ハードウェアセキュリティ統合](hardware-security.md)」を参照してください。
**注記**  
現在、 は、ハードウェアベースのプライベートキーを使用する場合のローカルシークレットの暗号化と復号のための [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) パディングメカニズムのみ AWS IoT Greengrass をサポートしています。ベンダーが提供する指示に従ってハードウェアベースのプライベートキーを手動で生成する場合は、PKCS\$11 v1.5. AWS IoT Greengrass Doesn't support Optimal Asymmetric Encryption Padding (OAEP) を選択してください。
+ ファイルシステムアクセス許可の使用 (デフォルト)。
プライベートキーは、ローカルシークレットの暗号化用のデータキーを保護するために使用されます。データキーは、グループデプロイごとに更新されます。  
 AWS IoT Greengrass コアは、プライベートキーにアクセスできる唯一のエンティティです。シークレットリソースに関連付けられている Greengrass コネクタまたは Lambda 関数はコアからシークレットを取得します。

## 要件
<a name="secrets-reqs"></a>

以下に示しているのは、ローカルシークレットをサポートするための要件です。
+  AWS IoT Greengrass Core v1.7 以降を使用している必要があります。
+ ローカルシークレットの値を取得するには、ユーザー定義の Lambda 関数で AWS IoT Greengrass Core SDK v1.3.0 以降を使用する必要があります。
+ ローカルシークレットの暗号化に使用されるプライベートキーは、Greengrass 設定ファイルで指定する必要があります。デフォルトでは、 はファイルシステムに保存されているコアプライベートキー AWS IoT Greengrass を使用します。独自のプライベートキーを指定する場合は、「[シークレット暗号化用のプライベートキーを指定する](#secrets-config-private-key)」を参照してください。RSA キータイプのみがサポートされています。
**注記**  
現在、 は、ハードウェアベースのプライベートキーを使用する場合のローカルシークレットの暗号化と復号のための [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) パディングメカニズムのみ AWS IoT Greengrass をサポートしています。ベンダーが提供する指示に従ってハードウェアベースのプライベートキーを手動で生成する場合は、PKCS\$11 v1.5. AWS IoT Greengrass Doesn't support Optimal Asymmetric Encryption Padding (OAEP) を選択してください。
+ AWS IoT Greengrass シークレット値を取得するアクセス許可を付与する必要があります。これにより、 AWS IoT Greengrass はグループのデプロイ中に値を取得できます。デフォルトの Greengrass サービスロールを使用している場合、 AWS IoT Greengrass は既に *greengrass-* で始まる名前のシークレットにアクセスできます。アクセス権限をカスタマイズするには、「[AWS IoT Greengrass シークレット値の取得を に許可する](#secrets-config-service-role)」を参照してください。
**注記**  
この命名規則を使用して、アクセス許可をカスタマイズした場合でも、アクセスが AWS IoT Greengrass 許可されているシークレットを特定することをお勧めします。コンソールはシークレットを読み取るために異なるアクセス許可を使用するため、取得するアクセス許可 AWS IoT Greengrass を持たないシークレットをコンソールで選択できる可能性があります。命名規則を使用すると、デプロイエラーにつながるアクセス許可の競合を回避するのに役立ちます。

## シークレット暗号化用のプライベートキーを指定する
<a name="secrets-config-private-key"></a>

この手順では、ローカルシークレット暗号化に使用されるプライベートキーのパスを提供します。ここでは、最少長の 2048 ビットの RSA キーを使用する必要があります。 AWS IoT Greengrass コアで使用されるプライベートキーの詳細については、「」を参照してください[AWS IoT Greengrass コアセキュリティプリンシパル](gg-sec.md#gg-principals)。

AWS IoT Greengrass は、ハードウェアベースまたはファイルシステムベース (デフォルト) の 2 つのプライベートキーストレージモードをサポートしています。詳細については、「[シークレットの暗号化](#secrets-encryption)」を参照してください。

ファイルシステムのコアプライベートキーを使用するデフォルト設定を変更する場合**にのみ以下の手順を実行します**。これらの手順は、開始方法チュートリアルの[モジュール 2](module2.md) で説明したようにグループと Core を作成したとします。

1. `/greengrass-root/config` ディレクトリにある [`config.json`](gg-core.md#config-json) ファイルを開きます。
**注記**  
*greengrass-root* は、デバイスに AWS IoT Greengrass Core ソフトウェアがインストールされているパスを表します。通常、これは `/greengrass` ディレクトリです。

1. `crypto.principals.SecretsManager` オブジェクトの `privateKeyPath` プロパティで、プライベートキーのパスを入力します。
   + プライベートキーがファイルシステムに保存されている場合は、キーへの絶対パスを指定します。例:

     ```
     "SecretsManager" : {
       "privateKeyPath" : "file:///somepath/hash.private.key"
     }
     ```
   + プライベートキーがハードウェアセキュリティモジュール (HSM) に保存されている場合は、[RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) URI スキームを使用してパスを指定します。例:

     ```
     "SecretsManager" : {
       "privateKeyPath" : "pkcs11:object=private-key-label;type=private"
     }
     ```

     詳細については、「[AWS IoT Greengrass コアのハードウェアセキュリティ設定](hardware-security.md#configure-hardware-security)」を参照してください。
**注記**  
現在、 は、ハードウェアベースのプライベートキーを使用する場合のローカルシークレットの暗号化と復号のための [PKCS\$11 v1.5](https://tools.ietf.org/html/rfc2313) パディングメカニズムのみ AWS IoT Greengrass をサポートしています。ベンダーが提供する指示に従ってハードウェアベースのプライベートキーを手動で生成する場合は、PKCS\$11 v1.5. AWS IoT Greengrass Doesn't support Optimal Asymmetric Encryption Padding (OAEP) を選択してください。

## AWS IoT Greengrass シークレット値の取得を に許可する
<a name="secrets-config-service-role"></a>

この手順では、 がシークレットの値 AWS IoT Greengrass を取得できるようにするインラインポリシーを Greengrass サービスロールに追加します。

シークレットに AWS IoT Greengrass カスタムアクセス許可を付与する場合、または Greengrass サービスロールに `AWSGreengrassResourceAccessRolePolicy`管理ポリシーが含まれていない場合にのみ**、この手順に従います**。 は *greengrass-* で始まる名前のシークレットへのアクセス`AWSGreengrassResourceAccessRolePolicy`を許可します。

1. 以下の CLI コマンドを実行して、Greengrass サービスロールの ARN を取得します。

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

   返された ARN にはロール名が含まれています。

   ```
   {
     "AssociatedAt": "time-stamp",
     "RoleArn": "arn:aws:iam::account-id:role/service-role/role-name"
   }
   ```

   以下の手順で ARN または名前を使用します。

1. `secretsmanager:GetSecretValue` アクションを許可するインラインポリシーを追加します。詳細については、「IAM ユーザーガイド」の「[IAM ポリシーの追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

   シークレットを明示的に指定するかワイルドカード `*` 命名規則を使用することで、詳細なアクセスを許可できます。バージョニングまたはタグ付けされたシークレットへの条件付きアクセスを許可することもできます。たとえば、次のポリシーでは、 AWS IoT Greengrass が指定されたシークレットのみを読み取ることを許可します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue"
               ],
               "Resource": [
               "arn:aws:secretsmanager:us-east-1:123456789012:secret:greengrass-SecretA-abc",
       "arn:aws:secretsmanager:us-east-1:123456789012:secret:greengrass-SecretB-xyz"
               ]
           }
       ]
   }
   ```

------
**注記**  
カスタマーマネージド AWS KMS キーを使用してシークレットを暗号化する場合、Greengrass サービスロールも `kms:Decrypt`アクションを許可する必要があります。

Secrets Manager の IAM ポリシーの詳細については、「*AWS Secrets Manager ユーザーガイド*」の「[AWS Secrets Managerの認証とアクセスコントロール](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html)」および「[AWS Secrets Managerの IAM ポリシーまたはシークレットポリシーで使用できるアクション、リソース、コンテキストキー](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html)」を参照してください。

## 関連情報
<a name="secrets-seealso"></a>
+ *AWS Secrets Manager ユーザーガイド*の[「 AWS Secrets Managerとは](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)」
+ [PKCS \$11: RSA Encryption Version 1.5](https://tools.ietf.org/html/rfc2313)

# シークレットリソースを使用する
<a name="secrets-using"></a>

AWS IoT Greengrass はシー*クレットリソース*を使用して、 のシークレット AWS Secrets Manager を Greengrass グループに統合します。シークレットリソースとは、Secrets Manager シークレットへの参照を意味します。詳細については、「[シークレットを AWS IoT Greengrass コアにデプロイする](secrets.md)」を参照してください。

 AWS IoT Greengrass コアデバイスでは、コネクタと Lambda 関数はシークレットリソースを使用して、パスワード、トークン、その他の認証情報をハードコーディングすることなく、サービスやアプリケーションで認証できます。

## シークレットの作成と管理
<a name="secrets-create-manage"></a>

Greengrass グループで、シークレットリソースは Secrets Manager シークレットの ARN を参照します。シークレットリソースをコアにデプロイすると、シークレットの値は暗号化され、関連付けられているコネクタおよび Lambda 関数で使用できるようになります。詳細については、「[シークレットの暗号化](secrets.md#secrets-encryption)」を参照してください。

Secrets Manager を使用して、シークレットのクラウドバージョンを作成および管理します。 AWS IoT Greengrass を使用して、シークレットリソースを作成、管理、デプロイします。

**重要**  
Secrets Manager でシークレットを更新するためのベストプラクティスに従うことをお勧めします。次に、Greengrass グループをデプロイして、シークレットのローカルコピーを更新します。詳細については、「 *AWS Secrets Manager ユーザーガイド*」の「シー[AWS Secrets Manager クレットのローテーション](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)」を参照してください。

**Greengrass Core でシークレットを使用可能にするには**

1. Secrets Manager でシークレットを作成します。これは、Secrets Manager で一元的に保存および管理されるシークレットのクラウドバージョンです。管理タスクには、シークレットの値の更新とリソースポリシーの適用が含まれます。

1. でシークレットリソースを作成します AWS IoT Greengrass。これは、ARN に基づいてクラウドシークレットを参照するグループリソースの一種です。シークレットはグループごとに 1 回のみ参照できます。

1. コネクタまたは Lambda 関数を設定する。リソースをコネクタまたは関数に関連付けるには、対応するパラメータまたはプロパティを指定する必要があります。これにより、ローカルにデプロイされたシークレットリソースの値を取得できます。詳細については、「[コネクタと Lambda 関数でのローカルシークレットの使用](#secrets-access)」を参照してください。

1. Greengrass グループをデプロイする。デプロイ中、 AWS IoT Greengrass はクラウドシークレットの値を取り出し、Core のローカルシークレットを作成 (または更新) します。

Secrets Manager は、 が AWS IoT Greengrass シークレット値を取得する AWS CloudTrail たびにイベントを記録します。 AWS IoT Greengrass は、ローカルシークレットのデプロイまたは使用に関連するイベントを記録しません。Secrets Manager のログ記録の詳細については、 *AWS Secrets Manager ユーザーガイド*の「シーク[AWS Secrets Manager レットの使用を監視する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/monitoring.html)」を参照してください。

### シークレットリソースにステージングラベルを含める
<a name="secret-resources-labels"></a>

Secrets Manager はステージングラベルを使用して、シークレットの値の特定バージョンを識別します。ステージングラベルは、システム定義またはユーザー定義とすることができます。Secrets Manager は、`AWSCURRENT` ラベルをシークレット値の最新バージョンに割り当てます。ステージングラベルは一般に、シークレットの更新を管理するために使用されます。Secrets Manager のバージョニングの詳細については、「AWS Secrets Manager ユーザーガイド」の「[Key terms and concepts for AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html)」( の主な用語と概念) を参照してください。

シークレットリソースには必ず `AWSCURRENT` ステージングラベルを含めます。また、Lambda 関数やコネクタに必要な場合、他のステージングラベルを含めることもできます。グループのデプロイ中に、 はグループ内で参照されているステージングラベルの値 AWS IoT Greengrass を取得し、コアで対応する値を作成または更新します。

### シークレットリソースの作成と管理 (コンソール)
<a name="create-manage-secret-resource-console"></a>

#### シークレットリソースの作成 (コンソール)
<a name="create-manage-secret-resource-console-create"></a>

 AWS IoT Greengrass コンソールで、グループのリソースページのシークレットタブからシー**クレット****リソース**を作成および管理します。シークレットリソースを作成してグループに追加するチュートリアルについては、「[シークレットリソースを作成する方法 (コンソール)](secrets-console.md)」と「[Greengrass コネクタの開始方法 (コンソール)](connectors-console.md)」を参照してください。

![\[[Resources (リソース)] ページの [シークレット] タブのシークレットリソース\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/connectors/secret-resource-twilio-auth-token.png)


**注記**  
別の方法として、コネクタや Lambda 関数を設定するときに、コンソールでシークレットとシークレットリソースを作成することもできます。これはコネクタの **[Configure parameters]** (パラメータの設定) ページか、Lambda 関数の **[Resources]** (リソース) ページから実行できます。

#### シークレットリソースの管理 (コンソール)
<a name="create-manage-secret-resource-console-manage"></a>

Greengrass グループのシークレットリソース管理タスクとして、グループへのシークレットリソースの追加、グループからのシークレットリソースの削除、シークレットリソース内にある[ステージングラベル](#secret-resources-labels)セットの変更が挙げられます。

Secrets Manager とは異なるシークレットを参照する場合は、そのシークレットを使用するコネクタをすべて編集する必要があります。

1. グループの設定ページで、[**コネクタ**] を選択します。

1. コネクタのコンテキストメニューから **[Edit]** (編集) を選択します。

1. [**パラメータの編集**] ページで、シークレット ARN が変更されたことを知らせるメッセージが表示されます。変更を確定するには、[**Save (保存)**] を選択します。

Secrets Manager でシークレットを削除する場合は、グループ、およびそれを参照するコネクタと Lambda 関数から、対応するシークレットリソースを削除します。その操作を行わないと、グループのデプロイ中に、 AWS IoT Greengrass から、シークレットが見つからない旨のエラーが返ります。また、必要に応じて Lambda 関数コードを更新します。

### シークレットリソースの作成と管理 (CLI)
<a name="create-manage-secret-resource-cli"></a>

#### シークレットリソースの作成 (CLI)
<a name="create-manage-secret-resource-cli-create"></a>

 AWS IoT Greengrass API では、シークレットはグループリソースの一種です。以下の例では、`MySecretResource` というシークレットリソースを含む初期バージョンでリソース定義を作成します。シークレットリソースを作成してグループバージョンに追加するチュートリアルについては、「[Greengrass コネクタの開始方法 (CLI)](connectors-cli.md)」を参照してください。

シークレットリソースは、対応する Secrets Manager シークレットの ARN を参照し、常に含まれる `AWSCURRENT` に加えて 2 つのステージングラベルを含みます。

```
aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{
    "Resources": [
        {
            "Id": "my-resource-id",
            "Name": "MySecretResource",
            "ResourceDataContainer": {
                "SecretsManagerSecretResourceData": {
                    "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:greengrass-SomeSecret-KUj89s",
                    "AdditionalStagingLabelsToDownload": [
                        "Label1",
                        "Label2"
                    ]
                }
            }
        }
    ]
}'
```

#### シークレットリソースの管理 (CLI)
<a name="create-manage-secret-resource-cli-manage"></a>

Greengrass グループのシークレットリソース管理タスクとして、グループへのシークレットリソースの追加、グループからのシークレットリソースの削除、シークレットリソース内にある[ステージングラベル](#secret-resources-labels)セットの変更が挙げられます。

 AWS IoT Greengrass API では、これらの変更は バージョンを使用して実装されます。

 AWS IoT Greengrass API は バージョンを使用してグループを管理します。バージョンは変更不可であるため、グループのクライアントデバイス、関数、リソースといったグループコンポーネントを追加または変更するには、新規または更新済みコンポーネントのバージョンを作成する必要があります。その後、各コンポーネントのターゲットバージョンを含むグループバージョンを作成およびデプロイします。グループの詳細については、「[AWS IoT Greengrass グループ](what-is-gg.md#gg-group)」を参照してください。

例えば、シークレットリソースの一連のステージングラベルを変更するには、以下の操作を実行します。

1. 更新されたシークレットリソースを含むリソース定義バージョンを作成します。以下の例では、前のセクションのシークレットリソースに 3 つ目のステージングラベルを追加します。
**注記**  
バージョンにさらにリソースを追加するには、それらのリソースを `Resources` 配列に含めます。

   ```
   aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{
       "Resources": [
           {
               "Id": "my-resource-id",
               "Name": "MySecretResource",
               "ResourceDataContainer": {
                   "SecretsManagerSecretResourceData": {
                       "ARN": "arn:aws:secretsmanager:us-west-2:123456789012:secret:greengrass-SomeSecret-KUj89s",
                       "AdditionalStagingLabelsToDownload": [
                           "Label1",
                           "Label2",
                           "Label3"
                       ]
                   }
               }
           }
       ]
   }'
   ```

1. シークレットリソースの ID が変更された場合は、そのシークレットリソースを使用するコネクタと関数を更新します。新しいバージョンでは、リソース ID に対応するパラメータまたはプロパティを更新します。シークレットの ARN が変更された場合は、シークレットを使用するすべてのコネクタに対応するパラメータも更新する必要があります。
**注記**  
リソース ID は、お客様が提供する任意の識別子です。

1. Core に送信する各コンポーネントのターゲットバージョンを含むグループバージョンを作成します。

1. グループバージョンをデプロイします。

シークレットリソース、コネクタ、関数を作成してデプロイする方法を示すチュートリアルについては、「[Greengrass コネクタの開始方法 (CLI)](connectors-cli.md)」を参照してください。

Secrets Manager でシークレットを削除する場合は、グループ、およびそれを参照するコネクタと Lambda 関数から、対応するシークレットリソースを削除します。その操作を行わないと、グループのデプロイ中に、 AWS IoT Greengrass から、シークレットが見つからない旨のエラーが返ります。また、必要に応じて Lambda 関数コードを更新します。ローカルシークレットを削除するには、対応するシークレットリソースを含まないリソース定義バージョンをデプロイします。

## コネクタと Lambda 関数でのローカルシークレットの使用
<a name="secrets-access"></a>

Greengrass コネクタと Lambda 関数はローカルシークレットを使用して、サービスやアプリケーションとやり取りします。デフォルトでは `AWSCURRENT` 値が使用されますが、シークレットリソースに含まれている他の[ステージングラベル](#secret-resources-labels)の値も使用できます。

コネクタと関数はローカルシークレットにアクセスする前に設定する必要があります。これにより、シークレットリソースがコネクタまたは関数に関連付けられます。

**Connector**  
コネクタがローカルシークレットにアクセスする必要がある場合、シークレットにアクセスするためのパラメータはお客様が設定します。  
+  AWS IoT Greengrass コンソールでこれを行う方法については、「」を参照してください[Greengrass コネクタの開始方法 (コンソール)](connectors-console.md)。
+ CLI でこれを行う方法については、 AWS IoT Greengrass 「」を参照してください[Greengrass コネクタの開始方法 (CLI)](connectors-cli.md)。
個々のコネクタの要件については、「[AWSが提供する Greengrass コネクタ](connectors-list.md)」を参照してください。  
シークレットにアクセスして使用するためのロジックは、コネクタに組み込まれています。

**Lambda 関数**  
Greengrass Lambda 関数にローカルシークレットへのアクセスを許可するには、その関数のプロパティを設定します。  
+  AWS IoT Greengrass コンソールでこれを行う方法については、「」を参照してください[シークレットリソースを作成する方法 (コンソール)](secrets-console.md)。
+  AWS IoT Greengrass API でこれを行うには、 `ResourceAccessPolicies`プロパティで次の情報を指定します。
  + `ResourceId`: Greengrass グループのシークレットリソースの ID。これは、対応する Secrets Manager シークレットの ARN を参照するリソースです。
  + `Permission`: 関数がリソースに対して付与されるアクセス許可のタイプ。シークレットリソースに対しては `ro` (読み取り専用) アクセス許可のみがサポートされています。

  以下の例では、`MyApiKey` シークレットリソースにアクセスできる Lambda 関数を作成します。

  ```
  aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{
      "Functions": [
          {
              "Id": "MyLambdaFunction",
              "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1",
              "FunctionConfiguration": {
                  "Pinned": false,
                  "MemorySize": 16384,
                  "Timeout": 10,
                  "Environment": {
                      "ResourceAccessPolicies": [
                          {
                              "ResourceId": "MyApiKey",
                              "Permission": "ro"
                          }                          
                      ],
                      "AccessSysfs": true
                  }
              }
          }
      ]
  }'
  ```

   

  実行時にローカルシークレットにアクセスするには、Greengrass Lambda 関数は AWS IoT Greengrass Core SDK (v1.3.0 以降) の`secretsmanager`クライアントから`get_secret_value`関数を呼び出します。

  次の例は、 AWS IoT Greengrass Core SDK for Python を使用してシークレットを取得する方法を示しています。シークレットの名前を `get_secret_value` 関数に渡します。`SecretId` は、Secrets Manager シークレット (シークレットリソースではなく) の名前または ARN です。

  ```
  import greengrasssdk
  
  secrets_client = greengrasssdk.client("secretsmanager")
  secret_name = "greengrass-MySecret-abc"
  
  
  def function_handler(event, context):
      response = secrets_client.get_secret_value(SecretId=secret_name)
      secret = response.get("SecretString")
  ```

  テキストタイプのシークレットの場合、`get_secret_value` 関数は文字列を返します。バイナリタイプのシークレットの場合は、Base 64 でエンコードされた文字列を返します。
**重要**  
ユーザー定義の Lambda 関数がシークレットを安全に処理することと、シークレットに格納されている機密データをログに記録しないことを確認してください。詳細については、「AWS Secrets Manager ユーザーガイド」の「[Lambda 関数のログ記録とデバッグのリスクを軽減する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)」を参照してください。このドキュメントでは特に回転関数について言及していますが、こうした推奨事項は Greengrass Lambda 関数にも適用されます。

  デフォルトでは、シークレットの現在の値が返されます。これは `AWSCURRENT` ステージングラベルのアタッチ先のバージョンです。別のバージョンにアクセスするには、対応するステージングラベルの名前をオプションの `VersionStage` 引数に渡します。例:

  ```
  import greengrasssdk
  
  secrets_client = greengrasssdk.client("secretsmanager")
  secret_name = "greengrass-TestSecret"
  secret_version = "MyTargetLabel"
  
  
  # Get the value of a specific secret version
  def function_handler(event, context):
      response = secrets_client.get_secret_value(
          SecretId=secret_name, VersionStage=secret_version
      )
      secret = response.get("SecretString")
  ```

  `get_secret_value` を呼び出す別の関数の例については、「[Lambda 関数デプロイパッケージを作成する](secrets-console.md#secrets-console-create-deployment-package)」を参照してください。

# シークレットリソースを作成する方法 (コンソール)
<a name="secrets-console"></a>

この機能は AWS IoT Greengrass Core v1.7 以降で使用できます。

このチュートリアルでは、 AWS マネジメントコンソール を使用して Greengrass グループに*シークレットリソース*を追加する方法を示します。シークレットリソースは、シークレットへの参照です AWS Secrets Manager。詳細については、「[シークレットを AWS IoT Greengrass コアにデプロイする](secrets.md)」を参照してください。

 AWS IoT Greengrass コアデバイスでは、コネクタと Lambda 関数はシークレットリソースを使用して、パスワード、トークン、その他の認証情報をハードコーディングすることなく、サービスやアプリケーションで認証できます。

このチュートリアルでは、まず AWS Secrets Manager コンソールでシークレットを作成します。次に、 AWS IoT Greengrass コンソールで、グループの **[Resources]** (リソース) ページからシークレットリソースを Greengrass グループに追加します。このシークレットリソースは、Secrets Manager シークレットを参照します。後で、シークレットリソースを Lambda 関数にアタッチします。これにより、関数はローカルシークレットの値を取得できます。

**注記**  
別の方法として、コネクタや Lambda 関数を設定するときに、コンソールでシークレットとシークレットリソースを作成することもできます。これはコネクタの **[Configure parameters]** (パラメータの設定) ページか、Lambda 関数の **[Resources]** (リソース) ページから実行できます。  
シークレットのパラメータを含むコネクタのみがシークレットにアクセスできます。ローカルに保存された認証トークンを Twilio 通知コネクタがどのように使用するかを示すチュートリアルについては、「[Greengrass コネクタの開始方法 (コンソール)](connectors-console.md)」を参照してください。

このチュートリアルのおおまかな手順は以下のとおりです。

1. [Secrets Manager シークレットを作成する](#secrets-console-create-secret)

1. [グループにシークレットリソースを追加する](#secrets-console-create-resource)

1. [Lambda 関数デプロイパッケージを作成する](#secrets-console-create-deployment-package)

1. [Lambda 関数を作成する](#secrets-console-create-function)

1. [ 関数をグループに追加する](#secrets-console-create-gg-function)

1. [シークレットリソースを関数にアタッチする](#secrets-console-affiliate-gg-function)

1. [サブスクリプションをグループに追加する](#secrets-console-create-subscription)

1. [グループをデプロイする](#secrets-console-create-deployment)

1. [Lambda 関数をテストする](#secrets-console-test-solution)

このチュートリアルは完了までに約 20 分かかります。

## 前提条件
<a name="secrets-console-prerequisites"></a>

このチュートリアルを完了するには、以下が必要です。
+ Greengrass グループと Greengrass コア (v1.7 以降)。Greengrass のグループまたは Core を作成する方法については、「[の開始方法 AWS IoT Greengrass](gg-gs.md)」を参照してください。入門チュートリアルには、 AWS IoT Greengrass Core ソフトウェアをインストールする手順も含まれています。
+ AWS IoT Greengrass は、ローカルシークレットをサポートするように設定する必要があります。詳細については、「[シークレットの要件](secrets.md#secrets-reqs)」を参照してください。
**注記**  
この要件には、Secrets Manager シークレットへのアクセス許可が含まれます。デフォルトの Greengrass サービスロールを使用している場合、Greengrass は *greengrass-* で始まる名前の付いたシークレット値にアクセスできます。
+ ローカルシークレットの値を取得するには、ユーザー定義の Lambda 関数で AWS IoT Greengrass Core SDK v1.3.0 以降を使用する必要があります。

## ステップ 1: Secrets Manager シークレットを作成する
<a name="secrets-console-create-secret"></a>

このステップでは、 AWS Secrets Manager コンソールを使用してシークレットを作成します。

1. <a name="create-secret-step-signin"></a>[AWS Secrets Manager コンソール](https://console.aws.amazon.com/secretsmanager/) にサインインします。
**注記**  
このプロセスの詳細については、「AWS Secrets Manager ユーザーガイド」の「[ステップ 1: AWS Secrets Managerでシークレットを作成および保存する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)」を参照してください。

1. <a name="create-secret-step-create"></a>**新しいシークレットを保存** を選択します。

1. <a name="create-secret-step-othertype"></a>**[Choose secret type]** (シークレットの種類を選択) で、**[Other type of secrets]** (他の種類のシークレット) を選択します。

1. [**このシークレットに保存するキーと値のペアを指定します**] で以下の操作を行います。
   + [**キー**] に「**test**」と入力します。
   + [**Value (値)**] に「**abcdefghi**」と入力します。

1. <a name="create-secret-step-encryption"></a>暗号化には **aws/secretsmanager** を暗号キーとして選択した状態で、**[Next]** (次へ) を選択します。
**注記**  
Secrets Manager がアカウントで作成するデフォルトの AWS マネージドキー AWS KMS を使用する場合、 は課金されません。

1. [**シークレット名**] に「**greengrass-TestSecret**」と入力し、[**次へ**] を選択します。
**注記**  
デフォルトでは、Greengrass サービスロールにより AWS IoT Greengrass 、 は *greengrass-* で始まる名前のシークレットの値を取得できます。詳細については、「[シークレットの要件](secrets.md#secrets-reqs)」を参照してください。

1. <a name="create-secret-step-rotation"></a>このチュートリアルではローテーションは不要であるため、[disable automatic rotation] (自動ローテーションを無効化)、**Next** (次へ) の順に選択します。

1. <a name="create-secret-step-review"></a>[**確認**] ページで、設定を確認し、[**保存**] を選択します。

   次に、シークレットを参照する Greengrass グループにシークレットリソースを作成します。

## ステップ 2: Greengrass グループにローカルシークレットリソースを追加する
<a name="secrets-console-create-resource"></a>

この手順では、Secrets Manager シークレットを参照するグループリソースを設定します。

1. <a name="console-gg-groups"></a> AWS IoT コンソールナビゲーションペインの**「管理**」で **Greengrass デバイス**を展開し、**「グループ (V1)**」を選択します。

1. <a name="create-secret-resource-step-choosegroup"></a>シークレットリソースを追加するグループを選択します。

1. <a name="create-secret-resource-step-secretstab"></a>グループ設定ページの **[Resources]** (リソース) タブから、**[Secrets]** (シークレット) セクションを選択します。**[Secrets]** (シークレット) セクションには、グループに属するシークレットリソースが表示されます。このセクションからシークレットリソースを追加、編集、削除できます。
**注記**  
別の方法として、コネクタや Lambda 関数を設定するときに、コンソールでシークレットとシークレットリソースを作成することもできます。これはコネクタの **[Configure parameters]** (パラメータの設定) ページか、Lambda 関数の **[Resources]** (リソース) ページから実行できます。

1. <a name="create-secret-resource-step-addsecretresource"></a>**[Secrets]** (シークレット) セクションから **[Add]** (追加) を選択します。

1. **[Add a secret resource]** (シークレットリソースに追加) ページで、**[Resource name]** (リソース名) に **MyTestSecret** を入力します。

1. **[Secret]** (シークレット) から**[greengrass-testsecret]**を選択します。

1. <a name="create-secret-resource-step-selectlabels"></a>**[Select labels (Optional)]** (ラベルを選択 〔オプション〕) セクションの、AWSCURRENT ステージングラベルはシークレットの最新バージョンを表します。このラベルはシークレットリソースに常に含まれています。
**注記**  
このチュートリアルでは、AWSCURRENT ラベルのみが必要です。オプションで、Lambda 関数またはコネクタで必要になるラベルを含めることができます。

1. **[Add resource]** (リソースを追加) を選択します。

## ステップ 3: Lambda 関数デプロイパッケージを作成する
<a name="secrets-console-create-deployment-package"></a>

Lambda 関数を作成するには、関数のコードと依存関係を含む Lambda 関数デプロイパッケージを最初に作成する必要があります。Greengrass Lambda 関数には、コア環境での MQTT メッセージとの通信やローカルシークレットへのアクセスなどのタスクに使用する、[AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks-core) が必要です。このチュートリアルでは Python 関数を作成するため、デプロイパッケージには Python 版の SDK を使用します。

**注記**  
ローカルシークレットの値を取得するには、ユーザー定義の Lambda 関数で AWS IoT Greengrass Core SDK v1.3.0 以降を使用する必要があります。

1. <a name="download-ggc-sdk"></a> [AWS IoT Greengrass Core SDK](what-is-gg.md#gg-core-sdk-download) ダウンロードページから、 AWS IoT Greengrass Core SDK for Python をコンピュータにダウンロードします。

1. <a name="unzip-ggc-sdk"></a>ダウンロードしたパッケージを解凍し、SDK を取得します。SDK は `greengrasssdk` フォルダです。

1. 以下の Python コード関数を `secret_test.py` というローカルファイルに保存します。

   ```
   import greengrasssdk
   
   secrets_client = greengrasssdk.client("secretsmanager")
   iot_client = greengrasssdk.client("iot-data")
   secret_name = "greengrass-TestSecret"
   send_topic = "secrets/output"
   
   
   def function_handler(event, context):
       """
       Gets a secret and publishes a message to indicate whether the secret was
       successfully retrieved.
       """
       response = secrets_client.get_secret_value(SecretId=secret_name)
       secret_value = response.get("SecretString")
       message = (
           f"Failed to retrieve secret {secret_name}."
           if secret_value is None
           else f"Successfully retrieved secret {secret_name}."
       )
       iot_client.publish(topic=send_topic, payload=message)
       print("Published: " + message)
   ```

   `get_secret_value` 関数は、`SecretId` 値として Secrets Manager シークレットの名前または ARN をサポートしています。この例では、シークレット名を使用しています。このシークレットの例では、 はキーと値のペア AWS IoT Greengrass を返します`{"test":"abcdefghi"}`。
**重要**  
ユーザー定義の Lambda 関数がシークレットを安全に処理することと、シークレットに格納されている機密データをログに記録しないことを確認してください。詳細については、「AWS Secrets Manager ユーザーガイド」の「[Lambda 関数のログ記録とデバッグのリスクを軽減する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)」を参照してください。このドキュメントでは特に回転関数について言及していますが、こうした推奨事項は Greengrass Lambda 関数にも適用されます。

1. 以下の項目を `secret_test_python.zip` という名前のファイルに圧縮します。ZIP ファイルを作成するときに、コードと依存関係のみを含め、フォルダは含めません。
   + **secret\$1test.py** アプリケーションロジック。
   + **greengrasssdk**。すべての Python Greengrass Lambda 関数に必要なライブラリ。

   これが Lambda 関数デプロイパッケージです。

## ステップ 4: Lambda 関数を作成する
<a name="secrets-console-create-function"></a>

このステップでは、 AWS Lambda コンソールを使用して Lambda 関数を作成し、デプロイパッケージを使用するように設定します。次に、関数のバージョンを公開し、エイリアスを作成します。

1. 最初に Lambda 関数を作成します。

   1. <a name="lambda-console-open"></a>で AWS マネジメントコンソール、**サービス**を選択し、 AWS Lambda コンソールを開きます。

   1. <a name="lambda-console-create-function"></a>**[Create function]** (関数の作成) を選択し、**[Author from scratch]** (一から作成) を選択します。

   1. **[基本的な情報]** セクションで、以下の値を使用します。
      + **[関数名]** に「**SecretTest**」と入力します。
      + **[ランタイム]** で **[Python 3.7]** を選択します。
      + **[アクセス許可]** はデフォルト設定のままにしておきます。これで Lambda への基本的なアクセス許可を付与する実行ロールが作成されます。このロールは では使用されません AWS IoT Greengrass。

   1. <a name="lambda-console-save-function"></a>ページの下部で、**[関数の作成]** を選択します。

1. 今度は、ハンドラを登録し、Lambda 関数デプロイパッケージをアップロードします。

   1. <a name="lambda-console-upload"></a>**[Code]** (コード) タブの **[Code source]** (コードソース) で、**[Upload from]** (アップロード元) を選択します。ドロップダウンから **[.zip ファイル]** を選択します。  
![\[[.zip file] (.zip ファイル) が強調表示された [Upload from] (アップロード元) ドロップダウンリスト。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. **[Upload]** (アップロード) を選択し、`secret_test_python.zip` デプロイパッケージを選択します。次に、**[保存]** を選択します。

   1. <a name="lambda-console-runtime-settings-para"></a>関数の **[Code]** (コード) タブにある **[Runtime settings]** (ランタイム設定) で **[Edit]** (編集) を選択し、次の値を入力します。
      + **[ランタイム]** で **[Python 3.7]** を選択します。
      + **[ハンドラ]** に **secret\$1test.function\$1handler** と入力します。

   1. <a name="lambda-console-save-config"></a>**[保存]** を選択します。
**注記**  
 AWS Lambda コンソールの**テスト**ボタンは、この関数では機能しません。 AWS IoT Greengrass Core SDK には、Greengrass Lambda 関数を AWS Lambda コンソールで個別に実行するために必要なモジュールは含まれていません。これらのモジュール (例えば `greengrass_common`) が関数に提供されるのは、Greengrass Core にデプロイされた後になります。

1. ここで、Lambda 関数の最初のバージョンを公開し、[バージョンのエイリアス](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)を作成します。
**注記**  
Greengrass グループは、Lambda 関数をエイリアス別 (推奨) またはバージョン別に参照できます。エイリアスを使用すると、関数コードを更新する時にサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。その代わりに、新しい関数バージョンにエイリアスを指定するだけで済みます。

   1. <a name="shared-publish-function-version"></a>**[アクション]** メニューから、**[新しいバージョンを発行]** を選択します。

   1. <a name="shared-publish-function-version-description"></a>**[バージョンの説明]** に **First version** と入力し、**[発行]** を選択します。

   1. [**SecretTest: 1**] 設定ページで、[**Actions (アクション)**] メニューの [**エイリアスの作成**] を選択します。

   1. **[新しいエイリアスの作成]** ページで、次の値を使用します。
      + [**名前**] に**GG\$1SecretTest**と入力してください。
      + **[バージョン]** で、**[1]** を選択します。
**注記**  
AWS IoT Greengrass は、**\$1LATEST** バージョンの Lambda エイリアスをサポートしていません。

   1. **[作成]** を選択します。

これで、Greengrass グループに Lambda 関数を追加し、シークレットリソースをアタッチする準備ができました。

## ステップ 5: Lambda 関数を Greengrass グループに追加する
<a name="secrets-console-create-gg-function"></a>

このステップでは、Lambda 関数を AWS IoT コンソールの Greengrass グループに追加します。

1. <a name="choose-add-lambda"></a>グループ設定ページで、**[Lambda functions]** (Lambda 関数) タブを選択します。

1. **[My Lambda functions]** (自分の Lambda 関数) セクションで、**[Add]**（追加）を選択します。

1. **[Lambda function]** (Lambda 関数) で、**[SecretTest]**を選択します。

1. **[Lambda function version]** (Lambda 関数のバージョン) で、公開したバージョンのエイリアスを選択します。

次に、Lambda 関数のライフサイクルを設定します。

1. **[Lambda function configuration]** (Lambda 関数の設定) セクションで次のように更新します。
**注記**  
 ビジネスケースで要求される場合を除き、Lambda 関数はコンテナ化を使用せずに実行することをお勧めします。これにより、デバイスリソースを設定しなくても、デバイスの GPU とカメラにアクセスできるようになります。コンテナ化なしで を実行する場合は、 AWS IoT Greengrass Lambda 関数へのルートアクセスも許可する必要があります。

   1. **コンテナ化を使用せずに実行するには:**
      + **[System user and group]** (システムユーザーとグループ) で、**Another user ID/group ID**を選択します。**[System user ID]** (システムユーザ ID) には、「**0**」と入力します。**[System group ID]** (システムグループ ID) には、「**0**」と入力します。

        これにより、Lambda 関数を root として実行できます。root として実行の詳細については、「[グループ内の Lambda 関数に対するデフォルトのアクセス ID の設定](lambda-group-config.md#lambda-access-identity-groupsettings)」を参照してください。
**ヒント**  
また、ルートアクセスを Lambda 関数に付与するように `config.json` ファイルを更新する必要があります。手順については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
      + **[Lambda function containerization]** (Lambda 関数のコンテナ化) で、**[No container]** (コンテナなし) を選択します。

        コンテナ化を使用しない実行の詳細については、「[Lambda 関数のコンテナ化を選択する場合の考慮事項](lambda-group-config.md#lambda-containerization-considerations)」を参照してください。
      + **[タイムアウト]** に **10 seconds** と入力します。
      + **[固定]** で、**[True]** を選択します。

        詳細については、「[Greengrass Lambda 関数のライフサイクル設定](lambda-functions.md#lambda-lifecycle)」を参照してください。
      + **[Additional Parameter]** (追加のパラメータ) の、**[Read access to /sys directory]** (/sys ディレクトリへの読み取りアクセス) で、**[Enabled]** (有効) を選択します。

   1.  **代わりにコンテナ化モードで実行するには:** 
**注記**  
ビジネスケースで要求されない限り、コンテナ化モードでの実行はお勧めしていません。
      + **[System user and group]** (システムユーザーとグループ) で、**[Use group default]** (グループのデフォルトを使用) を選択します。
      + **[Lambda function containerization]** (Lambda 関数のコンテナ化) で、**[Use group default]** (グループのデフォルトを使用) を選択します。
      + **[メモリ制限]** に **1024 MB** と入力します。
      + **[タイムアウト]** に **10 seconds** と入力します。
      + **[固定]** で、**[True]** を選択します。

        詳細については、「[Greengrass Lambda 関数のライフサイクル設定](lambda-functions.md#lambda-lifecycle)」を参照してください。
      + **[Additional Parameter]** (追加のパラメータ) の、**[Read access to /sys directory]** (/sys ディレクトリへの読み取りアクセス) で、**[Enabled]** (有効) を選択します。

1.  **[Add Lambda function]** (Lambda 関数の追加) を選択します。

次に、シークレットリソースを関数に関連付けます。

## ステップ 6: シークレットリソースを Lambda 関数にアタッチする
<a name="secrets-console-affiliate-gg-function"></a>

このステップでは、シークレットリソースを Greengrass グループの Lambda 関数に関連付けます。これで、リソースは関数に関連付けられて、ローカルシークレットの値を取得できるようになります。

1. グループ設定ページで、**[Lambda functions]** (Lambda 関数) タブを選択します。

1. **[SecretTest]** 関数を選択します。

1. 関数の詳細ページで、**[Resources]** (リソース) を選択します。

1. **シークレット** セクションまでスクロールして、**[Associate]** (関連付け) を選択します。

1. **[MyTestSecret]**、**[Associate]** (関連付け) の順に選択します。

## ステップ 7: サブスクリプションを Greengrass グループに追加する
<a name="secrets-console-create-subscription"></a>

このステップでは、 AWS IoT と Lambda 関数がメッセージを交換できるようにするサブスクリプションを追加します。1 つのサブスクリプションでは AWS IoT が関数を呼び出し、もう 1 つのサブスクリプションでは関数が出力データを送信できるようにします AWS IoT。

1. <a name="shared-subscriptions-addsubscription"></a>グループ設定ページの **[Subscriptions]** (サブスクリプション) タブで、**[Add Subscription]** (サブスクリプションの追加) を選択します。

1. が 関数 AWS IoT にメッセージを発行できるようにするサブスクリプションを作成します。

   グループ設定ページで、**[Subscriptions]** (サブスクリプション) タブ、**[Add subscription]** (サブスクリプションの追加) の順に選択します。

1. **[Create a subscription]** (サブスクリプションの作成) ページで、ソースおよびターゲットを次のように設定します。

   1. **[Source type]** (ソースタイプ) で、**[Lambda function]** (Lambda 関数)、**[IoT Cloud]** (IoT クラウド) の順に選択します。

   1. **[Target type]** (ターゲットタイプ) で、**[Service]** (サービス)、**[SecretTest]**の順に選択します。

   1. **[Topic filter]** (トピックのフィルター) で、「**secrets/input**」と入力し、**[Create subscription]** (サブスクリプションの作成) を選択します。

1. 2 つ目のサブスクリプションを追加します。**[Subscriptions]** (サブスクリプション) タブ、**[Add subscription]** (サブスクリプションの追加) の順に選択し、ソースとターゲットを次のように設定します。

   1. **[Source type]** (ソースタイプ) で、**[Services]** (サービス)、**[SecretTest]**の順に選択します。

   1. **[Target type]** (ターゲットタイプ) で、**[Lambda function]** (Lambda 関数)、 **[IoT Cloud]** (IoT クラウド) の順に選択します。

   1. **[Topic filter]** (トピックのフィルター) で、「**secrets/output**」と入力し、**[Create subscription]** (サブスクリプションの作成) を選択します。

## ステップ 8: Greengrass グループをデプロイする
<a name="secrets-console-create-deployment"></a>

Core デバイスにグループをデプロイします。デプロイ中、 は Secrets Manager からシークレットの値 AWS IoT Greengrass を取得し、暗号化されたローカルコピーをコアに作成します。

1. <a name="shared-deploy-group-checkggc"></a> AWS IoT Greengrass コアが実行されていることを確認します。必要に応じて、Raspberry Pi のターミナルで以下のコマンドを実行します。

   1. デーモンが実行中かどうかを確認するには、以下を実行します。

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      出力に `root` で実行中の `/greengrass/ggc/packages/ggc-version/bin/daemon` のエントリが含まれていれば、デーモンは実行されています。
**注記**  
パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

   1. デーモンを開始するには、以下を実行します。

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="shared-deploy-group-deploy"></a>グループ設定ページで、**[Deploy]** (デプロイ) を選択します。

1. <a name="shared-deploy-group-ipconfig"></a>

   1. **[Lambda functions]** (Lambda 関数) タブの **[System Lambda functions]** (システム Lambda 関数) セクションで、**[IP detector]** (IP ディテクター)、**[Edit]** (編集) の順に選択します。

   1. **[IP ディテクターの設定を編集]** ダイアログボックスで、**[MQTT ブローカーエンドポイントを自動的に検出して上書きする]** を選択します。

   1. **[保存]** を選択します。

      これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、手動で指定されたエンドポイント AWS IoT Greengrass もサポートされます。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。
**注記**  
プロンプトが表示されたら、[Greengrass サービスロール](service-role.md)を作成し、それを現在の AWS アカウント の に関連付けるアクセス許可を付与します AWS リージョン。このロールにより AWS IoT Greengrass 、 は AWS サービスのリソースにアクセスできます。

      **[デプロイ]** ページには、デプロイのタイムスタンプ、バージョン ID、ステータスが表示されます。完了すると、デプロイのステータスが **[完了]** と表示されます。

      トラブルシューティングのヘルプについては、[トラブルシューティング AWS IoT Greengrass](gg-troubleshooting.md) を参照してください。

## Lambda 関数をテストする
<a name="secrets-console-test-solution"></a>

1. <a name="choose-test-page"></a> AWS IoT コンソールのホームページで、**テスト**を選択します。

1. **[Subscribe to topic]** (トピックへのサブスクライブ) で、以下の値を使用し、**[Subscribe]** (サブスクリプション) を選択します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/secrets-console.html)

1. **[Publish to topic]** (トピックに発行) で、以下の値を使用し、**[Publish]** (発行) を選択して関数を呼び出します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/secrets-console.html)

   成功した場合、関数は成功のメッセージを発行します。

## 関連情報
<a name="secrets-console-see-also"></a>
+ [シークレットを AWS IoT Greengrass コアにデプロイする](secrets.md)