

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan otorisasi API Gateway Lambda
<a name="apigateway-use-lambda-authorizer"></a>

Gunakan *Lambda Authorizer (sebelumnya dikenal sebagai otorisasi* *kustom) untuk mengontrol akses ke API* Anda. Saat klien membuat permintaan ke metode API Anda, API Gateway memanggil otorisasi Lambda Anda. Authorizer Lambda mengambil identitas pemanggil sebagai input dan mengembalikan kebijakan IAM sebagai output.

Gunakan otorisasi Lambda untuk menerapkan skema otorisasi khusus. Skema Anda dapat menggunakan parameter permintaan untuk menentukan identitas pemanggil atau menggunakan strategi otentikasi token pembawa seperti OAuth atau SALL. Buat otorisasi Lambda di konsol API API Gateway REST API, menggunakan AWS CLI, atau SDK. AWS 

## Alur kerja otorisasi otorisasi Lambda
<a name="api-gateway-lambda-authorizer-flow"></a>

Diagram berikut menunjukkan alur kerja otorisasi untuk otorisasi Lambda.

![\[Alur kerja otorisasi API Gateway Lambda\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/custom-auth-workflow.png)


**Alur kerja otorisasi API Gateway Lambda**

1. Klien memanggil metode pada API Gateway API, meneruskan token pembawa atau parameter permintaan.

1. API Gateway memeriksa apakah permintaan metode dikonfigurasi dengan otorisasi Lambda. Jika ya, API Gateway memanggil fungsi Lambda.

1. Fungsi Lambda mengautentikasi pemanggil. Fungsi ini dapat mengautentikasi dengan cara-cara berikut:
   + Dengan memanggil OAuth penyedia untuk mendapatkan token OAuth akses.
   + Dengan memanggil penyedia SAFL untuk mendapatkan pernyataan SAFL.
   + Dengan membuat kebijakan IAM berdasarkan nilai parameter permintaan.
   + Dengan mengambil kredensi dari database.

1. Fungsi Lambda mengembalikan kebijakan IAM dan pengidentifikasi utama. Jika fungsi Lambda tidak mengembalikan informasi itu, panggilan gagal. 

1. API Gateway mengevaluasi kebijakan IAM.
   + Jika akses ditolak, API Gateway mengembalikan kode status HTTP yang sesuai, seperti`403 ACCESS_DENIED`.
   + Jika akses diizinkan, API Gateway akan memanggil metode. 

     Jika Anda mengaktifkan caching otorisasi, API Gateway menyimpan kebijakan agar fungsi otorisasi Lambda tidak dipanggil lagi. Pastikan kebijakan Anda berlaku untuk semua sumber daya dan metode di seluruh API Anda.

Anda dapat menyesuaikan `403 ACCESS_DENIED` atau tanggapan `401 UNAUTHORIZED` gateway. Untuk mempelajari selengkapnya, lihat [Tanggapan gateway untuk REST APIs di API Gateway](api-gateway-gatewayResponse-definition.md).

## Memilih jenis otorisasi Lambda
<a name="api-gateway-lambda-authorizer-choose"></a>

Ada dua jenis otorisasi Lambda:

**Minta otorisasi Lambda berbasis parameter (otorisasi) `REQUEST`**  
`REQUEST`Authorizer menerima identitas pemanggil dalam kombinasi header, parameter string kueri, dan variabel [`stageVariables`](api-gateway-mapping-template-reference.md#stagevariables-template-reference). [`$context`](api-gateway-mapping-template-reference.md#context-variable-reference) Anda dapat menggunakan `REQUEST` otorisasi untuk membuat kebijakan berbutir halus berdasarkan informasi dari beberapa sumber identitas, seperti variabel dan konteks. `$context.path` `$context.httpMethod`  
Jika Anda mengaktifkan caching otorisasi untuk `REQUEST` otorisasi, API Gateway memverifikasi bahwa semua sumber identitas yang ditentukan ada dalam permintaan. Jika sumber identifikasi tertentu hilang, null, atau kosong, API Gateway mengembalikan respons `401 Unauthorized` HTTP tanpa memanggil fungsi otorisasi Lambda. Ketika beberapa sumber identitas didefinisikan, mereka semua digunakan untuk mendapatkan kunci cache otorisasi, dengan urutan dipertahankan. Anda dapat menentukan kunci cache berbutir halus dengan menggunakan beberapa sumber identitas.  
Jika Anda mengubah salah satu bagian kunci cache, dan menerapkan ulang API Anda, otorisasi akan membuang dokumen kebijakan yang di-cache dan membuat yang baru.  
Jika Anda mematikan caching otorisasi untuk `REQUEST` otorisasi, API Gateway langsung meneruskan permintaan ke fungsi Lambda. 

**Pengotorisasi Lambda berbasis token (otorisasi) `TOKEN`**  
`TOKEN`Authorizer menerima identitas penelepon dalam token pembawa, seperti JSON Web Token (JWT) atau token. OAuth   
Jika Anda mengaktifkan caching otorisasi untuk `TOKEN` otorisasi, nama header yang ditentukan dalam sumber token menjadi kunci cache.   
Selain itu, Anda dapat menggunakan validasi token untuk memasukkan RegEx pernyataan. API Gateway melakukan validasi awal token input terhadap ekspresi ini dan memanggil fungsi otorisasi Lambda setelah validasi berhasil. Ini membantu mengurangi panggilan ke API Anda.   
`IdentityValidationExpression`Properti ini didukung hanya untuk `TOKEN` otorisasi. Untuk informasi selengkapnya, lihat [x-amazon-apigateway-authorizer objek](api-gateway-swagger-extensions-authorizer.md).

**catatan**  
Kami menyarankan Anda menggunakan `REQUEST` otorisasi untuk mengontrol akses ke API Anda. Anda dapat mengontrol akses ke API berdasarkan beberapa sumber identitas saat menggunakan `REQUEST` otorisasi, dibandingkan dengan satu sumber identitas saat menggunakan `TOKEN` otorisasi. Selain itu, Anda dapat memisahkan kunci cache menggunakan beberapa sumber identitas untuk `REQUEST` otorisasi.

## Contoh fungsi Lambda `REQUEST` authorizer
<a name="api-gateway-lambda-authorizer-request-lambda-function-create"></a>

Kode contoh berikut membuat fungsi otorisasi Lambda yang memungkinkan permintaan jika `HeaderAuth1` header yang disediakan klien, parameter `QueryString1` kueri, dan variabel tahap `StageVar1` semua cocok dengan nilai yang ditentukan,, dan`headerValue1`, `queryValue1` masing-masing. `stageValue1` 

------
#### [ Node.js ]

```
// A simple request-based authorizer example to demonstrate how to use request 
// parameters to allow or deny a request. In this example, a request is  
// authorized if the client-supplied HeaderAuth1 header, QueryString1
// query parameter, and stage variable of StageVar1 all match
// specified values of 'headerValue1', 'queryValue1', and 'stageValue1',
// respectively.
    
export const handler = function(event, context, callback) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    
    // Retrieve request parameters from the Lambda function input:
    var headers = event.headers;
    var queryStringParameters = event.queryStringParameters;
    var pathParameters = event.pathParameters;
    var stageVariables = event.stageVariables;
        
    // Parse the input for the parameter values
    var tmp = event.methodArn.split(':');
    var apiGatewayArnTmp = tmp[5].split('/');
    var awsAccountId = tmp[4];
    var region = tmp[3];
    var restApiId = apiGatewayArnTmp[0];
    var stage = apiGatewayArnTmp[1];
    var method = apiGatewayArnTmp[2];
    var resource = '/'; // root resource
    if (apiGatewayArnTmp[3]) {
        resource += apiGatewayArnTmp[3];
    }
        
    // Perform authorization to return the Allow policy for correct parameters and 
    // the 'Unauthorized' error, otherwise.

     
    if (headers.HeaderAuth1 === "headerValue1"
        && queryStringParameters.QueryString1 === "queryValue1"
        && stageVariables.StageVar1 === "stageValue1") {
        callback(null, generateAllow('me', event.methodArn));
    }  else {
        callback(null, generateDeny('me', event.methodArn));
    }
}
     
// Help function to generate an IAM policy
var generatePolicy = function(principalId, effect, resource) {
    // Required output:
    var authResponse = {};
    authResponse.principalId = principalId;
    if (effect && resource) {
        var policyDocument = {};
        policyDocument.Version = '2012-10-17'; // default version
        policyDocument.Statement = [];
        var statementOne = {};
        statementOne.Action = 'execute-api:Invoke'; // default action
        statementOne.Effect = effect;
        statementOne.Resource = resource;
        policyDocument.Statement[0] = statementOne;
        authResponse.policyDocument = policyDocument;
    }
    // Optional output with custom properties of the String, Number or Boolean type.
    authResponse.context = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": true
    };
    return authResponse;
}
     
var generateAllow = function(principalId, resource) {
    return generatePolicy(principalId, 'Allow', resource);
}
     
var generateDeny = function(principalId, resource) {
    return generatePolicy(principalId, 'Deny', resource);
}
```

------
#### [ Python ]

```
# A simple request-based authorizer example to demonstrate how to use request
# parameters to allow or deny a request. In this example, a request is
# authorized if the client-supplied headerauth1 header, QueryString1
# query parameter, and stage variable of StageVar1 all match
# specified values of 'headerValue1', 'queryValue1', and 'stageValue1',
# respectively.

def lambda_handler(event, context):
    print(event)

    # Retrieve request parameters from the Lambda function input:
    headers = event['headers']
    queryStringParameters = event['queryStringParameters']
    pathParameters = event['pathParameters']
    stageVariables = event['stageVariables']

    # Parse the input for the parameter values
    tmp = event['methodArn'].split(':')
    apiGatewayArnTmp = tmp[5].split('/')
    awsAccountId = tmp[4]
    region = tmp[3]
    restApiId = apiGatewayArnTmp[0]
    stage = apiGatewayArnTmp[1]
    method = apiGatewayArnTmp[2]
    resource = '/'

    if (apiGatewayArnTmp[3]):
        resource += apiGatewayArnTmp[3]

    # Perform authorization to return the Allow policy for correct parameters
    # and the 'Unauthorized' error, otherwise.

    if (headers['HeaderAuth1'] == "headerValue1" and queryStringParameters['QueryString1'] == "queryValue1" and stageVariables['StageVar1'] == "stageValue1"):
        response = generateAllow('me', event['methodArn'])
        print('authorized')
        return response
    else:
        print('unauthorized')
        response = generateDeny('me', event['methodArn'])
        return response
    # Help function to generate IAM policy


def generatePolicy(principalId, effect, resource):
    authResponse = {}
    authResponse['principalId'] = principalId
    if (effect and resource):
        policyDocument = {}
        policyDocument['Version'] = '2012-10-17'
        policyDocument['Statement'] = []
        statementOne = {}
        statementOne['Action'] = 'execute-api:Invoke'
        statementOne['Effect'] = effect
        statementOne['Resource'] = resource
        policyDocument['Statement'] = [statementOne]
        authResponse['policyDocument'] = policyDocument

    authResponse['context'] = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": True
    }

    return authResponse


def generateAllow(principalId, resource):
    return generatePolicy(principalId, 'Allow', resource)


def generateDeny(principalId, resource):
    return generatePolicy(principalId, 'Deny', resource)
```

------

Dalam contoh ini, fungsi Lambda Authorizer memeriksa parameter input dan bertindak sebagai berikut:
+ Jika semua nilai parameter yang diperlukan cocok dengan nilai yang diharapkan, fungsi authorizer mengembalikan respons `200 OK` HTTP dan kebijakan IAM yang terlihat seperti berikut, dan permintaan metode berhasil:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
      }
    ]
  }
  ```

------
+ Jika tidak, fungsi authorizer mengembalikan respon `401 Unauthorized` HTTP, dan permintaan metode gagal.

Selain mengembalikan kebijakan IAM, fungsi otorisasi Lambda juga harus mengembalikan pengenal utama pemanggil. Secara opsional, ini dapat mengembalikan `context` objek yang berisi informasi tambahan yang dapat diteruskan ke backend integrasi. Untuk informasi selengkapnya, lihat [Keluaran dari otorisasi API Gateway Lambda](api-gateway-lambda-authorizer-output.md).

Dalam kode produksi, Anda mungkin perlu mengautentikasi pengguna sebelum memberikan otorisasi. Anda dapat menambahkan logika otentikasi dalam fungsi Lambda dengan memanggil penyedia otentikasi seperti yang diarahkan dalam dokumentasi untuk penyedia tersebut.

## Contoh fungsi Lambda `TOKEN` authorizer
<a name="api-gateway-lambda-authorizer-token-lambda-function-create"></a>

Kode contoh berikut membuat fungsi otorisasi `TOKEN` Lambda yang memungkinkan pemanggil untuk memanggil metode jika nilai token yang disediakan klien adalah. `allow` Penelepon tidak diizinkan untuk memanggil permintaan jika nilai tokennya. `deny` Jika nilai token adalah `unauthorized` atau string kosong, fungsi authorizer mengembalikan `401 UNAUTHORIZED` respons.

------
#### [ Node.js ]

```
// A simple token-based authorizer example to demonstrate how to use an authorization token 
// to allow or deny a request. In this example, the caller named 'user' is allowed to invoke 
// a request if the client-supplied token value is 'allow'. The caller is not allowed to invoke 
// the request if the token value is 'deny'. If the token value is 'unauthorized' or an empty
// string, the authorizer function returns an HTTP 401 status code. For any other token value, 
// the authorizer returns an HTTP 500 status code. 
// Note that token values are case-sensitive.

