Amazon Cognito を使用して、アプリケーションで認証されていないゲストアクセスを許可する方法 - Amazon Location Service

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

Amazon Cognito を使用して、アプリケーションで認証されていないゲストアクセスを許可する方法

フロントエンド SDKsとダイレクト HTTPS リクエストの両方で AWS Identity and Access Management (IAM) を直接使用する代わりに、Amazon Cognito 認証を使用できます。

以下の場合は、この認証形式を使用します。

  • 認証されていないユーザー — 匿名ユーザーがいるウェブサイトがある場合は、Amazon Cognito アイデンティティプールを使用できます。詳細については、「Amazon Cognito を使用して、アプリケーションで認証されていないゲストアクセスを許可する方法」セクションを参照してください。

  • 独自の認証 — 独自の認証プロセスを使用する場合や、複数の認証方法を組み合わせたい場合は、Amazon Cognito フェデレーテッド IDを使用できます。詳細については、「Amazon Cognito 開発者ガイド」の「フェデレーテッドアイデンティティの使用を開始する」を参照してください。

Amazon Cognito は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。アプリケーションがスコープダウンされた一時的な AWS 認証情報を取得する方法として、Amazon Cognito の認証されていない ID プールを Amazon Location で使用できます。

詳細については、「Amazon Cognito 開発者ガイド」の「ユーザープールの使用を開始する」を参照してください。

注記

モバイルデベロッパーの場合、Amazon Location は iOS と Android の両方用のモバイル認証 SDKs を提供しています。詳細については、次の github リポジトリを参照してください。

Amazon Cognito アイデンティティプールを作成する

Amazon Cognito ID プールを作成して、Amazon Cognito コンソール、、または Amazon CognitoAmazon Cognito APIs を介して AWS CLI、認証されていないゲストがアプリケーションにアクセスできるようにします。

重要

作成するプールは、使用している Amazon Location Service リソースと同じ AWS アカウント と AWS リージョンに存在する必要があります。

認証されていない ID ロールに関連付けられた IAM ポリシーは、以下のアクションで使用できます。

  • geo:GetMap*

  • geo:SearchPlaceIndex*

  • geo:GetPlace

  • geo:CalculateRoute*

  • geo:GetGeofence

  • geo:ListGeofences

  • geo:PutGeofence

  • geo:BatchDeleteGeofence

  • geo:BatchPutGeofence

  • geo:BatchEvaluateGeofences

  • geo:GetDevicePosition*

  • geo:ListDevicePositions

  • geo:BatchDeleteDevicePositionHistory

  • geo:BatchGetDevicePosition

  • geo:BatchUpdateDevicePosition

他の Amazon Location アクションを含めても効果はなく、認証されていない ID はそれらを呼び出すことができません。

