授予 Amazon Location Service 的存取 - Amazon Location Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

授予 Amazon Location Service 的存取

要使用亞馬遜定 Location Service,您AWS 帳戶必須授予對組成 Amazon 位置的資源和 API 的存取權。授權存取AWS 帳戶,使用使用AWS Identity and Access Management(IAM),並建立一個政策,以授予您所需資源的存取權。如需 IAM 和 Amazon Location 的詳細資訊,請參閱 Amazon Location ServiceAmazon Identity and Access Management Location Service

您也可以使用 Amazon Cognito 授予匿名存取權,或將您自己的個別身份驗證與 Amazon 定 Location Service 搭配使用。

允許未經驗證的訪客使用 Amazon Cognito 存取您的應用程式

您可以使用 Amazon Cognito 身分驗證作為直接使用的替代AWS Identity and Access Management(IAM) 具有前端軟體開發套件和直接的 HTTPS 要求。

您可以使用此形式的身分驗證,原因如下:

  • 未驗證的使用者— 如果您擁有匿名使用者的網站,則可以使用 Amazon Cognito 身分集區。如需詳細資訊,請參閱「」一節。允許未經驗證的訪客使用 Amazon Cognito 存取您的應用程式。

  • 自有的身分驗證— 如果您想要使用自己的身份驗證程序,或結合多種身份驗證方法,可以使用 Amazon Cognito 聯合身分。如需詳細資訊,請參閱「」聯合身分入門中的Amazon Cognito 開發人員指南

Amazon Cognito 為 Web 和行動應用程式提供身分驗證、授權和使用者管理。您可以將 Amazon Cognito 未經驗證的身分集區與 Amazon 位置搭配使用,作為應用程式擷取暫時、速度降低的方式AWS登入資料。

如需詳細資訊,請參閱「」使用者集區入門中的Amazon Cognito 開發人員指南

建立 Amazon Cognito 身分集區

您可以建立 Amazon Cognito 身分集區,以允許未經驗證的訪客透過 Amazon Cognito 主控台存取您的應用程式AWS CLI,或 Amazon Cognito API。

重要

您建立的儲存池必須在相同的儲存池AWS 帳戶和AWS區域作為 Amazon Location Service 資源,您正在使用。

您可以透過下列動作使用與未驗證身分角色相關聯的 IAM 政策:

  • geo:GetMap*

  • geo:SearchPlaceIndex*

  • 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 位置動作將不會產生任何作用,且未經驗證的身分將無法呼叫它們。

使用 Amazon Cognito 主控台建立身分集區

  1. 前往 Amazon Cognito 主控台

  2. 選擇 Manage Identity Pools (管理身分集區)

  3. 選擇建立新的身分集區,然後輸入身份集區的名稱。

  4. 來自未驗證的身分可折疊部分,選擇啟用未驗證的身分存取

  5. 選擇 Create Pool (建立集區)。

  6. 選擇您要搭配身分集區使用的 IAM 角色。

  7. Expand檢視詳細資訊

  8. UNTUND未驗證的身分,輸入角色名稱。

  9. 展開複製政策文件區段,然後選擇Edit (編輯)以新增您的政策。

  10. 新增政策以授權存取資源。

    以下是「地圖」、「地點」、「追蹤器」和「路線」的政策範例。若要將範例用於您自己的原則,請取代區域accountID預留位置:

    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" } ] }

    新增一個IAM 條件金融金與相符合aws:referer可讓您將瀏覽器對資源的存取限制為 URL 或 URL 首碼清單。下列範例會拒絕存取名為的映射資源RasterEsriImagery來自所有推薦網站,除外example.com

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

    如果您是使用七巧板若要顯示地圖,則不會使用 Maps API 傳回的樣式描述元、字符或精靈。而是透過指向包含樣式規則和必要資產的 .zip 檔案進行配置。下列政策會將唯讀存取權限授予對映資源,名為ExampleMap(針對)GetMapTileoperation.

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

    下列政策會將唯讀存取權限授予 Location Service 資源,名為ExamplePlaceIndex以按文字或位置搜尋地點。

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

    新增一個IAM 條件金融金與相符合aws:referer可讓您將瀏覽器對資源的存取限制為 URL 或 URL 首碼清單。下列範例會拒絕存取名為的地點索引資源ExamplePlaceIndex來自所有推薦網站,除外example.com

    { "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" } ] }

    新增一個IAM 條件金融金與相符合aws:referer可讓您將瀏覽器對資源的存取限制為 URL 或 URL 首碼清單。下列範例會拒絕存取名為的追蹤器資源ExampleTracker來自所有推薦網站,除外example.com

    { "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" } ] }

    新增一個IAM 條件金融金與相符合aws:referer可讓您將瀏覽器對資源的存取限制為 URL 或 URL 首碼清單。下列範例會拒絕存取名為的路由計算器ExampleCalculator來自所有推薦網站,除外example.com

    { "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 角色非常重要。

    使用aws:referer條件通過限制瀏覽器訪問 URL 或 URL 前綴列表來增加安全性。新增一個aws:referer條件也可能會限制使用時的測試localhost:URL。

  11. 選擇Allow以建立您的身分集區。

產生的身分集區遵循語法<region>:<GUID>.

例如:

us-east-1:54f2ba88-9390-498d-aaa5-0d97fb7ca3bd

如需 Amazon Location 範例,請參閱 Amazon Location 範例,請參閱Amazon LLocation Service

使用 Amazon Cognito 身分集區 JavaScript

以下示例交換您為憑據創建的未經身份驗證的身份池,然後用於獲取地圖資源的樣式描述符ExampleMap

const AWS = require("aws-sdk"); const credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: "<identity pool ID>" // e.g., us-east-1:d40a3a95-a6b5-4816-a15c-a15ac4f0930d }); const client = new AWS.Location({ credentials, region: AWS.config.region || "<region>" }); console.log(await client.getMapStyleDescriptor("ExampleMap").promise());
注意

從未驗證身分擷取的認證有效一個 hour

以下是在認證過期之前自動更新的函數範例。

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

後續步驟