export const handler =  function(event, context, callback) {
    var token = event.authorizationToken;
    switch (token) {
        case 'allow':
            callback(null, generatePolicy('user', 'Allow', event.methodArn));
            break;
        case 'deny':
            callback(null, generatePolicy('user', 'Deny', event.methodArn));
            break;
        case 'unauthorized':
            callback("Unauthorized");   // Return a 401 Unauthorized response
            break;
        default:
            callback("Error: Invalid token"); // Return a 500 Invalid token response
    }
};

// Help function to generate an IAM policy
var generatePolicy = function(principalId, effect, resource) {
    var authResponse = {};
    
    authResponse.principalId = principalId;
    if (effect && resource) {
        var policyDocument = {};
        policyDocument.Version = '2012-10-17'; 
        policyDocument.Statement = [];
        var statementOne = {};
        statementOne.Action = 'execute-api:Invoke'; 
        statementOne.Effect = effect;
        statementOne.Resource = resource;
        policyDocument.Statement[0] = statementOne;
        authResponse.policyDocument = policyDocument;
    }
    
    // Optional output with custom properties of the String, Number or Boolean type.
    authResponse.context = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": true
    };
    return authResponse;
}
```

------
#### [ Python ]

```
# A simple token-based authorizer example to demonstrate how to use an authorization token
# to allow or deny a request. In this example, the caller named 'user' is allowed to invoke
# a request if the client-supplied token value is 'allow'. The caller is not allowed to invoke
# the request if the token value is 'deny'. If the token value is 'unauthorized' or an empty
# string, the authorizer function returns an HTTP 401 status code. For any other token value,
# the authorizer returns an HTTP 500 status code.
# Note that token values are case-sensitive.

