

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon Location Service 进行身份验证
<a name="access"></a>

要使用 Amazon Location Service，必须向用户授予访问构成Amazon Location 的资源和 API 的权限。您可以使用授予对资源的访问权限的三种策略：
+ **使用 API 密钥** – 要向未经身份验证的用户授予访问权限，您可以创建 API 密钥来授予对您的 Amazon Location Service 资源和操作的只读访问权限。在您不想对每个用户进行身份验证的情况下，这很有用。例如，Web 应用程序。

  有关 API 密钥的更多信息，请参阅 [使用 API 密钥进行身份验证](using-apikeys.md)。
+ **使用 Amazon Cognito**——API 密钥的替代方法是使用 Amazon Cognito 授予匿名访问权限。Amazon Cognito 允许您使用策略创建更丰富的授权，以定义未经身份验证的用户可以执行的操作。

  有关使用 Amazon Cognito 的更多信息，请参阅 [使用 Amazon Cognito 进行身份验证](authenticating-using-cognito.md)。
+ **使用 AWS Identity and Access Management（IAM）**– 要向使用 AWS IAM Identity Center 或 AWS Identity and Access Management（IAM）进行身份验证的用户授予访问权限，请创建允许访问所需资源的 IAM 策略。

  有关 IAM 和 Amazon Location 的更多信息，请参阅 [用于 AWS Identity and Access Management 进行身份验证](security-iam.md)。

# 选择身份验证方法
<a name="choose-method"></a>

在类似的场景中，API 密钥和 Amazon Cognito 的使用方式类似，那么您为什么会选择其中一个而不是另一个呢？ 以下列表重点介绍两者之间的一些区别：
+ **性能：**
  + **API 密钥：**相对较快
  + **Amazon Cognito：**相对较慢
+ **可用性：**
  + **API 密钥：**适用于地图、地点和路线的 Amazon Location API
  + **Amazon Cognito：**所有 API
+ **与其他身份验证方法结合使用？**
  + **API 密钥：**否
  + **Amazon Cognito：**是

**比较**
+ API 密钥仅适用于地图、地点和路线操作。Amazon Cognito 可用于对大多数 Amazon Location Service API 的访问进行身份验证。
+ 使用 API 密钥进行地图请求的性能通常比 Amazon Cognito 的类似场景要快。更简单的身份验证意味着在短时间内再次获得相同的地图图块时，可以减少往返服务的次数和缓存的请求。
+ 借助 Amazon Cognito，您可以使用自己的身份验证流程或组合多种身份验证方法，使用 Amazon Cognito 联合身份。

  有关更多信息，请参阅《Amazon Cognito 开发人员指南》中的[开始使用联合身份](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html)。

# 使用 API 密钥进行身份验证
<a name="using-apikeys"></a>

**注意**  
API 密钥仅适用于**地图**、**地点**和**路线**资源，您无法修改或创建这些资源。如果您的应用程序需要访问其他资源或为未经身份验证的用户执行操作，则可以使用 Amazon Cognito 与 API 密钥一起提供访问权限或取代 API 密钥。有关更多信息，请参阅 [使用 Amazon Cognito 进行身份验证](authenticating-using-cognito.md)。

*API 密钥*是一个密钥值，它与您 AWS 账户中的特定 Amazon Location Service 资源或 API 以及您可以对这些资源执行的特定操作相关联。您可以在应用程序中使用 API 密钥对这些资源的亚马逊地址进行未经身份验证 APIs 的调用。

例如，如果您将 API 密钥与资源 API 相关联，则使用 and/or 该 `GetPlace*` API 密钥的应用程序将能够调用特定的 API 密钥 APIs。相同的 API 密钥不会授予更改或更新任何与其无关 APIs 的资源或调用的权限。

当您在应用程序 APIs 中调用 Amazon Location Service 时，您通常以有权进行 API 调用的*经过身份验证的用户*进行此调用。但是，在某些情况下，您不希望对应用程序的每个用户进行身份验证。

例如，您可能希望任何使用该网站的人都可以使用显示您的营业地点的 Web 应用程序，无论他们是否登录。在这种情况下，一种替代方法是使用 API 密钥进行 API 调用。