Amazon Cognito コンソールを使用して、アイデンティティプールを作成するには

  1. Amazon Cognito コンソールに移動します。

  2. [アイデンティティプールの管理] を選択します。

  3. [新しいアイデンティティプールの作成] を選択し、アイデンティティプールの名前を入力します。

  4. 折りたたみ式の [認証されていない ID] セクションで、[認証されていない ID に対してアクセスを有効にする] を選択します。

  5. [プールの作成] を選択します。

  6. アイデンティティプールで使用する IAM ロールを選択します。

  7. [詳細を表示] を展開します。

  8. [認証されていない ID] に、ロール名を入力します。

  9. [ポリシードキュメントの表示] セクションを展開し、[編集] を選択してポリシーを追加します。

  10. リソースへのアクセスを許可するポリシーを追加します。

    マップ、場所、トラッカー、ルートのポリシー例を以下に示します。この例を独自のポリシーに使用するには、regionaccountID のプレースホルダーを置き換えてください。

    Maps policy example

    次のポリシーは、 という名前のマップリソースへの読み取り専用アクセスを許可しますExampleMap

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MapsReadOnly", "Effect": "Allow", "Action": [ "geo:GetMapStyleDescriptor", "geo:GetMapGlyphs", "geo:GetMapSprites", "geo:GetMapTile" ], "Resource": "arn:aws:geo:region:accountID:map/ExampleMap" } ] }

    aws:refererと一致する IAM 条件を追加すると、リソースへのブラウザアクセスを URL または URL プレフィックスのリストに制限できます。次の例では、RasterEsriImageryという名前のマップリソースへのアクセスは、example.comの Web サイトからのみ許可されます。

    警告

    aws:refererでは、アクセスを制限することはできますが、セキュリティメカニズムではありません。一般に知られている参照子のヘッダー値を含めるのは危険です。不正な当事者は、変更されたブラウザまたはカスタムブラウザを使用して任意の aws:referer 値を提供することができます。そのため、不正な当事者による直接 AWS リクエストの防止には aws:referer を使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツなど、不正なサードパーティーサイトで参照されることから保護するためにのみ、お客様に提供されています。詳細については、[AWS:参照子]を参照してください。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:GetMap*", "Resource": "arn:aws:geo:us-west-2:111122223333:map/RasterEsriImagery", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }

    Tangram を使用してマップを表示する場合、Maps API から返されるスタイル記述子、グリフ、スプライトは使用されません。代わりに、スタイルルールと必要なアセットを含む.zip ファイルを指して設定します。次のポリシーは、 GetMapTileオペレーションExampleMapの という名前のマップリソースへの読み取り専用アクセスを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MapsReadOnly", "Effect": "Allow", "Action": [ "geo:GetMapTile" ], "Resource": "arn:aws:geo:region:accountID:map/ExampleMap" } ] }
    Places policy example

    次のポリシーは、テキストまたは位置で場所を検索ExamplePlaceIndexするために、 という名前の場所インデックスリソースへの読み取り専用アクセスを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PlacesReadOnly", "Effect": "Allow", "Action": [ "geo:SearchPlaceIndex*", "geo:GetPlace" ], "Resource": "arn:aws:geo:region:accountID:place-index/ExamplePlaceIndex" } ] }

    aws:refererと一致する IAM 条件を追加すると、リソースへのブラウザアクセスを URL または URL プレフィックスのリストに制限できます。次の例では、 を除くすべての参照元ウェブサイトExamplePlaceIndexから、 という名前の場所インデックスリソースへのアクセスを拒否しますexample.com

    警告

    aws:refererでは、アクセスを制限することはできますが、セキュリティメカニズムではありません。一般に知られている参照子のヘッダー値を含めるのは危険です。不正な当事者は、変更されたブラウザまたはカスタムブラウザを使用して任意の aws:referer 値を提供することができます。そのため、不正な当事者による直接 AWS リクエストの防止には aws:referer を使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツなど、不正なサードパーティーサイトで参照されることから保護するためにのみ、お客様に提供されています。詳細については、[AWS:参照子]を参照してください。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:*", "Resource": "arn:aws:geo:us-west-2:111122223333:place-index/ExamplePlaceIndex", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }
    Trackers policy example

    次のポリシーは、デバイスの位置を更新ExampleTrackerするために、 という名前のトラッカーリソースへのアクセスを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "UpdateDevicePosition", "Effect": "Allow", "Action": [ "geo:BatchUpdateDevicePosition" ], "Resource": "arn:aws:geo:region:accountID:tracker/ExampleTracker" } ] }

    aws:refererと一致する IAM 条件を追加すると、リソースへのブラウザアクセスを URL または URL プレフィックスのリストに制限できます。次の例では、 を除くすべての参照元ウェブサイトExampleTrackerから という名前のトラッカーリソースへのアクセスを拒否しますexample.com

    警告

    aws:refererでは、アクセスを制限することはできますが、セキュリティメカニズムではありません。一般に知られている参照子のヘッダー値を含めるのは危険です。不正な当事者は、変更されたブラウザまたはカスタムブラウザを使用して任意の aws:referer 値を提供することができます。そのため、不正な当事者による直接 AWS リクエストの防止には aws:referer を使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツなど、不正なサードパーティーサイトで参照されることから保護するためにのみ、お客様に提供されています。詳細については、[AWS:参照子]を参照してください。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:GetDevice*", "Resource": "arn:aws:geo:us-west-2:111122223333:tracker/ExampleTracker", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }
    Routes policy example

    次のポリシーは、ルートを計算するExampleCalculatorために、 という名前のルート計算リソースへのアクセスを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "RoutesReadOnly", "Effect": "Allow", "Action": [ "geo:CalculateRoute" ], "Resource": "arn:aws:geo:region:accountID:route-calculator/ExampleCalculator" } ] }

    aws:refererと一致する IAM 条件を追加すると、リソースへのブラウザアクセスを URL または URL プレフィックスのリストに制限できます。次の例では、 を除くすべての参照元ウェブサイトExampleCalculatorから という名前のルート計算ツールへのアクセスを拒否しますexample.com

    警告

    aws:refererでは、アクセスを制限することはできますが、セキュリティメカニズムではありません。一般に知られている参照子のヘッダー値を含めるのは危険です。不正な当事者は、変更されたブラウザまたはカスタムブラウザを使用して任意の aws:referer 値を提供することができます。そのため、不正な当事者による直接 AWS リクエストの防止には aws:referer を使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツなど、不正なサードパーティーサイトで参照されることから保護するためにのみ、お客様に提供されています。詳細については、[AWS:参照子]を参照してください。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:*", "Resource": "arn:aws:geo:us-west-2:111122223333:route-calculator/ExampleCalculator", "Condition": { "StringLike": { "aws:referer": [ "https://example.com/*", "https://www.example.com/*" ] } } } ] }
    注記

    認証されていない ID プールはセキュリティで保護されていないインターネットサイトに公開することを目的としていますが、標準の期間限定 AWS 認証情報と交換されることに注意してください。

    認証されていないアイデンティティプールに関連付けられている IAM ロールの範囲を適切に設定することが重要です。

  11. [許可] を選択してアイデンティティプールを作成します。

