「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
AWS のサービスの直接呼び出しの認証
デバイスは、TLS 相互認証プロトコルを使用して AWS IoT Core に接続するために X.509 証明書を使用することができます。他の AWS サービスは証明書ベースの認証をサポートしていませんが、AWS 署名バージョン 4 形式.の AWS 認証情報を使用して呼び出すことができます。証明書バージョン 4 アルゴリズムは通常、発信者がアクセスキー ID およびシークレットアクセスキーを所持していることを要求します。 には、組み込みの AWS IoT CoreX.509 証明書を一意のデバイス ID として AWS リクエストを認証するために使用することを許可する認証情報プロバイダーがあります。これによって、デバイスにアクセスキー ID およびシークレットアクセスキーを保存する必要がなくなります。
認証情報プロバイダーは、X.509 証明書を使用して発信者を認証し、一時的で制限された権限のセキュリティトークンを発行します。このトークンは、すべての AWS リクエストに署名して認証するために使用できます。AWS リクエストを認証するこの方法では、AWS Identity and Access Management AWS Identity and Access Management) ロールIAMを作成して設定し、ロールに適切な ポリシーをアタッチすることが必要となります。これによって、認証情報プロバイダーは、ユーザーに代わってロールを引き受けることができます。IAMAWS IoT Core と IAM の詳細については、「 の Identity and Access ManagementAWS IoT.」を参照してください。
次の図は認証情報プロバイダーのワークフローを示しています。

