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

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

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

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

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

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

Amazon Cognito は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。Amazon Cognito の認証されていない アイデンティティプールを Amazon Location と組み合わせて使用すると、スコープが限定された一時的なAWS 認証情報をアプリケーションから取得できます。

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

注記

モバイルデベロッパー向けに、Amazon Location には iOS 用と Android 用の両方の Mobile Authentication SDK が用意されています。詳細については、以下の GitHub リポジトリを参照してください。

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

Amazon Cognito アイデンティティプールを作成して、認証されていないゲストが、Amazon Cognito コンソール、AWS CLI、またはAmazon Cognito API 経由でアプリケーションにアクセスできるようにすることができます。

重要

作成するプールは、使用している 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:referer は、認可されていない当事者から AWS にリクエストが直接行われることを防止するために使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツなど、認可されていないサードパーティーサイトで参照されることから保護するためにのみ、お客様に提供されています。詳細については、「AWS:referer」を参照してください。

    { "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:referer は、認可されていない当事者から AWS にリクエストが直接行われることを防止するために使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツなど、認可されていないサードパーティーサイトで参照されることから保護するためにのみ、お客様に提供されています。詳細については、「AWS:referrer」を参照してください。

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

    警告

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

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

    警告

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

    { "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/*" ] } } } ] }
    注記

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

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

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

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

例:

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

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

JavaScript で Amazon Cognito アイデンティティプールを使用する

次の例では、作成した認証されていないアイデンティティプールを認証情報と交換し、その認証情報を使用してマップリソース 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));

次のステップ