import json


def lambda_handler(event, context):
    token = event['authorizationToken']
    if token == 'allow':
        print('authorized')
        response = generatePolicy('user', 'Allow', event['methodArn'])
    elif token == 'deny':
        print('unauthorized')
        response = generatePolicy('user', 'Deny', event['methodArn'])
    elif token == 'unauthorized':
        print('unauthorized')
        raise Exception('Unauthorized')  # Return a 401 Unauthorized response
        return 'unauthorized'
    try:
        return json.loads(response)
    except BaseException:
        print('unauthorized')
        return 'unauthorized'  # Return a 500 error


def generatePolicy(principalId, effect, resource):
    authResponse = {}
    authResponse['principalId'] = principalId
    if (effect and resource):
        policyDocument = {}
        policyDocument['Version'] = '2012-10-17'
        policyDocument['Statement'] = []
        statementOne = {}
        statementOne['Action'] = 'execute-api:Invoke'
        statementOne['Effect'] = effect
        statementOne['Resource'] = resource
        policyDocument['Statement'] = [statementOne]
        authResponse['policyDocument'] = policyDocument
    authResponse['context'] = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": True
    }
    authResponse_JSON = json.dumps(authResponse)
    return authResponse_JSON
```

------

Dalam contoh ini, ketika API menerima permintaan metode, API Gateway meneruskan token sumber ke fungsi otorisasi Lambda ini di atribut. `event.authorizationToken` Fungsi otorisasi Lambda membaca token dan bertindak sebagai berikut:
+ Jika nilai token`allow`, fungsi authorizer mengembalikan respons `200 OK` HTTP dan kebijakan IAM yang terlihat seperti berikut, dan permintaan metode berhasil:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
      }
    ]
  }
  ```

