AWS IoT Greengrass Core にシークレットをデプロイする - AWS IoT Greengrass

のドキュメントを表示していますAWS IoT Greengrass Version 1。AWS IoT Greengrass Version 2の最新のメジャーバージョンです。AWS IoT Greengrass。の使用方法の詳細については、「」を参照してください。AWS IoT Greengrass V2の詳細については、AWS IoT Greengrass Version 2開発者ガイド

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

AWS IoT Greengrass Core にシークレットをデプロイする

この機能は、次の場合に利用できます。AWS IoT GreengrassCore v1.7 以降。

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

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

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

AWS IoT Greengrass は転送中や保管時にシークレットを暗号化します。グループ展開中、AWS IoT Greengrassは、シークレットマネージャーからシークレットを取り出し、暗号化されたローカルコピーを Greengrass コアに作成します。Secrets Manager でクラウドシークレットを更新した後、グループを再デプロイして、更新された値を Core に伝達します。

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


            AWS IoT GreengrassはシークレットをAWS Secrets Managerを使用して、シークレットリソースとしてコアデバイスにデプロイすると、そこでシークレットリソースとして Core デバイスにデプロイすると、そこでシークレットリソースをコネクタと Lambda 関数から使用可能になる。

AWS IoT Greengrass を使用してシークレットをローカルに保存すると、以下の利点があります。

  • コードから分離 (ハードコードされない)。 これにより、一元管理された認証情報がサポートされ、機密データを侵害のリスクから守ることができます。

  • オフラインシナリオで利用可能。 コネクタと関数はインターネットから切断された状態でローカルサービスとソフトウェアに安全にアクセスできます。

  • シークレットへのアクセスをコントロール。 グループの承認されたコネクタと関数のみがシークレットにアクセスできます。AWS IoT Greengrass はプライベートキー暗号を使用してシークレットを保護します。シークレットは転送中および保管時に暗号化されます。詳細については、「シークレットの暗号化」を参照してください。

  • 更新をコントロール。 シークレットマネージャーでシークレットを更新した後、Greengrass グループを再デプロイして、シークレットのローカルコピーを更新します。詳細については、「シークレットの作成と管理」を参照してください。

    重要

    AWS IoT Greengrass では、クラウドバージョンの更新に伴ってローカルシークレットの値が自動的には更新されません。ローカル値を更新するには、グループを再デプロイする必要があります。

シークレットの暗号化

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

重要

ユーザー定義の Lambda 関数がシークレットを安全に処理し、シークレットに格納されている機密データをログに記録しないようにしてください。詳細については、「」を参照してください。Lambda 機能のログ記録とデバッグのリスクを軽減する()AWS Secrets Managerユーザーガイド。このドキュメントでは特に回転関数について言及していますが、Greengrass Lambda 関数にも推奨事項が適用されます。

転送時の暗号化

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

保管時の暗号化

AWS IoT Greengrass は、config.json で指定されているプライベートキーを使用して、Core に保存されているシークレットを暗号化します。このため、ローカルシークレットの保護には、プライベートキーの安全な保存が重要です。AWS 責任共有モデルでは、Core デバイスのプライベートキーの安全な保存を保証するのはお客様の責任です。

AWS IoT Greengrass は、プライベートキーストレージモードとして以下の 2 つをサポートしています。

  • ハードウェアセキュリティモジュールの使用。詳細については、「ハードウェアセキュリティ統合」を参照してください。

    注記

    現在、AWS IoT Greengrassのみサポートされます。PKCS #1 v1.5ハードウェアベースの秘密鍵を使用する場合、ローカルシークレットの暗号化と復号化のためのパディングメカニズム。ハードウェアベースの秘密鍵を手動で生成するためのベンダー提供の指示に従っている場合は、必ず PKCS #1 v1.5 を選択してください。AWS IoT Greengrassは、最適な非対称暗号化パディング (OAEP) をサポートしていません。

  • ファイルシステムアクセス許可の使用 (デフォルト)。

プライベートキーは、ローカルシークレットの暗号化用のデータキーを保護するために使用されます。データキーは、グループデプロイごとに更新されます。

-AWS IoT GreengrassCore は、プライベートキーにアクセスできる唯一のエンティティです。シークレットリソースに関連付けられている Greengrass コネクタまたは Lambda 関数は Core からシークレットを取得します。

Requirements

