コアデバイスが AWS サービスを操作できるように認証する - AWS IoT Greengrass

コアデバイスが AWS サービスを操作できるように認証する

AWS IoT Greengrass コアデバイスは、AWS IoT Core 認証情報プロバイダを使用して AWS サービスへの呼び出しを認証します。AWS IoT Core 認証情報プロバイダは、AWS リクエストを認証するためのユニークなデバイス ID として、デバイスが X.509 証明書を使用できるようにします。これにより、AWS IoT Greengrass コアデバイスに AWS アクセスキー ID とシークレットアクセスキーを保存する必要がなくなります。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS サービスへの直接呼び出しを認証する」を参照してください。

AWS IoT Greengrass コアソフトウェアを実行する際に、コアデバイスが必要とする 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 バケットへのアクセスを許可する」を参照してください。

  • AWS IoT ロールエイリアス: GreengrassV2TokenExchangeRoleAlias

    このロールエイリアスは IAM ロールを参照します。

詳細については、「ステップ 3: AWS IoT Greengrass Core ソフトウェアをインストールする」を参照してください。

既存のコアデバイスにロールエイリアスを設定することもできます。設定するには、Greengrass nucleus コンポーネントiotRoleAlias 設定パラメータを設定します。

この IAM ロールの一時的な AWS 認証情報を取得することで、カスタムコンポーネントで AWS 操作を実行することができるようになります。詳細については、「AWS サービスの操作」を参照してください。

コアデバイスに対するサービスロールのアクセス許可

このロールにより、次のサービスがロールを継承できます。

  • credentials.iot.amazonaws.com

AWS IoT Greengrass コアソフトウェアを使用してこのロールを作成すると、次のアクセス許可ポリシーを使用して、コアデバイスが AWS に接続し、ログを送信できるようにします。ポリシーの名前は、デフォルトで Access で終わる IAM ロールの名前になります。例えば、デフォルトの IAM ロール名を使用した場合には、このポリシーの名前は GreengrassV2TokenExchangeRoleAccess になります。

Greengrass nucleus v2.5.0 and later
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
v2.4.x
{ "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
{ "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 バケットへのアクセスを許可する

コアデバイスのロールは、デフォルトではコアデバイスが S3 バケットにアクセスすることを許可しません。S3 バケットにアーティファクトを持つコンポーネントをデプロイするには、コアデバイスがコンポーネントアーティファクトをダウンロードすることを許可する s3:GetObject アクセス許可を追加する必要があります。コアデバイスに新しいポリシーを追加することで、このアクセス許可を付与できます。

Amazon S3 のコンポーネントアーティファクトへのアクセスを許可するポリシーを追加するには

  1. component-artifact-policy.json という名前のファイルを作成して、次の JSON をファイルにコピーします。このポリシーは、S3 バケット内のすべてのファイルへのアクセスを許可します。DOC-EXAMPLE-BUCKET を S3 バケットの名前に置き換えて、コアデバイスにアクセスを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
  2. 次のコマンドを実行して、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 を使用して、次の手順で、このポリシーをコアデバイスのロールにアタッチします。

  3. 次のコマンドを実行して、ポリシーをコアデバイスのロールにアタッチします。GreengrassV2TokenExchangeRole を、AWS IoT Greengrass コアソフトウェアを実行したときに指定したロールの名前に置き換えます。その後、ポリシー 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 バケットにアップロードしたアーティファクトにアクセスできるようになります。