有关何时使用 API 密钥的更多信息，请参阅 [API 密钥最佳实践](#api-keys-best-practices)。

有关使用 Amazon Location Service API 处理密钥的更多信息，请参阅《Amazon Location Service API 参考》**中的以下主题：
+ [CreateKey](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_CreateKey.html)
+ [DeleteKey](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_DeleteKey.html)
+ [DescribeKey](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_DescribeKey.html)
+ [ListKeys](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_ListKeys.html)

## 为 Amazon Location Service 创建 API 密钥
<a name="create-api-key"></a>

您可以通过亚马逊定位服务控制台或亚马逊定位 API 创建 API 密钥。 AWS CLI请按照以下适当步骤继续操作。

------
#### [ Amazon Location console ]

**使用 Amazon Location Service 控制台创建 API 密钥**

1. 在[https://console.aws.amazon.com/location](https://console.aws.amazon.com/location)中，从左侧菜单中选择 **API 密钥**。

1. 在 **API 密钥**页面上，选择**创建 API 密钥**。

1. 在**创建 API 密钥**页面中，填写以下信息：
   + **名称**——您的 API 密钥的名称，例如 `ExampleKey`。
   + **描述** – API 密钥的可选描述。
   + **资源** – 在下拉列表中，选择要使用此 API 密钥访问的 Amazon Location 资源。您可以通过选择添加资源来**添加多个资源**。
   + **操作**——指定您要使用此 API 密钥授权的操作。必须至少选择一个操作才能匹配所选的每种资源类型。例如，如果您选择了地点资源，则必须在**地点操作**下选择至少一个选项。
   + **到期时间** – （可选）添加 API 密钥的到期日期和时间。有关更多信息，请参阅 [API 密钥最佳实践](#api-keys-best-practices)。
   + **客户端限制** –（可选）添加一个或多个 Web 域或者一个或多个 Android 或 Apple 应用程序，以便在其中使用 API 密钥。例如，如果 API 密钥是为了允许应用程序在网站 `example.com` 上运行，那么您可以将 `*.example.com/` 设置为允许的引用站点。
   + **标签** – （可选）向 API 密钥添加标签。

1. 选择**创建 API 密钥**以创建 API 密钥。

1. 在 API 密钥的详情页面上，您可以看到有关您创建的 API 密钥的信息。选择**显示 API 密钥**以查看您在调用 Amazon Location 时使用的密钥值 APIs。密钥值的格式为 `v1.public.a1b2c3d4...`。

------
#### [ AWS CLI ]

1. 使用 [create-key](https://docs.aws.amazon.com/cli/latest/reference/location/create-key.html) 命令。以下示例创建了一个名为 `ExampleKey` 的 API 密钥，该密钥没有到期日期，并且可以访问单个地图资源。

   ```
   aws location \
     create-key \
     --key-name ExampleKey \
     --restrictions '{"AllowActions":["geo-maps:*"],"AllowResources":["arn:aws:geo-maps:region::provider/default"]}' \
     --no-expiry
   ```

1. 响应中包含访问应用程序中的资源时要使用的 API 密钥值。键值的格式为 `v1.public.a1b2c3d4...`。要了解有关使用 API 密钥渲染地图的更多信息，请参阅 [使用 API 密钥调用 Amazon Location API](#using-apikeys-in-api)。对 create-key 的响应看起来与以下内容类似：

   ```
   {
       "Key": "v1.public.a1b2c3d4...",
       "KeyArn": "arn:aws:geo:region:accountId:api-key/ExampleKey",
       "KeyName": "ExampleKey",
       "CreateTime": "2023-02-06T22:33:15.693Z"
   }
   ```

1. 您也可以在以后使用 `describe-key` 来查找键值。以下示例演示了如何在名为 `ExampleKey` 的 API 密钥上调用 `describe-key`。

   ```
   aws location describe-key \
       --key-name ExampleKey
   ```

------
#### [ Amazon Location API ]

使用 Amazon 营业地点的[CreateKey](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_CreateKey.html)操作 APIs。以下示例是一个 API 请求，用于创建名为 `ExampleKey` 的 API 密钥，该密钥没有到期日期，并且可以访问单个地图资源。

```
POST /metadata/v0/keys HTTP/1.1
Content-type: application/json
{
  "KeyName": "ExampleKey",
  "NoExpiry": true,
  "Restrictions": {
    "AllowActions": [
      "geo-places:*",
      "geo-routes:*",
      "geo-maps:*"
    ],
    "AllowResources": [
      "arn:aws:geo-places:Region::provider/default",
      "arn:aws:geo-routes:Region::provider/default",
      "arn:aws:geo-maps:Region::provider/default"
    ]
  }
}
```

响应中包含访问应用程序中的资源时要使用的 API 密钥值。密钥值的格式为 `v1.public.a1b2c3d4...`。

您也可以使用 [DescribeKey](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_DescribeKey.html) API 在以后查找密钥的密钥值。

------

## 使用 API 密钥调用 Amazon Location API
<a name="using-apikeys-in-api"></a>

创建 API 密钥后，您可以使用该密钥值在应用程序 APIs 中调用 Amazon Location。

------
#### [ API ]

支持 API 密钥的还有一个采用 API 密钥值的附加参数。 APIs 例如，如果您调用 `GetPlace` API，则可以填写[密钥](https://docs.aws.amazon.com/location/latest/APIReference/API_geoplaces_GetPlace.html)参数，如下所示

```
curl --request GET —url 'https://places.geo.eu-central-1.amazonaws.com/v2/place/{PLACEID}?key={APIKEY}&language=jp'
```

------
#### [ AWS CLI ]

在使用 `--key` 参数时，还应使用 `--no-sign-request` 参数，以避免使用 Sig v4 进行签名。

```
aws geo-places get-place --place-id $PLACEID --language jp --key $APIKEY
```

------
#### [ SDK (web) ]

使用以下代码：

```
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Display a map</title>
        <meta property="og:description" content="Initialize a map in an HTML element with MapLibre GL JS." />
        <meta charset='utf-8'>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel='stylesheet' href='https://unpkg.com/maplibre-gl@5.x/dist/maplibre-gl.css' />
        <script src='https://unpkg.com/maplibre-gl@5.x/dist/maplibre-gl.js'></script>
        <style>
            body { margin: 0; }
            #map { height: 100vh; }
        </style>
    </head>
    <body>
         
        <div id="map"></div>
        <script>
     
            const apiKey = "<api key>"; // check how to create api key for Amazon Location
            const mapStyle = "Standard";  // eg. Standard, Monochrome, Hybrid, Satellite  
            const awsRegion = "eu-central-1"; // eg. us-east-2, us-east-1, us-west-2, ap-south-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, ca-central-1, eu-central-1, eu-west-1, eu-west-2, eu-south-2, eu-north-1, sa-east-1
            const styleUrl = `https://maps.geo.${awsRegion}.amazonaws.com/v2/styles/${mapStyle}/descriptor?key=${apiKey}`;


            const map = new maplibregl.Map({
                container: 'map', // container id
                style: styleUrl, // style URL
                center: [25.24,36.31], // starting position [lng, lat]
                zoom: 2, // starting zoom
            });
        </script>
    </body>
</html>
```

------
#### [ SDK (iOS, Swift) ]

使用以下代码：

```
import UIKit
import MapLibre

class ViewController: UIViewController {
    let apiKey = "Enter your API key" // The previously-created API Key to use
    let regionName = "Enter your region name" // The service region - us-east-1, ap-south-1, etc
    var mapView: MLNMapView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        loadMap()
    }
    
    func loadMap() {
        let styleName = "Standard" // The map style - Standard, Monochrome, Hybrid, Satellite
        let colorName = "Light" // The color scheme - Light, Dark
        
        // The Amazon Location Service map style URL that MapLibre will use to render the maps.
        let styleURL = URL(string: "https://maps.geo.\(regionName).amazonaws.com/v2/styles/\(styleName)/descriptor?key=\(apiKey)&color-scheme=\(colorName)")

        // Initialize MapLibre        
        mapView = MLNMapView(frame: view.bounds)
        mapView.styleURL = styleURL
        mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        // Set the starting camera position and zoom level for the map
        mapView.setCenter(CLLocationCoordinate2D(latitude: 49.246559, longitude: -123.063554), zoomLevel: 10, animated: false)
        view.addSubview(mapView!)
    }
}
```

------
#### [ SDK (Android, Kotlin) ]

使用以下代码：

```
class MapActivity : Activity(), OnMapReadyCallback {

    private lateinit var mBinding: ActivityMapBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initializeMap(savedInstanceState)
    }

    private fun initializeMap(savedInstanceState: Bundle?) {
        // Init MapLibre
        // See the MapLibre Getting Started Guide for more details
        // https://maplibre.org/maplibre-native/docs/book/android/getting-started-guide.html
        MapLibre.getInstance(this@MapActivity)
        mBinding = ActivityMapBinding.inflate(layoutInflater)
        setContentView(mBinding.root)
        mBinding.mapView.onCreate(savedInstanceState)
        mBinding.mapView.getMapAsync(this)
    }

    override fun onMapReady(mapLibreMap: MapLibreMap) {
        mapLibreMap.setStyle(Style.Builder().fromUri(getMapUrl())) {
            // Set the starting camera position
            mapLibreMap.cameraPosition = CameraPosition.Builder().target(LatLng(49.246559, -123.063554)).zoom(10.0).build()
            mapLibreMap.uiSettings.isLogoEnabled = false
            mapLibreMap.uiSettings.attributionGravity = Gravity.BOTTOM or Gravity.END
            mapLibreMap.uiSettings.setAttributionDialogManager(AttributionDialogManager(this, mapLibreMap))
        }
    }

    // Return the Amazon Location Service map style URL
    // MapLibre will use this to render the maps.
    // awsRegion: The service region - us-east-1, ap-south-1, etc
    // mapStyle: The map style - Standard, Monochrome, Hybrid, Satellite  
    // API_KEY: The previously-created API Key to use
    // colorName: The color scheme to use - Light, Dark
    private fun getMapUrl() =
           "https://maps.geo.${getString(R.string.awsRegion)}.amazonaws.com/v2/styles/${getString(R.string.mapStyle)}/descriptor?key=${BuildConfig.API_KEY}&color-scheme=${getString(R.string.colorName)}"

    override fun onStart() {
        super.onStart()
        mBinding.mapView.onStart()
    }

    override fun onResume() {
        super.onResume()
        mBinding.mapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        mBinding.mapView.onPause()
    }

    override fun onStop() {
        super.onStop()
        mBinding.mapView.onStop()
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        mBinding.mapView.onSaveInstanceState(outState)
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mBinding.mapView.onLowMemory()
    }

    override fun onDestroy() {
        super.onDestroy()
        mBinding.mapView.onDestroy()
    }
}
```

------

## 按请求源限制 API 密钥的使用
<a name="restrict-usage-by-origin"></a>

您可以为 API 密钥配置客户端限制，从而仅限访问特定的域或移动应用程序。按域进行限制时，只有当 HTTP 引用站点标头与您提供的值相匹配时，才会对请求进行授权。按 Android 或 Apple 应用程序进行限制时，只有当应用程序标识符 HTTP 标头字段与您提供的值相匹配时，才会对请求进行授权。

欲了解更多信息，请参阅[ApiKeyRestrictions](https://docs.aws.amazon.com/location/latest/APIReference/API_geotags_ApiKeyRestrictions.html)《*亚马逊定位服务 API 参考*》。

**Android 应用程序标识符：**
+ `X-Android-Package`:

  Android 应用程序的唯一标识符，在应用程序的 `build.gradle` 文件中定义，通常采用反向域格式。

  示例：

  `com.mydomain.appname`
+ `X-Android-Cert`:

  用于签署 Android APK 的签名证书的 SHA-1 哈希值。

  示例：

  `BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75`

**Apple 应用程序标识符：**
+ `X-Apple-Bundle-Id `:

  Apple（iOS、macOS 等）应用程序的唯一标识符，在应用程序的 `Info.plist` 中定义，通常采用反向域格式。

  示例：

  `com.mydomain.appname`

## API 密钥最佳实践
<a name="api-keys-best-practices"></a>

API 密钥包含一个纯文本*值，该值*允许访问一个或多个资源或 APIs 您的资源 AWS 账户。如果有人复制了您的 API 密钥，他们就可以访问相同的资源和 APIs。为尽可能地减少潜在影响，请查看以下最佳实践：
+ **限制 API 密钥**

  为避免出现上述情况，最好限制您的 API 密钥。创建密钥时，您可以指定能够使用该密钥的域、Android 应用程序或 Apple 应用程序。
+ **管理 API 密钥的生命周期**

  您可以创建无限期有效的 API 密钥。但是，如果您想创建临时 API 密钥、定期轮换 API 密钥或撤销现有 API 密钥，则可以使用 *API 密钥过期时间*。
  + 您可以在创建或更新 API 密钥时为其设置过期时间。
  + API 密钥在到达其到期时间时将会自动停用。非活动密钥不能再用于发出请求。
  + 您可以通过删除过期时间，将临时密钥更改为永久密钥。
  + 您可以在 API 密钥停用 90 天后将其删除。
  + 如果您尝试停用过去七天内使用过的 API 密钥，系统会提示您确认是否要进行更改。

    如果您使用的是 Amazon Location Service API 或`true`，请将`ForceUpdate`参数设置为，否则您将收到错误消息。 AWS CLI

# 使用 Amazon Cognito 进行身份验证
<a name="authenticating-using-cognito"></a>

您可以使用 Amazon Cognito 身份验证作为直接使用 AWS Identity and Access Management (IAM) 用户进行前端 SDK 请求的替代方案。

Amazon Cognito 为您的 Web 和移动应用程序提供身份验证、授权和用户管理。您可以使用带有 Amazon Location 的 Amazon Cognito 未经身份验证的身份池作为应用程序检索限定范围内的临时凭证的一种方式。 AWS 

想要了解更多信息，请参阅 *Amazon Cognito 开发人员指南*中的[用户池入门](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-user-pools.html)。

出于以下原因，您可能需要使用这种形式的身份验证：
+ **未经身份验证的用户** – 如果您的网站包含匿名用户，则可以使用 Amazon Cognito 身份池。

  想要了解更多信息，请在 [使用 Amazon Cognito 进行身份验证](#authenticating-using-cognito) 上参阅本部分。
+ **您自己的身份验证** – 如果您想使用自己的身份验证流程或组合使用多种身份验证方法，则可以使用 Amazon Cognito 联合身份。

  有关更多信息，请参阅《Amazon Cognito 开发人员指南》**中的[开始使用联合身份](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html)。

## 使用 Amazon Cognito 和 Amazon Location Service
<a name="cognito-and-location"></a>

您可以将与未经身份验证的身份角色关联的 AWS Identity and Access Management (IAM) 策略用于以下操作：

------
#### [ Maps ]

地图操作列表
+ `geo-maps:GetStaticMap`
+ `geo-maps:GetTile`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo-maps:region::provider/default
```

------
#### [ Places ]

地点操作列表：
+ `geo-places:Geocode`
+ `geo-places:ReverseGeocode`
+ `geo-places:SearchNearby`
+ `geo-places:SearchText`
+ `geo-places:Autocomplete`
+ `geo-places:Suggest`
+ `geo-places:GetPlace`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo-places:region::provider/default
```

------
#### [ Routes ]

路线操作列表：
+ `geo-routes:CalculateRoutes`
+ `geo-routes:CalculateRouteMatrix`
+ `geo-routes:CalculateIsolines`
+ `geo-routes:OptimizeWaypoints`
+ `geo-routes:SnapToRoads`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo-routes:region::provider/default
```

------
#### [ Geofences and Trackers ]

地理围栏和跟踪器操作列表
+ `geo:GetGeofence`
+ `geo:ListGeofences`
+ `geo:PutGeofence`
+ `geo:BatchDeleteGeofence`
+ `geo:BatchPutGeofence`
+ `geo:BatchEvaluateGeofences`
+ `geo:GetDevicePosition*`
+ `geo:ListDevicePositions`
+ `geo:BatchDeleteDevicePositionHistory`
+ `geo:BatchGetDevicePosition`
+ `geo:BatchUpdateDevicePosition`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo:region:accountID:tracker/ExampleTracker
```

------
#### [ Previous version ]

先前版本操作列表：
+ `geo:GetMap*`
+ `geo:SearchPlaceIndexForText`
+ `geo:SearchPlaceIndexForPosition`
+ `geo:GetPlace`
+ `geo:CalculateRoute`
+ `geo:CalculateRouteMatrix`

**注意**  
上述操作的资源名称为：  
**地图**  

```
arn:aws:geo:region:accountID:map/ExampleMap
```
**地方**  

```
arn:aws:geo:region:accountID:place-index/ExamplePlaceIndex
```
**Routes**  

```
arn:aws:geo:region:accountID:route-calculator/ExampleCalculator
```

------

## 创建 Amazon Cognito 身份池
<a name="cognito-create-user-pool"></a>

您可以创建 Amazon Cognito 身份池，允许未经身份验证的访客通过 Amazon Cognito 控制台、或 Amazon Cognito 访问您的应用程序。 AWS CLI APIs

**重要**  
您创建的资源池必须与您正在使用的 Amazon Location Service 资源位于相同 AWS 账户 且所在的 AWS 区域相同。

------
#### [ Console ]

**使用 Amazon Cognito 控制台创建身份池**

1. 转到 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)。

1. 选择 **Manage Identity Pools**（管理身份池）。

1. 选择**创建新身份池**，然后输入身份池的名称。

1. 从**未经验证的身份**可折叠部分中，选择**启用未经验证的身份的访问权限**。

1. 选择**创建池**。

1. 选择您希望用于身份池的 IAM 角色。

1. 展开**查看详情**。

1. 在**未经身份验证的身份**下，输入角色名称。

1. 展开**查看策略文档**部分，然后选择**编辑**以添加您的策略。

1. 添加您的策略来授予对您的资源的访问权限。
**注意**  
请参阅上面的 [使用 Amazon Cognito 和 Amazon Location Service](#cognito-and-location)部分了解操作列表。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
     Sid": "RoutesReadOnly",
     Effect": "Allow",
     Action": [
           // add comma separated value from the previous section
         ],
     Resource": "value from previous section"
       }
     ]
   }
   ```

1. 选择**允许**以创建您的身份池。

------

## 在 Web 中使用 Amazon Cognito 身份池
<a name="identity-pool-js"></a>

以下示例将您创建的未经身份验证的身份池交换为凭证，然后使用这些凭证调用 `CalculateIsolines`。为了简化这项工作，该示例使用 Amazon Location [如何使用身份验证帮助程序](how-to-auth-helper.md) 步骤。这可以代替获取凭证和刷新凭证。

此示例使用适用于 JavaScript v3 的 AWS SDK。

```
import { GeoRoutesClient, CalculateIsolinesCommand , } from "@aws-sdk/client-geo-routes"; // ES Modules import
import { withIdentityPoolId } from "@aws/amazon-location-utilities-auth-helper";

const identityPoolId = "<identity pool ID>"; // for example, us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef

const authHelper = await withIdentityPoolId(identityPoolId);

const client = new GeoRoutesClient({
    ...authHelper.getClientConfig(),
    region: "<region>", // The region containing the identity pool
});

const input = {
    DepartNow: true,
    TravelMode: "Car",
    Origin: [-123.12327, 49.27531],
    Thresholds: {
        Time: [5, 10, 30],
    },
};

const command = new CalculateIsolinesCommand(input);
const response = await client.send(command);

console.log(JSON.stringify(response, null, 2))
```

# 用于 AWS Identity and Access Management 进行身份验证
<a name="security-iam"></a>





AWS Identity and Access Management (IAM) AWS 服务 可帮助管理员安全地控制对 AWS 资源的访问权限。IAM 管理员控制谁可以*通过身份验证*（登录）和*获得授权*（具有权限）来使用 Amazon Location 资源。您可以使用 IAM AWS 服务 ，无需支付额外费用。

**Topics**
+ [受众](#security_iam_audience)
+ [使用身份进行身份验证](#security_iam_authentication)
+ [使用策略管理访问](#security_iam_access-manage)
+ [Amazon Location Service 如何与 IAM 协同工作](#security_iam_service-with-iam)
+ [Amazon Location Service 如何处理未经身份验证的用户](#security_iam_unauthenticated-users)
+ [Amazon Location Service 基于身份的策略示例](#security_iam_id-based-policy-examples)
+ [Amazon Location Service 身份和访问权限故障排查](#security_iam_troubleshoot)

## 受众
<a name="security_iam_audience"></a>

您的使用方式 AWS Identity and Access Management (IAM) 因您的角色而异：
+ **服务用户**：如果您无法访问功能，请从管理员处请求权限（请参阅[Amazon Location Service 身份和访问权限故障排查](#security_iam_troubleshoot)）
+ **服务管理员**：确定用户访问权限并提交权限请求（请参阅[Amazon Location Service 如何与 IAM 协同工作](#security_iam_service-with-iam)）
+ **IAM 管理员**：编写用于管理访问权限的策略（请参阅[Amazon Location Service 基于身份的策略示例](#security_iam_id-based-policy-examples)）

## 使用身份进行身份验证
<a name="security_iam_authentication"></a>

身份验证是您 AWS 使用身份凭证登录的方式。您必须以 IAM 用户身份进行身份验证 AWS 账户根用户，或者通过担任 IAM 角色进行身份验证。

您可以使用来自身份源的证书 AWS IAM Identity Center （例如（IAM Identity Center）、单点登录身份验证或 Google/Facebook 证书，以联合身份登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问， AWS 提供 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 root 用户
<a name="security_iam_authentication-rootuser"></a>

 创建时 AWS 账户，首先会有一个名为 AWS 账户 *root 用户的*登录身份，该身份可以完全访问所有资源 AWS 服务 和资源。我们强烈建议不要使用根用户进行日常任务。有关需要根用户凭证的任务，请参阅《IAM 用户指南》**中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 联合身份
<a name="security_iam_authentication-federated"></a>

作为最佳实践，要求人类用户使用与身份提供商的联合身份验证才能 AWS 服务 使用临时证书进行访问。

*联合身份是指*来自您的企业目录、Web 身份提供商的用户 Directory Service ，或者 AWS 服务 使用来自身份源的凭据进行访问的用户。联合身份代入可提供临时凭证的角色。

要集中管理访问权限，建议使用。 AWS IAM Identity Center有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### IAM 用户和群组
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅 *IAM 用户指南*[中的要求人类用户使用身份提供商的联合身份验证才能 AWS 使用临时证书进行访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来代入角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用策略管理访问
<a name="security_iam_access-manage"></a>

您可以 AWS 通过创建策略并将其附加到 AWS 身份或资源来控制中的访问权限。策略定义了与身份或资源关联时的权限。 AWS 在委托人提出请求时评估这些政策。大多数策略都以 JSON 文档的 AWS 形式存储在中。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略
<a name="security_iam_access-manage-resource-based-policies"></a>

基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用 IAM 中的 AWS 托管策略。

### 其他策略类型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支持其他策略类型，这些策略类型可以设置更常见的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略 (SCPs)**-在中指定组织或组织单位的最大权限 AWS Organizations。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略 (RCPs)**-设置账户中资源的最大可用权限。有关更多信息，请参阅《*AWS Organizations 用户指南》*中的[资源控制策略 (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型
<a name="security_iam_access-manage-multiple-policies"></a>

当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解在涉及多种策略类型时如何 AWS 确定是否允许请求，请参阅 *IAM 用户指南*中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

## Amazon Location Service 如何与 IAM 协同工作
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理对 Amazon Location 的访问权限之前，您应该了解哪些 IAM 功能可用于 Amazon Location。






**可以与 Amazon Location Service 结合使用的 IAM 功能**  

| IAM 功能 | Amazon Location 支持 | 
| --- | --- | 
|  [Amazon Location 基于身份的策略](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [基于资源的策略](#security_iam_service-with-iam-resource-based-policies)  |   否   | 
|  [策略操作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [策略资源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [策略条件键（特定于服务）](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACLs](#security_iam_service-with-iam-acls)  |   否   | 
|  [ABAC（策略中的标签）](#security_iam_service-with-iam-tags)  |   是  | 
|  [临时凭证](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [主体权限](#security_iam_service-with-iam-principal-permissions)  |   否   | 
|  [服务角色](#security_iam_service-with-iam-roles-service)  |   否   | 
|  [服务关联角色](#security_iam_service-with-iam-roles-service-linked)  |   否   | 

要全面了解 Amazon Location 和其他 AWS 服务如何与大多数 IAM 功能配合使用，请参阅 [IAM *用户指南中与 IAM* 配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

### Amazon Location 基于身份的策略
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支持基于身份的策略：**是

基于身份的策略是可附加到身份（如 IAM 用户、用户组或角色）的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。要了解可在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素引用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

#### Amazon Location 基于身份的策略示例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



要查看 Amazon Location 基于身份的策略的示例，请参阅 [Amazon Location Service 基于身份的策略示例](#security_iam_id-based-policy-examples)。

### Amazon Location 内基于资源的策略
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支持基于资源的策略：**否 

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源，策略定义指定主体可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。委托人可以包括账户、用户、角色、联合用户或 AWS 服务。

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

### Amazon Location 的策略操作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支持策略操作：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。



有关 Amazon Location 操作的列表，请参阅*《服务授权参考》*中的 [Amazon Location Service 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-actions-as-permissions)。

Amazon Location 中的策略操作在操作前面使用以下前缀：

```
geo
```

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": [
      "geo:action1",
      "geo:action2"
         ]
```





您也可以使用通配符（\$1）指定多个操作。例如，要指定以单词 `Get` 开头的所有操作，包括以下操作：

```
"Action": "geo:Get*"
```

要查看 Amazon Location 基于身份的策略的示例，请参阅 [Amazon Location Service 基于身份的策略示例](#security_iam_id-based-policy-examples)。

### Amazon Location 的策略资源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支持策略资源：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

要查看亚马逊定位资源类型及其列表 ARNs，请参阅[*服务授权参考*中的 Amazon Location Service 定义的资源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-resources-for-iam-policies)。要了解您可以使用哪些操作指定每个资源的 ARN，请参阅 [Amazon Location Service 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-actions-as-permissions)。





要查看 Amazon Location 基于身份的策略的示例，请参阅 [Amazon Location Service 基于身份的策略示例](#security_iam_id-based-policy-examples)。

### Amazon Location 的策略条件键
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支持特定于服务的策略条件键：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

要查看 Amazon Location 条件键的列表，请参阅*《服务授权参考》*中的 [Amazon Location Service 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-policy-keys)。要了解您可以对哪些操作和资源使用条件键，请参阅 [Amazon Location Service 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-actions-as-permissions)。

Amazon Location 支持条件键，允许您在政策声明中允许或拒绝访问特定地理围栏或设备。以下条件键可用于：
+ `geo:GeofenceIds` 用于地理围栏操作。类型是 `ArrayOfString`。
+ `geo:DeviceIds` 用于跟踪器操作。类型是 `ArrayOfString`。

以下操作可在您的 IAM policy 里与 `geo:GeofenceIds` 操作配合使用：
+ `BatchDeleteGeofences`
+ `BatchPutGeofences`
+ `GetGeofence`
+ `PutGeofence`

以下操作可在您的 IAM policy 里与 `geo:DeviceIds` 操作配合使用：
+ `BatchDeleteDevicePositionHistory`
+ `BatchGetDevicePosition`
+ `BatchUpdateDevicePosition`
+ `GetDevicePosition`
+ `GetDevicePositionHistory`

**注意**  
您不能将这些条件键与 `BatchEvaluateGeofences`、`ListGeofences` 或 `ListDevicePosition` 操作配合使用。

要查看 Amazon Location 基于身份的策略的示例，请参阅 [Amazon Location Service 基于身份的策略示例](#security_iam_id-based-policy-examples)。

### ACLs 在亚马逊所在地
<a name="security_iam_service-with-iam-acls"></a>

**支持 ACLs：**否 

访问控制列表 (ACLs) 控制哪些委托人（账户成员、用户或角色）有权访问资源。 ACLs 与基于资源的策略类似，尽管它们不使用 JSON 策略文档格式。

### 使用 Amazon Location 的 ABAC
<a name="security_iam_service-with-iam-tags"></a>

**支持 ABAC（策略中的标签）：**是

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于称为标签的属性来定义权限。您可以将标签附加到 IAM 实体和 AWS 资源，然后设计 ABAC 策略以允许在委托人的标签与资源上的标签匹配时进行操作。

要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。

如果某个服务对于每种资源类型都支持所有这三个条件键，则对于该服务，该值为**是**。如果某个服务仅对于部分资源类型支持所有这三个条件键，则该值为**部分**。

有关 ABAC 的更多信息，请参阅《IAM 用户指南》**中的[使用 ABAC 授权定义权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。要查看设置 ABAC 步骤的教程，请参阅《IAM 用户指南》**中的[使用基于属性的访问权限控制（ABAC）](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

有关标记 Amazon Location 资源的更多信息，请参阅 [如何使用标签](manage-resources.md#manage-resources_how-to)。

要查看基于身份的策略（用于根据资源上的标签来限制对该资源的访问）的示例，请参阅 [基于标签控制对资源的访问](#security_iam_tag-based-policy-example)。

### 将临时凭证用于 Amazon Location
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支持临时凭证：**是

临时证书提供对 AWS 资源的短期访问权限，并且是在您使用联合身份或切换角色时自动创建的。 AWS 建议您动态生成临时证书，而不是使用长期访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)和[使用 IAM 的。AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)

### Amazon Location 的跨服务主体权限
<a name="security_iam_service-with-iam-principal-permissions"></a>

**支持转发访问会话（FAS）：**否 

 转发访问会话 (FAS) 使用调用主体的权限 AWS 服务，再加上 AWS 服务 向下游服务发出请求的请求。有关发出 FAS 请求时的策略详情，请参阅[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

### Amazon Location 的服务角色
<a name="security_iam_service-with-iam-roles-service"></a>

**支持服务角色：**否 

 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
更改服务角色的权限可能会破坏 Amazon Location 的功能。仅当 Amazon Location 提供相关指导时才编辑服务角色。

### Amazon Location 的服务相关角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支持服务相关角色：**否 

 服务相关角色是一种与服务相关联的 AWS 服务服务角色。服务可以代入代表您执行操作的角色。服务相关角色出现在您的中 AWS 账户 ，并且归服务所有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

有关创建或管理服务相关角色的详细信息，请参阅[能够与 IAM 搭配使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。在表中查找**服务相关角色**列中包含 `Yes` 的表。选择**是**链接以查看该服务的服务相关角色文档。

## Amazon Location Service 如何处理未经身份验证的用户
<a name="security_iam_unauthenticated-users"></a>

使用 Amazon Location Service 的许多场景，包括在网络上或移动应用程序中显示地图，都需要允许尚未使用 IAM 登录的用户进行访问。对于这些未经身份验证的场景，您有两种选择。
+ **使用 API 密钥** – 要向未经身份验证的用户授予访问权限，您可以创建 API 密钥来授予对您的 Amazon Location Service 资源的只读访问权限。在您不想对每个用户进行身份验证的情况下，这很有用。例如，Web 应用程序。有关 API 密钥的更多信息，请参阅 [使用 API 密钥进行身份验证](using-apikeys.md)。
+ **使用 Amazon Cognito** – API 密钥的替代方法是使用 Amazon Cognito 授予匿名访问权限。Amazon Cognito 允许您使用 IAM policy 创建更丰富的授权，以定义未经身份验证的用户可以执行的操作。有关使用 Amazon Cognito 的更多信息，请参阅 [在 Web 中使用 Amazon Cognito 身份池](authenticating-using-cognito.md#identity-pool-js)。

有关向未经身份验证的用户提供访问权限的概述，请参阅 [使用 Amazon Location Service 进行身份验证](access.md)。

## Amazon Location Service 基于身份的策略示例
<a name="security_iam_id-based-policy-examples"></a>

默认情况下，用户和角色没有创建或修改 Amazon Location 资源的权限。要授予用户对所需资源执行操作的权限，IAM 管理员可以创建 IAM 策略。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

有关 Amazon Location 定义的操作和资源类型（包括每种资源类型的格式）的详细信息，请参阅《[*服务授权参考*》中的 Amazon Location Service 的操作、资源和条件密钥](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html)。 ARNs 

**Topics**
+ [策略最佳实践](#security_iam_service-with-iam-policy-best-practices)
+ [使用 Amazon Location 控制](#security_iam_id-based-policy-examples-console)
+ [允许用户查看他们自己的权限](#security_iam_id-based-policy-examples-view-own-permissions)
+ [在策略中使用 Amazon Location Service 资源](#security_iam_id-based-policy-examples-using-resources)
+ [更新设备位置的权限](#security_iam_id-based-policy-examples-update-device-positions)
+ [跟踪器资源的只读策略](#security_iam_id-based-policy-examples-read-only-trackers)
+ [创建地理围栏的策略](#security_iam_id-based-policy-examples-create-geofences)
+ [地理围栏的只读策略](#security_iam_id-based-policy-examples-read-only-geofences)
+ [渲染地图资源的权限](#security_iam_id-based-policy-examples-get-map-tiles)
+ [允许搜索操作的权限](#security_iam_id-based-policy-examples-search-for-place)
+ [路线计算器的只读策略](#security_iam_id-based-policy-examples-calculate-route)
+ [根据条件键控制资源访问权限](#security_iam_condition-key-example)
+ [基于标签控制对资源的访问](#security_iam_tag-based-policy-example)

### 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 Amazon Location 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **开始使用 AWS 托管策略并转向最低权限权限** — 要开始向用户和工作负载授予权限，请使用为许多常见用例授予权限的*AWS 托管策略*。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果服务操作是通过特定 AWS 服务的（例如）使用的，则也可以使用条件来授予对服务操作的访问权限 CloudFormation。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证 (MFA**)-如果 AWS 账户您的场景需要 IAM 用户或根用户，请启用 MFA 以提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

### 使用 Amazon Location 控制
<a name="security_iam_id-based-policy-examples-console"></a>

要访问 Amazon Location Service 控制台，您必须具有一组最低的权限。这些权限必须允许您列出和查看有关您的 Amazon Location 资源的详细信息 AWS 账户。如果创建比必需的最低权限更为严格的基于身份的策略，对于附加了该策略的实体（用户或角色），控制台将无法按预期正常运行。

对于仅调用 AWS CLI 或 AWS API 的用户，您无需为其设置最低控制台权限。相反，只允许访问与其尝试执行的 API 操作相匹配的操作。

为确保用户和角色可以使用 Amazon Location 控制台，请将以下策略添加到实体上。有关更多信息，请参阅《IAM 用户指南》**中的[为用户添加权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)。

以下政策允许访问 Amazon Location Service 控制台，以便能够在您的 AWS 账户中创建、删除、列出和查看有关 Amazon Location 资源的详细信息。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GeoPowerUser",
      "Effect": "Allow",
      "Action": [
        "geo:*",
        "geo-maps:*",
        "geo-places:*",
        "geo-routes:*"
      ],
      "Resource": "*"
    }
  ]
}
```

或者，您可以授予只读权限以简化只读访问。使用只读权限时，如果用户尝试写入操作（例如创建或删除资源），则会显示一条错误消息。有关示例，请参阅 [跟踪器资源的只读策略](#security_iam_id-based-policy-examples-read-only-trackers)。

### 允许用户查看他们自己的权限
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用 AWS CLI 或 AWS API 以编程方式完成此操作的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

### 在策略中使用 Amazon Location Service 资源
<a name="security_iam_id-based-policy-examples-using-resources"></a>

Amazon Location Service 对资源使用以下前缀：


**Amazon Location 资源前缀**  

| 资源 | 资源前缀 | 
| --- | --- | 
| 地图资源 | map | 
| 放置资源 | place-index | 
| 路线资源 | route-calculator | 
| 跟踪器资源 | tracker | 
| 地理围栏集合资源 | geofence-collection | 

使用下面的 ARN 语法：

```
arn:Partition:geo:Region:Account:ResourcePrefix/ResourceName
```

有关格式的更多信息 ARNs，请参阅 [Amazon 资源名称 (ARNs) 和 AWS 服务命名空间](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)。

**示例**
+ 使用以下 ARN 允许访问指定的地图资源。

  ```
  "Resource": "arn:aws:geo:us-west-2:account-id:map/map-resource-name"
  ```
+ 要指定对属于特定账户的所有 `map` 资源的访问，使用通配符（\$1）：

  ```
  "Resource": "arn:aws:geo:us-west-2:account-id:map/*"
  ```
+ 无法对特定资源执行某些 Amazon Location 操作，例如用于创建资源的操作。在这些情况下，您必须使用通配符（\$1)。

  ```
  "Resource": "*"
  ```

要查看亚马逊定位资源类型及其列表 ARNs，请参阅[*服务授权参考*中的 Amazon Location Service 定义的资源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-resources-for-iam-policies)。要了解您可以使用哪些操作指定每个资源的 ARN，请参阅 [Amazon Location Service 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlocation.html#amazonlocation-actions-as-permissions)。

### 更新设备位置的权限
<a name="security_iam_id-based-policy-examples-update-device-positions"></a>

 要更新多个跟踪器的设备位置，您需要向用户授予访问您的一个或多个跟踪器资源的权限。您还希望允许用户更新一批设备位置。

在此示例中，除了授予对*Tracker1*和*Tracker2*资源的访问权限外，以下策略还授予对*Tracker1*和*Tracker2*资源使用`geo:BatchUpdateDevicePosition`操作的权限。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UpdateDevicePositions",
      "Effect": "Allow",
      "Action": [
        "geo:BatchUpdateDevicePosition"
      ],
      "Resource": [
        "arn:aws:geo:us-west-2:account-id:tracker/Tracker1",
        "arn:aws:geo:us-west-2:account-id:tracker/Tracker2"
      ]
    }
  ]
}
```

如果您想限制用户只能更新特定设备的设备位置，则可以为该设备 ID 添加条件键。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UpdateDevicePositions",
      "Effect": "Allow",
      "Action": [
        "geo:BatchUpdateDevicePosition"
      ],
      "Resource": [
        "arn:aws:geo:us-west-2:account-id:tracker/Tracker1",
        "arn:aws:geo:us-west-2:account-id:tracker/Tracker2"
      ],
      "Condition":{
        "ForAllValues:StringLike":{
          "geo:DeviceIds":[
            "deviceId"
          ]
        }
      }
    }
  ]
}
```

### 跟踪器资源的只读策略
<a name="security_iam_id-based-policy-examples-read-only-trackers"></a>

要为 AWS 账户中的所有跟踪器资源创建只读政策，您需要授予对所有跟踪器资源的访问权限。您还需要授予用户访问操作的权限，这些操作允许他们获取多台设备的设备位置，从一台设备获取设备位置并获取位置历史记录。

在这个示例中，以下策略授予对以下操作的权限：
+ `geo:BatchGetDevicePosition` 检索多个设备的位置。
+ `geo:GetDevicePosition` 检索单个设备的位置。
+ `geo:GetDevicePositionHistory` 检索设备的位置历史记录。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetDevicePositions",
      "Effect": "Allow",
      "Action": [
        "geo:BatchGetDevicePosition",
        "geo:GetDevicePosition",
        "geo:GetDevicePositionHistory"
      ],
      "Resource": "arn:aws:geo:us-west-2:account-id:tracker/*"
    }
  ]
}
```

### 创建地理围栏的策略
<a name="security_iam_id-based-policy-examples-create-geofences"></a>

要创建允许用户创建地理围栏的策略，您需要向允许用户在地理围栏集合上创建一个或多个地理围栏的特定操作授予访问权限。

以下政策授予对以下操作的权限*Collection*：
+ `geo:BatchPutGeofence` 创建多个地理围栏。
+ `geo:PutGeofence` 创建单个地理围栏。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateGeofences",
      "Effect": "Allow",
      "Action": [
        "geo:BatchPutGeofence",
        "geo:PutGeofence"
      ],
      "Resource": "arn:aws:geo:us-west-2:account-id:geofence-collection/Collection"
    }
  ]
}
```

### 地理围栏的只读策略
<a name="security_iam_id-based-policy-examples-read-only-geofences"></a>

要为存储在 AWS 账户地理围栏集合中的地理围栏创建只读策略，您需要授予访问从存储地理围栏的地理围栏集合中读取的操作的访问权限。

以下政策授予对以下操作的权限*Collection*：
+ `geo:ListGeofences` 列出指定地理围栏集合中的地理围栏。
+ `geo:GetGeofence` 从地理围栏集合中检索地理围栏集合。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetGeofences",
      "Effect": "Allow",
      "Action": [
        "geo:ListGeofences",
        "geo:GetGeofence"
      ],
      "Resource": "arn:aws:geo:us-west-2:account-id:geofence-collection/Collection"
    }
  ]
}
```

### 渲染地图资源的权限
<a name="security_iam_id-based-policy-examples-get-map-tiles"></a>

要授予足够的权限来渲染地图，你需要授予对地图图块、精灵、字形和样式描述符的访问权限：
+ `geo:GetMapTile` 检索用于在地图上有选择地渲染要素的地图图块。
+ `geo:GetMapSprites` 检索 PNG 精灵表和描述其中的偏移量的相应的 JSON 文档。
+ `geo:GetMapGlyphs` 检索用于显示文本的字形。
+ `geo:GetMapStyleDescriptor` 检索地图的样式描述符，其中包含渲染规则。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GetTiles",
      "Effect": "Allow",
      "Action": [
        "geo:GetMapTile",
        "geo:GetMapSprites",
        "geo:GetMapGlyphs",
        "geo:GetMapStyleDescriptor"
      ],
      "Resource": "arn:aws:geo:us-west-2:account-id:map/Map"
    }
  ]
}
```

### 允许搜索操作的权限
<a name="security_iam_id-based-policy-examples-search-for-place"></a>

要创建允许搜索操作的政策，您首先需要授予对 AWS 账户中地点索引资源的访问权限。您还需要授予访问权限，这些操作允许用户通过地理编码使用文本进行搜索，并通过反向地理编码使用位置进行搜索。

在此示例中，除了授予访问权限外*PlaceIndex*，以下策略还授予对以下操作的权限：
+ `geo:SearchPlaceIndexForPosition` 允许您搜索给定位置附近的地点或兴趣点。
+ `geo:SearchPlaceIndexForText` 允许您使用自由格式文本搜索地址、名称、城市或地区。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Search",
      "Effect": "Allow",
      "Action": [
        "geo:SearchPlaceIndexForPosition",
        "geo:SearchPlaceIndexForText"
      ],
      "Resource": "arn:aws:geo:us-west-2:account-id:place-index/PlaceIndex"
    }
  ]
}
```

### 路线计算器的只读策略
<a name="security_iam_id-based-policy-examples-calculate-route"></a>

您可以创建只读策略，允许用户访问路线计算器资源来计算路线。

在此示例中，除了授予访问权限外*ExampleCalculator*，以下策略还授予对以下操作的权限：
+ `geo:CalculateRoute` 计算给定出发位置、目的地位置和路径点位置列表的路线。

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

### 根据条件键控制资源访问权限
<a name="security_iam_condition-key-example"></a>

在创建 IAM policy 以授予使用地理围栏或设备位置的访问权限时，您可以使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)更精确地控制用户可以访问哪些地理围栏或设备。为此，您可以将地理围栏 ID 或设备 ID 包含在策略的 `Condition` 元素中。

以下示例策略演示了如何创建允许用户更新特定设备的设备位置的策略。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UpdateDevicePositions",
      "Effect": "Allow",
      "Action": [
        "geo:BatchUpdateDevicePosition"
      ],
      "Resource": [
        "arn:aws:geo:us-west-2:account-id:tracker/Tracker"
      ],
      "Condition":{
        "ForAllValues:StringLike":{
          "geo:DeviceIds":[
            "deviceId"
          ]
        }
      }
    }
  ]
}
```

### 基于标签控制对资源的访问
<a name="security_iam_tag-based-policy-example"></a>

当您创建 IAM policy 以授予使用您的 Amazon Location 资源的访问权限时，您可以使用[基于属性的访问控制](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)来更好地控制用户可以修改、使用或删除哪些资源。为此，您可以将标签信息包含在策略 `Condition` 元素中，以便根据资源[标签](manage-resources.md#manage-resources_how-to)控制访问权限。

以下示例策略演示了如何创建允许用户创建地理围栏的策略。这允许以下操作在名为的地理围栏集合上创建一个或多个地理围栏：*Collection*
+ `geo:BatchPutGeofence` 创建多个地理围栏。
+ `geo:PutGeofence` 创建单个地理围栏。

但是，只有当*Collection*标签的值为该用户的用户名时`Owner`，此策略才使用`Condition`元素来授予权限。
+ 例如，如果名为的用户`richard-roe`尝试查看 Amazon 地点*Collection*，则*Collection*必须将其标记为`Owner=richard-roe`或`owner=richard-roe`。否则，该用户将被拒绝访问。
**注意**  
条件标签键 `Owner` 匹配 `Owner` 和 `owner`，因为条件键名称不区分大小写。有关更多信息，请参阅 *IAM 用户指南* 中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateGeofencesIfOwner",
      "Effect": "Allow",
      "Action": [
        "geo:BatchPutGeofence",
        "geo:PutGeofence"
      ],
      "Resource": "arn:aws:geo:us-west-2:account-id:geofence-collection/Collection",
      "Condition": {
                "StringEquals": {"geo:ResourceTag/Owner": "${aws:username}"}
      }
    }
  ]
}
```

有关[如何根据标签定义访问 AWS 资源的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)的教程，请参阅 *AWS Identity and Access Management 用户指南*。

## Amazon Location Service 身份和访问权限故障排查
<a name="security_iam_troubleshoot"></a>

使用以下信息可帮助您诊断和修复在使用 Amazon Location 和 IAM 时可能遇到的常见问题。

**Topics**
+ [我无权在 Amazon Location 中执行操作](#security_iam_troubleshoot-no-permissions)
+ [我无权执行 iam：PassRole](#security_iam_troubleshoot-passrole)
+ [我想允许我以外的人访问我 AWS 账户 的 Amazon Location 资源](#security_iam_troubleshoot-cross-account-access)

### 我无权在 Amazon Location 中执行操作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到错误提示，指明您无权执行某个操作，则必须更新策略以允许执行该操作。

当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `my-example-widget` 资源的详细信息，但不拥有虚构 `geo:GetWidget` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: geo:GetWidget on resource: my-example-widget
```

在此情况下，必须更新 `mateojackson` 用户的策略，以允许使用 `geo:GetWidget` 操作访问 `my-example-widget` 资源。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

### 我无权执行 iam：PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到一个错误，指明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给 Amazon Location。

有些 AWS 服务 允许您将现有角色传递给该服务，而不是创建新的服务角色或服务相关角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 Amazon Location 中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

### 我想允许我以外的人访问我 AWS 账户 的 Amazon Location 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表 (ACLs) 的服务，您可以使用这些策略向人们授予访问您的资源的权限。

要了解更多信息，请参阅以下内容：
+ 要了解 Amazon Location 是否支持这些特征，请参阅 [Amazon Location Service 如何与 IAM 协同工作](#security_iam_service-with-iam)。
+ 要了解如何提供对您拥有的资源的访问权限 AWS 账户 ，请参阅 [IAM 用户*指南中的向您拥有 AWS 账户 的另一个 IAM 用户*提供访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)权限。
+ 要了解如何向第三方提供对您的资源的访问[权限 AWS 账户，请参阅 *IAM 用户指南*中的向第三方提供](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)访问权限。 AWS 账户 
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。