------
+ Jika nilai token`deny`, fungsi authorizer mengembalikan respons `200 OK` HTTP dan kebijakan `Deny` IAM yang terlihat seperti berikut, dan permintaan metode gagal:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
      }
    ]
  }
  ```

------
**catatan**  
Di luar lingkungan pengujian, API Gateway mengembalikan respons `403 Forbidden` HTTP dan permintaan metode gagal.
+ Jika nilai token `unauthorized` atau string kosong, fungsi authorizer mengembalikan respons `401 Unauthorized` HTTP, dan panggilan metode gagal.
+ Jika token adalah hal lain, klien menerima `500 Invalid token` respons, dan panggilan metode gagal.

Selain mengembalikan kebijakan IAM, fungsi otorisasi Lambda juga harus mengembalikan pengenal utama pemanggil. Secara opsional, ini dapat mengembalikan `context` objek yang berisi informasi tambahan yang dapat diteruskan ke backend integrasi. Untuk informasi selengkapnya, lihat [Keluaran dari otorisasi API Gateway Lambda](api-gateway-lambda-authorizer-output.md).

Dalam kode produksi, Anda mungkin perlu mengautentikasi pengguna sebelum memberikan otorisasi. Anda dapat menambahkan logika otentikasi dalam fungsi Lambda dengan memanggil penyedia otentikasi seperti yang diarahkan dalam dokumentasi untuk penyedia tersebut.

## Contoh tambahan fungsi otorisasi Lambda
<a name="api-gateway-lambda-authorizer-lambda-function-create"></a>

Daftar berikut menunjukkan contoh tambahan fungsi otorisasi Lambda. Anda dapat membuat fungsi Lambda di akun yang sama, atau akun lain, dari tempat Anda membuat API.

Untuk contoh fungsi Lambda sebelumnya, Anda dapat menggunakan built-in [AWSLambdaBasicExecutionRole](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), karena fungsi ini tidak memanggil layanan lain AWS . Jika fungsi Lambda Anda memanggil AWS layanan lain, Anda harus menetapkan peran eksekusi IAM ke fungsi Lambda. Untuk membuat peran, ikuti instruksi dalam [Peran AWS Lambda Eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html).

**Contoh tambahan fungsi otorisasi Lambda**
+  Untuk contoh aplikasi, lihat [Buka Perbankan Brasil - Sampel GitHub Otorisasi pada](https://github.com/aws-samples/openbanking-brazilian-auth-samples). 
+  Untuk contoh fungsi Lambda lainnya, lihat [ aws-apigateway-lambda-authorizer-blueprints](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints) on. GitHub 
+ Anda dapat membuat otorisasi Lambda yang mengautentikasi pengguna menggunakan kumpulan pengguna Amazon Cognito dan mengotorisasi penelepon berdasarkan penyimpanan kebijakan menggunakan Izin Terverifikasi. Untuk informasi selengkapnya, lihat [Kontrol akses berdasarkan atribut identitas dengan Izin Terverifikasi](apigateway-lambda-authorizer-verified-permissions.md).
+ Konsol Lambda menyediakan cetak biru Python, yang dapat Anda gunakan dengan memilih **Gunakan** cetak biru dan memilih cetak biru. **api-gateway-authorizer-python**

# Konfigurasikan otorisasi Lambda API Gateway
<a name="configure-api-gateway-lambda-authorization"></a>

Setelah membuat fungsi Lambda, Anda mengonfigurasi fungsi Lambda sebagai otorisasi untuk API Anda. Anda kemudian mengonfigurasi metode Anda untuk memanggil otorisasi Lambda Anda untuk menentukan apakah pemanggil dapat memanggil metode Anda. Anda dapat membuat fungsi Lambda di akun yang sama, atau akun lain, dari tempat Anda membuat API.

[Anda dapat menguji otorisasi Lambda Anda menggunakan alat bawaan di konsol API Gateway atau dengan menggunakan Postman.](https://www.postman.com/) Untuk petunjuk tentang cara menggunakan Postman untuk menguji fungsi otorisasi Lambda Anda, lihat. [Panggil API dengan otorisasi API Gateway Lambda](call-api-with-api-gateway-lambda-authorization.md)

## Konfigurasikan otorisasi Lambda (konsol)
<a name="configure-api-gateway-lambda-authorization-with-console"></a>

 Prosedur berikut menunjukkan cara membuat otorisasi Lambda di konsol API Gateway REST API. Untuk mempelajari lebih lanjut tentang berbagai jenis otorisasi Lambda, lihat. [Memilih jenis otorisasi Lambda](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-choose) 

------
#### [ REQUEST authorizer ]

**Untuk mengkonfigurasi otorisasi `REQUEST` Lambda**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API, lalu pilih **Authorizers**. 

1. Pilih **Buat Authorizer**. 

1. Untuk **nama Authorizer**, masukkan nama untuk otorisasi.

1. Untuk **jenis Authorizer**, pilih **Lambda**. 

1. Untuk **fungsi Lambda**, pilih Wilayah AWS tempat Anda membuat fungsi otorisasi Lambda Anda, lalu masukkan nama fungsi.

1. Biarkan **peran panggilan Lambda kosong** agar konsol API Gateway REST API menetapkan kebijakan berbasis sumber daya. Kebijakan ini memberikan izin API Gateway untuk menjalankan fungsi otorisasi Lambda. Anda juga dapat memilih untuk memasukkan nama peran IAM untuk mengizinkan API Gateway menjalankan fungsi otorisasi Lambda. Untuk peran contoh, lihat[Buat peran IAM yang dapat diasumsikan](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies). 

1. **Untuk **payload acara Lambda**, pilih Minta.**

1. Untuk **tipe sumber Identity**, pilih tipe parameter. Jenis parameter yang didukung adalah`Header`,`Query string`,`Stage variable`, dan`Context`. Untuk menambahkan lebih banyak sumber identitas, pilih **Tambah parameter**. 

1. Untuk men-cache kebijakan otorisasi yang dihasilkan oleh otorisasi, biarkan **caching Otorisasi** tetap aktif. Saat caching kebijakan diaktifkan, Anda dapat mengubah nilai **TTL**. Menyetel **TTL** ke nol menonaktifkan caching kebijakan.

   Jika Anda mengaktifkan caching, otorisasi Anda harus mengembalikan kebijakan yang berlaku untuk semua metode di seluruh API. Untuk menegakkan kebijakan khusus metode, gunakan variabel konteks dan. `$context.path` `$context.httpMethod`

1. Pilih **Buat Authorizer**.

------
#### [ TOKEN authorizer ]

**Untuk mengkonfigurasi otorisasi `TOKEN` Lambda**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API, lalu pilih **Authorizers**. 

1. Pilih **Buat Authorizer**. 

1. Untuk **nama Authorizer**, masukkan nama untuk otorisasi.

1. Untuk **jenis Authorizer**, pilih **Lambda**. 

1. Untuk **fungsi Lambda**, pilih Wilayah AWS tempat Anda membuat fungsi otorisasi Lambda Anda, lalu masukkan nama fungsi.

1. Biarkan **peran panggilan Lambda kosong** agar konsol API Gateway REST API menetapkan kebijakan berbasis sumber daya. Kebijakan ini memberikan izin API Gateway untuk menjalankan fungsi otorisasi Lambda. Anda juga dapat memilih untuk memasukkan nama peran IAM untuk mengizinkan API Gateway menjalankan fungsi otorisasi Lambda. Untuk peran contoh, lihat[Buat peran IAM yang dapat diasumsikan](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies). 

1. **Untuk **payload acara Lambda, pilih Token**.**

1. Untuk **sumber Token**, masukkan nama header yang berisi token otorisasi. Penelepon harus menyertakan header nama ini untuk mengirim token otorisasi ke otorisasi Lambda.

1. (Opsional) Untuk **validasi Token**, masukkan RegEx pernyataan. API Gateway melakukan validasi awal token input terhadap ekspresi ini dan memanggil authorizer setelah validasi berhasil.

1. Untuk men-cache kebijakan otorisasi yang dihasilkan oleh otorisasi, biarkan **caching Otorisasi** tetap aktif. Saat caching kebijakan diaktifkan, nama header yang ditentukan dalam **sumber Token** menjadi kunci cache. Saat caching kebijakan diaktifkan, Anda dapat mengubah nilai **TTL**. Menyetel **TTL** ke nol menonaktifkan caching kebijakan. 

   Jika Anda mengaktifkan caching, otorisasi Anda harus mengembalikan kebijakan yang berlaku untuk semua metode di seluruh API. **Untuk menerapkan kebijakan khusus metode, Anda dapat menonaktifkan caching Otorisasi.**

1. Pilih **Buat Authorizer**.

------

Setelah Anda membuat otorisasi Lambda Anda, Anda dapat mengujinya. Prosedur berikut menunjukkan cara menguji otorisasi Lambda Anda.

------
#### [ REQUEST authorizer ]

**Untuk menguji otorisasi `REQUEST` Lambda**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih nama otorisasi Anda.

1. Di bawah **Pengotorisasi uji**, masukkan nilai untuk sumber identitas Anda.

   Jika Anda menggunakan[Contoh fungsi Lambda `REQUEST` authorizer](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-request-lambda-function-create), lakukan hal berikut:

   1. Pilih **Header** dan enter**headerValue1**, lalu pilih **Tambah parameter**.

   1. Di bawah **Jenis sumber identitas**, pilih **String kueri** dan masukkan**queryValue1**, lalu pilih **Tambah parameter**.

   1. Di bawah **Identity source type**, pilih **Stage variable** dan enter**stageValue1**.

   Anda tidak dapat memodifikasi variabel konteks untuk pemanggilan pengujian, tetapi Anda dapat memodifikasi template peristiwa pengujian **API Gateway Authorizer** untuk fungsi Lambda Anda. Kemudian, Anda dapat menguji fungsi otorisasi Lambda Anda dengan variabel konteks yang dimodifikasi. Untuk informasi selengkapnya, lihat [Menguji fungsi Lambda di konsol](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) di Panduan *AWS Lambda Pengembang*.

1. Pilih **Test Authorizer**.

------
#### [ TOKEN authorizer ]

**Untuk menguji otorisasi `TOKEN` Lambda**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih nama otorisasi Anda.

1. Di bawah **Pengotorisasi uji**, masukkan nilai untuk token Anda.

   Jika Anda menggunakan[Contoh fungsi Lambda `TOKEN` authorizer](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create), lakukan hal berikut:

   1. Untuk **AuthorizationToken**, masukkan. **allow**

1. Pilih **Test Authorizer**.

    Jika otorisasi Lambda Anda berhasil menolak permintaan di lingkungan pengujian, pengujian akan merespons dengan respons HTTP. `200 OK` Namun, di luar lingkungan pengujian, API Gateway mengembalikan respons `403 Forbidden` HTTP dan permintaan metode gagal.

------

## Konfigurasikan otorisasi Lambda ()AWS CLI
<a name="configure-api-gateway-lambda-authorization-cli"></a>

Perintah [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) berikut menunjukkan untuk membuat authorizer Lambda menggunakan. AWS CLI

------
#### [ REQUEST authorizer ]

Perintah [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) berikut membuat `REQUEST` authorizer dan menggunakan variabel `Authorizer` header dan `accountId` konteks sebagai sumber identitas:

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Request_Custom_Authorizer' \
    --type REQUEST \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization,context.accountId' \
    --authorizer-result-ttl-in-seconds 300
```