-
AWS IoT Core デバイスは、認証情報プロバイダーにセキュリティトークンへの HTTPS リクエストを行います。このリクエストには、認証のためのデバイスの X.509 証明書が含まれています。
-
認証情報プロバイダーは AWS IoT Core 認証および認可モジュールにリクエストを転送して証明書を検証し、デバイスにセキュリティトークンをリクエストする権限があることを検証します。
-
証明書が有効であり、セキュリティトークンをリクエストする許可がある場合、AWS IoT Core 認証および認可モジュールは成功を返します。それ以外の場合は、デバイスに例外が送信されます。
-
証明書の検証が成功したら、認証情報プロバイダーは AWS Security Token Service (AWS STS) を呼び出して、そのために作成した IAM ロールを引き受けます。
-
AWS STS は、一時的で制限された権限のセキュリティトークンを認証情報プロバイダーに返します。
-
認証情報プロバイダーは、デバイスにセキュリティトークンを返します。
-
デバイスはこのセキュリティトークンを使用して、AWS 署名バージョン 4 で AWS リクエストに署名します。
-
リクエストされたサービスは IAM を呼び出して署名を検証し、認証情報プロバイダーに作成した IAM ロールにアタッチされたアクセスポリシーに対するリクエストを認可します。
-
IAM が署名の検証に成功してリクエストを認可したら、リクエストは成功します。それ以外の場合は、IAM は例外を送信します。
次のセクションでは、証明書を使用してセキュリティトークンを取得する方法を説明します。これは、すでにデバイスが登録され、そのデバイスに独自の証明書を作成して有効化していることを前提に記述されています。
証明書を使用してセキュリティトークンを取得する方法
-
デバイスに代わって認証情報プロバイダーが引き受ける IAM ロールを設定します。次の信頼ポリシーをロールにアタッチします。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "credentials.iot.amazonaws.com"}, "Action": "sts:AssumeRole" } }
呼び出す各 AWS サービスで、ロールにアクセスポリシーをアタッチします。認証情報プロバイダーは次のポリシー変数をサポートしています。
-
credentials-iot:ThingName
-
credentials-iot:ThingTypeName
-
credentials-iot:AwsCertificateId
デバイスが AWS サービスへのリクエストでモノの名前を提供すると、認証情報プロバイダーは
credentials-iot:ThingName
およびcredentials-iot:ThingTypeName
をコンテキスト変数としてセキュリティトークンに追加します。デバイスがリクエストでモノの名前を提供していなくても、認証情報プロバイダーはcredentials-iot:AwsCertificateId
をコンテキスト変数として提供します。x-amzn-iot-thingname
HTTP リクエストヘッダーの値としてモノの名前を渡します。上記の 3 つの変数は IAM ポリシーのみで機能し、AWS IoT Core ポリシーには使用できません。
-
-
次のステップ (ロールエイリアスの作成)を実行するユーザーに新しく作成したロールを に渡す権限があることを確認します。AWS IoT Core. 次のポリシーでは、AWS ユーザーに
iam:GetRole
とiam:PassRole
許可の両方を付与します。iam:GetRole
アクセス許可は、今作成したロールに関する情報をユーザーが取得できるようにします。iam:PassRole
アクセス許可は、別の AWS サービスにこのロールを渡す権限をユーザーに付与します。{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::
your aws account id
:role/your role name
" } } -
AWS IoT Core ロールエイリアスを作成します。AWS のサービスを直接呼び出すデバイスは、 に接続するときにどの ARN ロールを使用するかを知る必要があります。AWS IoT Core. ロールの ARN のロールをハードコーディングすることは、ロールの ARN が変わるたびにデバイスを更新する必要があるため、良いソリューションではありません。
CreateRoleAlias
API を使用してロールの ARN を指し示すロールエイリアスを作成することが、より優れたソリューションです。ロールの ARN が変更された場合には、ロールエイリアスを更新だけです。デバイスに変更を加える必要はありません。この API には以下のパラメータがあります。roleAlias
-
必須。ロールのエイリアスを識別する任意の文字列。これは、ロールエイリアスデータモデルのプライマリキーとして機能します。これには 1 ~ 128 文字を使用でき、英数字および =、@、- 記号のみを含めることができます。大文字および小文字のアルファベット文字を使用できます。
roleArn
-
必須。ロールエイリアスが参照するロールの ARN。
credentialDurationInSeconds
-
省略可能。認証情報が有効な時間 (秒単位) です。最小値は 900 秒 (15 分) です。最大値は 3,600 秒 (60 分) です。デフォルト値は 3,600 秒です。
注記 IAM ロールで指定された認証情報の有効期間は長くすることができますが、AWS IoT Core 認証情報プロバイダーが認証情報を発行すると、最大有効期間は 3,600 秒 (60 分) になります。
この API の詳細については、「CreateRoleAlias」を参照してください。
-
ポリシーをデバイス証明書にアタッチします。デバイス証明書にアタッチされているポリシーは、デバイスにそのロールを引き受ける権限を付与する必要があります。これを行うには、次の例のように、
iot:AssumeRoleWithCertificate
アクションへのアクセス許可をロールエイリアスに付与します。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"iot:AssumeRoleWithCertificate", "Resource":"arn:aws:iot:your region:your_aws_account_id:rolealias/your role alias" } ] }
-
認証情報プロバイダーにセキュリティトークンを取得する HTTPS リクエストを行います。以下の情報を提供します。
-
Certificate: これは、TLS 相互認証を介した HTTP リクエストであるため、リクエスト作成中に証明書およびプライベートキーをクライアントに提供する必要があります。 に証明書を登録したときに使用したのと同じ証明書およびプライベートキーを使用します。AWS IoT Core.
お使いのデバイスが AWS IoT Core (偽装サービスではなく)と通信していることを確認するには、「サーバー認証」を参照し、リンクから適切な CA 証明書をダウンロードしてデバイスにこれをコピーしてください。
-
: 認証情報プロバイダーに作成したロールエイリアスの名前。RoleAlias
-
: ThingName モノを登録したときに作成したモノの名前。AWS IoT Coreこれは、
x-amzn-iot-thingname
HTTP ヘッダーの値として渡されます。この値は、AWS IoT Core または IAM ポリシーのポリシー変数としてモノの属性を使用する場合にのみ必要となります。
AWS CLI で次のコマンドを実行して、AWS アカウントに認証情報プロバイダーエンドポイントを取得します。この API の詳細については、「DescribeEndpoint」を参照してください。
aws iot describe-endpoint --endpoint-type iot:CredentialProvider
次の JSON オブジェクトは、describe-endpoint コマンドの出力サンプルです。これには、セキュリティトークンをリクエストするために使用する
endpointAddress
が含まれています。{ "endpointAddress": "
your_aws_account_specific_prefix
.credentials.iot.your region
.amazonaws.com" }エンドポイントを使用して、セキュリティトークンを返す HTTPS リクエストを認証情報プロバイダーに作成します。次のコマンド例では、
curl
を使用していますが、任意の HTTP クライアントを使用できます。curl ‐‐cert
your certificate
--keyyour device certificate key pair
-H "x-amzn-iot-thingname:your thing name
" --cacert AmazonRootCA1.pem https://your endpoint
/role-aliases/your role alias
/credentialsこのコマンドは、
accessKeyId
、secretAccessKey
、sessionToken
および有効期限を含むセキュリティトークンオブジェクトを返します。次の JSON オブジェクトは、curl
コマンドの出力サンプルです。{"credentials":{"accessKeyId":"
access key
","secretAccessKey":"secret access key
","sessionToken":"session token
","expiration":"2018-01-18T09:18:06Z"}}続いて、
accessKeyId
、secretAccessKey
、およびsessionToken
値を使用して、AWS サービスへのリクエストに署名します。エンドツーエンドデモについては、AWS セキュリティブログAWS IoTの「認証情報プロバイダーを使用して、デバイスでハードコードされた AWS 認証の必要性を消去する方法」ブログ投稿を参照してください。 -