作成されるアイデンティティプールは次の構文に従います。<region>:<GUID>.

例:

us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef

Amazon Location 固有のその他のポリシー例については、Amazon Location Service のアイデンティティベースのポリシーの例を参照してください。

での Amazon Cognito ID プールの使用 JavaScript

次の例では、作成した認証されていない ID プールを認証情報と交換し、それをマップリソース のスタイル記述子の取得に使用しますExampleMap

const AWS = require("aws-sdk"); const credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: "<identity pool ID>" // for example, us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef }); const client = new AWS.Location({ credentials, region: AWS.config.region || "<region>" }); console.log(await client.getMapStyleDescriptor("ExampleMap").promise());
注記

認証されていない ID から取得した認証情報の有効期限は、1 時間です。

以下は、有効期限が切れる前に認証情報を自動的に更新する関数の例です。

async function refreshCredentials() { await credentials.refreshPromise(); // schedule the next credential refresh when they're about to expire setTimeout(refreshCredentials, credentials.expireTime - new Date()); }

Amazon Location JavaScript 認証ヘルパーを使用して、この作業を簡略化することができます。これは認証情報の取得と更新の両方の代わりになります。この例では、 AWS SDK for JavaScript v3 を使用しています。

import { LocationClient, GetMapStyleDescriptorCommand } from "@aws-sdk/client-location"; import { withIdentityPoolId } from "@aws/amazon-location-utilities-auth-helper"; const identityPoolId = "<identity pool ID>"; // for example, us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef // Create an authentication helper instance using credentials from Cognito const authHelper = await withIdentityPoolId(identityPoolId); const client = new LocationClient({ region: "<region>", // The region containing both the identity pool and tracker resource ...authHelper.getLocationClientConfig(), // Provides configuration required to make requests to Amazon Location }); const input = { MapName: "ExampleMap", }; const command = new GetMapStyleDescriptorCommand(input); console.log(await client.send(command));

次のステップ