------
#### [ TOKEN authorizer ]

Perintah [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) berikut membuat `TOKEN` authorizer dan menggunakan `Authorization` header sebagai sumber identitas:

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Token_Custom_Authorizer' \
    --type TOKEN \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization' \
    --authorizer-result-ttl-in-seconds 300
```

------

Setelah Anda membuat otorisasi Lambda Anda, Anda dapat mengujinya. [test-invoke-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html)Perintah berikut menguji otorisasi Lambda:

```
aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \
   --authorizer-id efg1234 \
   --headers Authorization='Value'
```

## Konfigurasikan metode untuk menggunakan otorisasi Lambda (konsol)
<a name="configure-api-gateway-lambda-authorization-method-console"></a>

Setelah mengonfigurasi otorisasi Lambda, Anda harus melampirkannya ke metode untuk API Anda. Jika otorisasi Anda menggunakan caching otorisasi, pastikan Anda memperbarui kebijakan untuk mengontrol akses untuk metode tambahan.

**Untuk mengonfigurasi metode API untuk menggunakan otorisasi Lambda**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API.

1. Pilih **Sumber Daya**, lalu pilih metode baru atau pilih metode yang ada.

1. Pada tab **Permintaan metode**, di bawah **Pengaturan permintaan metode**, pilih **Edit**. 

1. Untuk **Authorizer**, dari menu dropdown, pilih Lambda Authorizer yang baru saja Anda buat. 

1.  (Opsional) Jika Anda ingin meneruskan token otorisasi ke backend, pilih header permintaan **HTTP**. Pilih **Tambahkan header**, lalu tambahkan nama header otorisasi. Untuk **Nama**, masukkan nama header yang cocok dengan nama **sumber Token** yang Anda tentukan saat membuat otorisasi Lambda untuk API. Langkah ini tidak berlaku untuk `REQUEST` otorisasi. 

1. Pilih **Simpan**.

1. Pilih **Deploy API** untuk menerapkan API ke panggung. Untuk `REQUEST` otorisasi yang menggunakan variabel tahap, Anda juga harus menentukan variabel tahap yang diperlukan dan menentukan nilainya saat berada di halaman **Tahapan**.

## Konfigurasikan metode untuk menggunakan otorisasi Lambda ()AWS CLI
<a name="configure-api-gateway-lambda-authorization-method-cli"></a>

Setelah mengonfigurasi otorisasi Lambda, Anda harus melampirkannya ke metode untuk API Anda. Anda dapat membuat metode baru atau menggunakan operasi tambalan untuk melampirkan otorisasi ke metode yang ada. Jika otorisasi Anda menggunakan caching otorisasi, pastikan Anda memperbarui kebijakan untuk mengontrol akses untuk metode tambahan.

Perintah [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) berikut membuat metode baru yang menggunakan authorizer Lambda:

```
aws apigateway put-method --rest-api-id 1234123412 \
  --resource-id a1b2c3 \
  --http-method PUT \
  --authorization-type CUSTOM \
  --authorizer-id efg1234