以下に示しているのは、ローカルシークレットをサポートするための要件です。

  • 使用する必要があります。AWS IoT GreengrassCore v1.7 以降。

  • ローカルシークレットの値を取得するには、ユーザー定義の Lambda 関数はAWS IoT GreengrassCore SDK v1.3.0 以降。

  • ローカルシークレットの暗号化に使用されるプライベートキーは、Greengrass 設定ファイルで指定する必要があります。デフォルトでは、AWS IoT Greengrass はファイルシステムに保存されている Core プライベートキーを使用します。独自のプライベートキーを指定する場合は、「シークレット暗号化用のプライベートキーを指定する」を参照してください。RSA キータイプのみがサポートされています。

    注記

    現在、AWS IoT Greengrassのみサポートされます。PKCS #1 v1.5ハードウェアベースの秘密鍵を使用する場合、ローカルシークレットの暗号化と復号化のためのパディングメカニズム。ハードウェアベースの秘密鍵を手動で生成するためのベンダー提供の指示に従っている場合は、必ず PKCS #1 v1.5 を選択してください。AWS IoT Greengrassは、最適な非対称暗号化パディング (OAEP) をサポートしていません。

  • AWS IoT Greengrass には、シークレットの値を取得するアクセス許可を付与する必要があります。これにより、グループデプロイ中に AWS IoT Greengrass が値を取得できるようになります。デフォルトの Greengrass サービスロールを使用している場合、AWS IoT Greengrass は「greengrass-」で始まる名前の付いたシークレットにすでにアクセスできます。アクセス権限をカスタマイズするには、「シークレットの値を取得することを AWS IoT Greengrass に許可する」を参照してください。

    注記

    アクセス許可をカスタマイズする場合でも、AWS IoT Greengrass がアクセスを許可されるシークレットを識別するために、この命名規則を使用することをお勧めします。コンソールでは、さまざまなアクセス許可を使用してシークレットが読み取られるため、AWS IoT Greengrass に取り出すアクセス許可のないシークレットを選択できます。命名規則を使用すると、デプロイエラーにつながるアクセス許可の競合を回避するのに役立ちます。

シークレット暗号化用のプライベートキーを指定する

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

AWS IoT Greengrass では、ハードウェアベースあるいはファイルシステムベース (デフォルト) の 2 種類のプライベートキーがサポートされています。詳細については、「シークレットの暗号化」を参照してください。

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

  1. /greengrass-root/config ディレクトリにある config.json ファイルを開きます。

    注記

    greengrass-root は、デバイスで AWS IoT Greengrass Core ソフトウェアがインストールされているパスを表します。通常、これは /greengrass ディレクトリです。

  2. crypto.principals.SecretsManager オブジェクトの privateKeyPath プロパティで、プライベートキーのパスを入力します。

    • プライベートキーがファイルシステムに保存されている場合は、キーへの絶対パスを指定します。次に例を示します。

      "SecretsManager" : { "privateKeyPath" : "file:///somepath/hash.private.key" }
    • プライベートキーがハードウェアセキュリティモジュール (HSM) に保存されている場合は、RFC 7512 PKCS#11 URI スキームを使用してパスを指定します。次に例を示します。

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

      詳細については、「AWS IoT Greengrass Core のハードウェアセキュリティ設定」を参照してください。

      注記

      現在、AWS IoT Greengrassのみサポートされます。PKCS #1 v1.5ハードウェアベースの秘密鍵を使用する場合、ローカルシークレットの暗号化と復号化のためのパディングメカニズム。ハードウェアベースの秘密鍵を手動で生成するためのベンダー提供の指示に従っている場合は、必ず PKCS #1 v1.5 を選択してください。AWS IoT Greengrassは、最適な非対称暗号化パディング (OAEP) をサポートしていません。

シークレットの値を取得することを AWS IoT Greengrass に許可する

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

この手順のみ実行するあなたが付与したい場合AWS IoT Greengrassカスタム権限をシークレットに追加したり、Greengrass サービスロールにAWSGreengrassResourceAccessRolePolicy管理ポリシー。AWSGreengrassResourceAccessRolePolicyで始まる名前を持つシークレットへのアクセスを許可しますGreengrass

  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 または名前を使用します。

  2. secretsmanager:GetSecretValue アクションを許可するインラインポリシーを追加します。手順については、以下を参照してください。IAM ポリシーの追加および削除()IAM ユーザーガイド

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretA-abc", "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretB-xyz" ] } ] }
    注記

    お客様が管理する AWS KMS キーを使用してシークレットを暗号化する場合は、Greengrass サービスロールで kms:Decrypt アクションも許可する必要があります。

Secrets Manager の IAM ポリシーの詳細については、「」を参照してください。の認証とアクセスコントロールAWS Secrets ManagerおよびIAM ポリシーまたはシークレットポリシーで使用できるアクション、リソース、およびコンテキストキーは、AWS Secrets Manager()AWS Secrets Managerユーザーガイド

以下の資料も参照してください。