```

Perintah [update-method berikut memperbarui metode](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) yang ada untuk menggunakan Lambda authorizer:

```
aws apigateway update-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"
```

# Masukan ke otorisasi Lambda API Gateway
<a name="api-gateway-lambda-authorizer-input"></a>

Bagian berikut menjelaskan format input dari API Gateway ke otorisasi Lambda.

## `TOKEN`format masukan
<a name="w2aac15b9c23c25c19b5"></a>

 Untuk Authorizer Lambda (sebelumnya dikenal sebagai otorisasi kustom) dari `TOKEN` jenisnya, Anda harus menentukan header kustom sebagai **Sumber Token** saat Anda mengonfigurasi otorisasi untuk API Anda. Klien API harus meneruskan token otorisasi yang diperlukan di header tersebut dalam permintaan yang masuk. Setelah menerima permintaan metode masuk, API Gateway mengekstrak token dari header kustom. Kemudian melewati token sebagai `authorizationToken` properti dari `event` objek fungsi Lambda, selain metode ARN sebagai properti: `methodArn` 

```
{
    "type":"TOKEN",
    "authorizationToken":"{caller-supplied-token}",
    "methodArn":"arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
}
```

 Dalam contoh ini, `type` properti menentukan jenis authorizer, yang merupakan `TOKEN` authorizer. `{caller-supplied-token}`Berasal dari header otorisasi dalam permintaan klien, dan dapat berupa nilai string apa pun. `methodArn`Ini adalah ARN dari permintaan metode yang masuk dan diisi oleh API Gateway sesuai dengan konfigurasi otorisasi Lambda. 

## `REQUEST`format masukan
<a name="w2aac15b9c23c25c19b7"></a>

Untuk `REQUEST` jenis pengotorisasi Lambda, API Gateway meneruskan parameter permintaan ke fungsi Lambda otorisasi sebagai bagian dari objek. `event` Parameter permintaan termasuk header, parameter jalur, parameter string kueri, variabel tahap, dan beberapa variabel konteks permintaan. Pemanggil API dapat mengatur parameter jalur, header, dan parameter string kueri. Pengembang API harus menyetel variabel stage selama penerapan API dan API Gateway menyediakan konteks permintaan pada waktu berjalan. 

**catatan**  
Parameter jalur dapat diteruskan sebagai parameter permintaan ke fungsi otorisasi Lambda, tetapi tidak dapat digunakan sebagai sumber identitas.

 Contoh berikut menunjukkan input ke `REQUEST` authorizer untuk metode API (`GET /request`) dengan integrasi proxy: 

```
{
  "type": "REQUEST",
  "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "resource": "/request",
  "path": "/request",
  "httpMethod": "GET",
  "headers": {
    "X-AMZ-Date": "20170718T062915Z",
    "Accept": "*/*",
    "HeaderAuth1": "headerValue1",
    "CloudFront-Viewer-Country": "US",
    "CloudFront-Forwarded-Proto": "https",
    "CloudFront-Is-Tablet-Viewer": "false",
    "CloudFront-Is-Mobile-Viewer": "false",
    "User-Agent": "..."
  },
  "queryStringParameters": {
    "QueryString1": "queryValue1"
  },
  "pathParameters": {},
  "stageVariables": {
    "StageVar1": "stageValue1"
  },
  "requestContext": {
    "path": "/request",
    "accountId": "123456789012",
    "resourceId": "05c7jb",
    "stage": "test",
    "requestId": "...",
    "identity": {
      "apiKey": "...",
      "sourceIp": "...",
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "resourcePath": "/request",
    "httpMethod": "GET",
    "apiId": "abcdef123"
  }
}
```

 `requestContext`Ini adalah peta pasangan kunci-nilai dan sesuai dengan variabel [\$1context](api-gateway-mapping-template-reference.md#context-variable-reference). Hasilnya bergantung pada API.

 API Gateway mungkin menambahkan kunci baru ke peta. Untuk informasi selengkapnya tentang input fungsi Lambda dalam integrasi proxy Lambda, lihat. [Format input fungsi Lambda untuk integrasi proxy](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format) 

# Keluaran dari otorisasi API Gateway Lambda
<a name="api-gateway-lambda-authorizer-output"></a>

Output fungsi otorisasi Lambda adalah objek mirip kamus, yang harus menyertakan pengenal utama (`principalId`) dan dokumen kebijakan () yang berisi daftar pernyataan kebijakan. `policyDocument` Outputnya juga dapat menyertakan `context` peta yang berisi pasangan kunci-nilai. Jika API menggunakan paket penggunaan ([https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apiKeySource](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apiKeySource)disetel ke`AUTHORIZER`), fungsi otorisasi Lambda harus mengembalikan salah satu kunci API paket penggunaan sebagai nilai properti. `usageIdentifierKey`

Berikut ini menunjukkan contoh output ini. 

------
#### [ JSON ]

****  

```
{
  "principalId": "yyyyyyyy", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "stringKey": "value",
    "numberKey": "1",
    "booleanKey": "true"
  },
  "usageIdentifierKey": "{api-key}"
}
```

------

 Di sini, pernyataan kebijakan menentukan apakah akan mengizinkan atau menolak (`Effect`) layanan eksekusi API Gateway untuk memanggil (`Action`) metode API yang ditentukan (`Resource`). Anda mungkin perlu mengontrol akses ke beberapa sumber daya berdasarkan otorisasi Anda. Anda dapat menggunakan wild card (`*`) untuk menentukan jenis sumber daya (metode). Untuk informasi tentang menyetel kebijakan yang valid untuk memanggil API, lihat[Referensi pernyataan kebijakan IAM untuk menjalankan API di API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-calling-api-permissions). 

Untuk metode ARN yang diaktifkan otorisasi, misalnya`arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]`, panjang maksimum adalah 1600 byte. Nilai parameter jalur, ukuran yang ditentukan pada waktu berjalan, dapat menyebabkan panjang ARN melebihi batas. Ketika ini terjadi, klien API akan menerima `414 Request URI too long` respons. 

Selain itu, ARN Sumber Daya, seperti yang ditunjukkan dalam keluaran pernyataan kebijakan oleh otorisasi, saat ini dibatasi hingga 512 karakter. Untuk alasan ini, Anda tidak boleh menggunakan URI dengan token JWT dengan panjang yang signifikan dalam URI permintaan. Anda dapat dengan aman meneruskan token JWT di header permintaan, sebagai gantinya.

 Anda dapat mengakses `principalId` nilai dalam template pemetaan menggunakan `$context.authorizer.principalId` variabel. Ini berguna jika Anda ingin meneruskan nilai ke backend. Untuk informasi selengkapnya, lihat [Variabel konteks untuk transformasi data](api-gateway-mapping-template-reference.md#context-variable-reference). 

 Anda dapat mengakses`stringKey`,`numberKey`, atau `booleanKey` nilai (misalnya,, `"value"``"1"`, atau`"true"`) `context` peta dalam templat pemetaan dengan memanggil`$context.authorizer.stringKey`,, atau `$context.authorizer.numberKey``$context.authorizer.booleanKey`, masing-masing. Nilai yang dikembalikan semuanya dirangkai. Perhatikan bahwa Anda tidak dapat mengatur objek atau array JSON sebagai nilai yang valid dari kunci apa pun di `context` peta. 

 Anda dapat menggunakan `context` peta untuk mengembalikan kredensi cache dari otorisasi ke backend, menggunakan templat pemetaan permintaan integrasi. Hal ini memungkinkan backend untuk memberikan pengalaman pengguna yang lebih baik dengan menggunakan kredensi cache untuk mengurangi kebutuhan untuk mengakses kunci rahasia dan membuka token otorisasi untuk setiap permintaan. 

 Untuk integrasi proxy Lambda, API Gateway meneruskan `context` objek dari otorisasi Lambda langsung ke fungsi Lambda backend sebagai bagian dari input. `event` Anda dapat mengambil pasangan `context` kunci-nilai dalam fungsi Lambda dengan memanggil. `$event.requestContext.authorizer.key` 

`{api-key}`singkatan dari kunci API dalam rencana penggunaan tahap API. Untuk informasi selengkapnya, lihat [Paket penggunaan dan kunci API untuk REST APIs di API Gateway](api-gateway-api-usage-plans.md).

 Berikut ini menunjukkan contoh output dari contoh Lambda authorizer. Output contoh berisi pernyataan kebijakan untuk memblokir (`Deny`) panggilan ke `GET` metode untuk `dev` tahap API (`ymy8tbxw7b`) dari AWS account (`123456789012`).

------
#### [ JSON ]

****  

```
{
  "principalId": "user",
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/"
      }
    ]
  }
}
```

------

# Panggil API dengan otorisasi API Gateway Lambda
<a name="call-api-with-api-gateway-lambda-authorization"></a>

 Setelah mengonfigurasi otorisasi Lambda (sebelumnya dikenal sebagai otorisasi khusus) dan menerapkan API, Anda harus menguji API dengan otorisasi Lambda diaktifkan. [Untuk ini, Anda memerlukan klien REST, seperti cURL atau Postman.](https://www.postman.com/) Untuk contoh berikut, kami menggunakan Postman. 

**catatan**  
 **Saat memanggil metode berkemampuan pengotorisasi, API Gateway tidak mencatat panggilan CloudWatch jika token yang diperlukan untuk `TOKEN` otorisasi tidak disetel, nol, atau tidak valid oleh ekspresi validasi Token yang ditentukan.** Demikian pula, API Gateway tidak mencatat panggilan CloudWatch jika salah satu sumber identitas yang diperlukan untuk `REQUEST` otorisasi tidak disetel, nol, atau kosong.

 Berikut ini, kami menunjukkan cara menggunakan Postman untuk memanggil atau menguji API dengan otorisasi `TOKEN` Lambda. Metode ini dapat diterapkan untuk memanggil API dengan `REQUEST` otorisasi Lambda, jika Anda menentukan parameter path, header, atau string kueri yang diperlukan secara eksplisit. 

**Untuk memanggil API dengan `TOKEN` otorisasi khusus**

1.  Buka **Postman**, pilih metode **GET**, dan tempel URL **Invoke API ke bidang URL** yang berdekatan. 

    Tambahkan header token otorisasi Lambda dan atur nilainya. `allow` Pilih **Kirim**.   
![\[Panggil API dengan otorisasi Lambda mengizinkan token\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/custom-auth-call-api-with-allow-token.png)

    Tanggapan menunjukkan bahwa otorisasi API Gateway Lambda mengembalikan respons **200 OK** dan berhasil mengotorisasi panggilan untuk mengakses titik akhir HTTP (http://httpbin.org/get) yang terintegrasi dengan metode. 

1.  Masih di Postman, ubah nilai header token otorisasi Lambda menjadi. `deny` Pilih **Kirim**.   
![\[Panggil API dengan token penolakan otorisasi Lambda\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/custom-auth-call-api-with-deny-token.png)

   Tanggapan menunjukkan bahwa otorisasi API Gateway Lambda mengembalikan respons **403 Forbidden** tanpa mengotorisasi panggilan untuk mengakses titik akhir HTTP.

1.  **Di Postman, ubah nilai `unauthorized` header token otorisasi Lambda menjadi dan pilih Kirim.**   
![\[Panggil API dengan token tidak sah otorisasi Lambda\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/custom-auth-call-api-with-unauthorized-token.png)

    Respons menunjukkan bahwa API Gateway mengembalikan respons **401 Tidak Sah** tanpa mengotorisasi panggilan untuk mengakses titik akhir HTTP. 

1.  Sekarang, ubah nilai header token otorisasi Lambda menjadi. `fail` Pilih **Kirim**.   
![\[Panggil API dengan token gagal otorisasi Lambda\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/custom-auth-call-api-with-fail-token.png)

    Respons menunjukkan bahwa API Gateway mengembalikan respon **500 Internal Server Error** tanpa mengotorisasi panggilan untuk mengakses endpoint HTTP. 

# Konfigurasikan otorisasi Lambda API Gateway lintas akun
<a name="apigateway-lambda-authorizer-cross-account-lambda-authorizer"></a>

Anda sekarang juga dapat menggunakan AWS Lambda fungsi dari AWS akun yang berbeda sebagai fungsi otorisasi API Anda. Setiap akun dapat berada di wilayah mana pun di mana Amazon API Gateway tersedia. Fungsi otorisasi Lambda dapat menggunakan strategi otentikasi token pembawa seperti atau SALL. OAuth Ini memudahkan untuk mengelola dan berbagi fungsi otorisasi Lambda pusat secara terpusat di beberapa API Gateway. APIs

Di bagian ini, kami menunjukkan cara mengonfigurasi fungsi otorisasi Lambda lintas akun menggunakan konsol Amazon API Gateway.

Petunjuk ini mengasumsikan bahwa Anda sudah memiliki API Gateway API di satu AWS akun dan fungsi otorisasi Lambda di akun lain.

## Konfigurasikan otorisasi Lambda lintas akun menggunakan konsol API Gateway
<a name="apigateway-cross-account-lambda-auth-configure-cross-account-authorizer"></a>

Masuk ke konsol Amazon API Gateway di akun yang memiliki API Anda di dalamnya, lalu lakukan hal berikut:

1. Pilih API Anda, lalu di panel navigasi utama, pilih **Authorizers**.

1. Pilih **Buat Authorizer**. 

1. Untuk **nama Authorizer**, masukkan nama untuk otorisasi.

1. Untuk **jenis Authorizer**, pilih **Lambda**.

1. Untuk **Fungsi Lambda**, masukkan ARN lengkap untuk fungsi otorisasi Lambda yang Anda miliki di akun kedua Anda.
**catatan**  
Di konsol Lambda, Anda dapat menemukan ARN untuk fungsi Anda di sudut kanan atas jendela konsol.

1. Peringatan dengan string `aws lambda add-permission` perintah akan muncul. Kebijakan ini memberikan izin API Gateway untuk menjalankan fungsi Lambda otorisasi. Salin perintah dan simpan untuk nanti. Anda menjalankan perintah setelah Anda membuat authorizer.

1. Untuk **muatan acara Lambda**, pilih **Token** untuk otorisasi atau **Permintaan `TOKEN`** otorisasi. `REQUEST`

1. Bergantung pada pilihan langkah sebelumnya, lakukan salah satu hal berikut:

   1.  Untuk opsi **Token**, lakukan hal berikut: 
      + Untuk **sumber Token**, masukkan nama header yang berisi token otorisasi. Klien API harus menyertakan header dari nama ini untuk mengirim token otorisasi ke otorisasi Lambda. 
      + Secara opsional, untuk **validasi Token**, masukkan pernyataan RegEx . API Gateway melakukan validasi awal token input terhadap ekspresi ini dan memanggil authorizer setelah validasi berhasil. Ini membantu mengurangi panggilan ke API Anda. 
      + Untuk men-cache kebijakan otorisasi yang dihasilkan oleh otorisasi, biarkan **caching Otorisasi** tetap aktif. Saat caching kebijakan diaktifkan, Anda dapat memilih untuk mengubah nilai **TTL**. Menyetel **TTL** ke nol menonaktifkan caching kebijakan. Saat caching kebijakan diaktifkan, nama header yang ditentukan dalam **sumber Token** menjadi kunci cache. Jika beberapa nilai diteruskan ke header ini dalam permintaan, semua nilai akan menjadi kunci cache, dengan urutan dipertahankan.
**catatan**  
Nilai **TTL** default adalah 300 detik. Nilai maksimum adalah 3600 detik, batas ini tidak dapat ditingkatkan.

   1. Untuk opsi **Permintaan**, lakukan hal berikut:
      + Untuk **tipe sumber Identity**, pilih tipe parameter. Jenis parameter yang didukung adalah`Header`,`Query string`,`Stage variable`, dan`Context`. Untuk menambahkan lebih banyak sumber identitas, pilih **Tambah parameter**. 
      + Untuk men-cache kebijakan otorisasi yang dihasilkan oleh otorisasi, biarkan **caching Otorisasi** tetap aktif. Saat caching kebijakan diaktifkan, Anda dapat memilih untuk mengubah nilai **TTL**. Menyetel **TTL** ke nol menonaktifkan caching kebijakan.

        API Gateway menggunakan sumber identitas yang ditentukan sebagai kunci caching otorisasi permintaan. Saat caching diaktifkan, API Gateway memanggil fungsi Lambda otorisasi hanya setelah berhasil memverifikasi bahwa semua sumber identitas yang ditentukan ada saat runtime. Jika sumber identitas tertentu hilang, null, atau kosong, API Gateway mengembalikan `401 Unauthorized` respons tanpa memanggil fungsi Lambda otorisasi. 

        Ketika beberapa sumber identitas didefinisikan, mereka semua digunakan untuk mendapatkan kunci cache otorisasi. Mengubah salah satu bagian kunci cache menyebabkan otorisasi membuang dokumen kebijakan yang di-cache dan menghasilkan yang baru. Jika header dengan beberapa nilai diteruskan dalam permintaan, maka semua nilai akan menjadi bagian dari kunci cache, dengan urutan dipertahankan. 
      + Ketika caching dimatikan, tidak perlu menentukan sumber identitas.
**catatan**  
 Untuk mengaktifkan caching, otorisasi Anda harus mengembalikan kebijakan yang berlaku untuk semua metode di seluruh API. **Untuk menerapkan kebijakan khusus metode, Anda dapat menonaktifkan caching Otorisasi.** 

1. Pilih **Buat Authorizer**.

1. Tempel string `aws lambda add-permission` perintah yang Anda salin pada langkah sebelumnya ke AWS CLI jendela yang dikonfigurasi untuk akun kedua Anda. Ganti `AUTHORIZER_ID` dengan ID otorisasi Anda. Ini akan memberikan akses akun pertama Anda ke fungsi otorisasi Lambda akun kedua Anda.

# Kontrol akses berdasarkan atribut identitas dengan Izin Terverifikasi
<a name="apigateway-lambda-authorizer-verified-permissions"></a>

Gunakan Izin Terverifikasi Amazon untuk mengontrol akses ke API Gateway API Anda. Saat Anda menggunakan API Gateway dengan Izin Terverifikasi, Izin Terverifikasi akan membuat otorisasi Lambda yang menggunakan keputusan otorisasi berbutir halus untuk mengontrol akses ke API Anda. Izin Terverifikasi mengotorisasi pemanggil berdasarkan skema penyimpanan kebijakan dan kebijakan menggunakan bahasa kebijakan Cedar untuk menentukan izin berbutir halus bagi pengguna aplikasi. Untuk informasi selengkapnya, lihat [Membuat penyimpanan kebijakan dengan API dan penyedia identitas yang terhubung](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/getting-started-api-policy-store.html) di *Panduan Pengguna Izin Terverifikasi Amazon*.

Izin Terverifikasi mendukung kumpulan pengguna Amazon Cognito atau penyedia identitas OpenID Connect (OIDC) sebagai sumber identitas. Izin Terverifikasi menganggap bahwa prinsipal telah diidentifikasi dan diautentikasi sebelumnya. Izin Terverifikasi hanya didukung untuk REST Regional dan yang dioptimalkan di tepi. APIs

## Buat otorisasi Lambda menggunakan Izin Terverifikasi
<a name="apigateway-lambda-authorizer-verified-permissions-attach"></a>

Izin Terverifikasi membuat otorisasi Lambda untuk menentukan apakah prinsipal diizinkan melakukan tindakan pada API Anda. Anda membuat kebijakan Cedar yang digunakan Izin Terverifikasi untuk melakukan tugas otorisasi.

Berikut ini adalah contoh kebijakan Cedar yang memungkinkan akses untuk menjalankan API berdasarkan kumpulan pengguna Amazon Cognito`us-east-1_ABC1234`, untuk grup `developer` pada `GET /users` sumber daya API. Izin Terverifikasi menentukan keanggotaan grup dengan mengurai token pembawa untuk identitas pemanggil. 

```
permit(
  principal in MyAPI::UserGroup::"us-east-1_ABC1234|developer",
  action in [ MyAPI::Action::"get /users" ],
  resource
  );
```

Secara opsional, Izin Terverifikasi dapat melampirkan otorisasi ke metode API Anda. Pada tahap produksi untuk API Anda, kami menyarankan agar Anda tidak mengizinkan Izin Terverifikasi untuk melampirkan otorisasi untuk Anda.

Daftar berikut menunjukkan cara mengonfigurasi Izin Terverifikasi untuk melampirkan atau tidak melampirkan otorisasi Lambda ke permintaan metode metode API Anda.

**Lampirkan otorisasi untuk Anda ()Konsol Manajemen AWS**  
**Saat Anda memilih **Buat penyimpanan kebijakan** di konsol Izin Terverifikasi, pada halaman **integrasi aplikasi Deploy**, pilih Sekarang.**

**Jangan lampirkan otorisasi untuk Anda ()Konsol Manajemen AWS**  
**Saat Anda memilih **Buat penyimpanan kebijakan** di konsol Izin Terverifikasi, pada halaman **Integrasi aplikasi Terapkan**, pilih Nanti.**  
Izin Terverifikasi masih membuat otorisasi Lambda untuk Anda. Otorisasi Lambda dimulai dengan. `AVPAuthorizerLambda-` Untuk petunjuk selengkapnya tentang cara melampirkan otorisasi Anda pada suatu metode, lihat[Konfigurasikan metode untuk menggunakan otorisasi Lambda (konsol)](configure-api-gateway-lambda-authorization.md#configure-api-gateway-lambda-authorization-method-console).

**Lampirkan otorisasi untuk Anda ()CloudFormation**  
Di CloudFormation template yang dihasilkan Izin Terverifikasi, di `Conditions` bagian, atur ke. `"Ref": "shouldAttachAuthorizer"` `true`

**Jangan lampirkan otorisasi untuk Anda ()CloudFormation**  
Di CloudFormation template yang dihasilkan Izin Terverifikasi, di `Conditions` bagian, atur ke. `"Ref": "shouldAttachAuthorizer"` `false`  
Izin Terverifikasi masih membuat otorisasi Lambda untuk Anda. Otorisasi Lambda dimulai dengan. `AVPAuthorizerLambda-` Untuk petunjuk selengkapnya tentang cara melampirkan otorisasi Anda pada suatu metode, lihat[Konfigurasikan metode untuk menggunakan otorisasi Lambda ()AWS CLI](configure-api-gateway-lambda-authorization.md#configure-api-gateway-lambda-authorization-method-cli).

## Panggil otorisasi Lambda menggunakan Izin Terverifikasi
<a name="apigateway-lambda-authorizer-verified-permissions-call"></a>

Anda dapat menghubungi otorisasi Lambda Anda dengan memberikan identitas atau token akses di header. `Authorization` Untuk informasi selengkapnya, lihat [Panggil API dengan otorisasi API Gateway Lambda](call-api-with-api-gateway-lambda-authorization.md).

API Gateway menyimpan kebijakan yang dikembalikan oleh otorisasi Lambda Anda selama 120 detik. Anda dapat memodifikasi TTL di konsol API Gateway atau dengan menggunakan. AWS CLI