

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

# Data kepercayaan dikirim ke Akses Terverifikasi dari penyedia kepercayaan
<a name="trust-data"></a>

Data kepercayaan adalah data yang dikirim Akses Terverifikasi AWS dari penyedia kepercayaan. Data kepercayaan juga disebut sebagai “klaim pengguna” atau “konteks kepercayaan.” Data umumnya mencakup informasi tentang pengguna atau perangkat. Contoh data kepercayaan termasuk email pengguna, keanggotaan grup, versi sistem operasi perangkat, status keamanan perangkat, dan sebagainya. Informasi yang dikirim bervariasi tergantung pada penyedia kepercayaan, jadi Anda harus merujuk ke dokumentasi penyedia kepercayaan Anda untuk daftar data kepercayaan yang lengkap dan diperbarui.

Namun, dengan menggunakan kemampuan pencatatan Akses Terverifikasi, Anda juga dapat melihat data kepercayaan apa yang dikirim dari penyedia kepercayaan Anda. Ini dapat berguna saat menentukan kebijakan yang mengizinkan atau menolak akses ke aplikasi Anda. Untuk informasi tentang menyertakan konteks kepercayaan di log Anda, lihat[Mengaktifkan atau menonaktifkan konteks kepercayaan Akses Terverifikasi](include-trust-context.md).

Bagian ini berisi contoh data kepercayaan dan contoh untuk membantu Anda memulai penulisan kebijakan. Informasi yang diberikan di sini dimaksudkan untuk tujuan ilustrasi saja dan bukan sebagai referensi resmi.

**Topics**
+ [Konteks default](trust-data-default-context.md)
+ [AWS IAM Identity Center konteks](trust-data-iam.md)
+ [Konteks pihak ketiga](trust-data-third-party-trust.md)
+ [Klaim pengguna lewat](user-claims-passing.md)

# Konteks default untuk data kepercayaan Akses Terverifikasi
<a name="trust-data-default-context"></a>

Akses Terverifikasi AWS menyertakan beberapa elemen tentang permintaan saat ini secara default di semua evaluasi Cedar terlepas dari penyedia kepercayaan Anda yang dikonfigurasi. Anda dapat menulis kebijakan yang mengevaluasi terhadap data jika Anda memilih.

Berikut ini adalah contoh data yang termasuk dalam evaluasi.

**Topics**
+ [Permintaan HTTP](#default-context-http-request)
+ [Aliran TCP](#default-context-tcp-flow)

## Permintaan HTTP
<a name="default-context-http-request"></a>

Saat kebijakan dievaluasi, Akses Terverifikasi menyertakan data tentang permintaan HTTP saat ini dalam konteks Cedar di bawah kunci. `context.http_request`

```
{
    "title": "HTTP Request data included by Verified Access",
    "type": "object",
    "properties": {
        "http_method": {
            "type": "string",
            "description": "The HTTP method",
            "example": "GET"
        },
        "hostname": {
            "type": "string",
            "description": "The host subcomponent of the authority component of the URI",
            "example": "example.com"
        },
        "path": {
            "type": "string",
            "description": "The path component of the URI",
            "example": "app/images"
        },
        "query": {
            "type": "string",
            "description": "The query component of the URI",
            "example": "value1=1&value2=2"
        },
        "x_forwarded_for": {
            "type": "string",
            "description": "The value of the X-Forwarded-For request header",
            "example": "17.7.7.1"
        },
        "port": { 
           "type": "integer",
           "description": "The endpoint port",
           "example": 443
        },
        "user_agent": {
            "type": "string",
            "description": "The value of the User-Agent request header",
            "example": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
        },
        "client_ip": {
            "type": "string",
            "description": "The IP address connecting to the endpoint",
            "example": "15.248.6.6"
        }
    }
}
```

**Contoh kebijakan**  
Berikut ini adalah contoh kebijakan Cedar yang menggunakan data permintaan HTTP.

```
forbid(principal, action, resource) when {
   context.http_request.http_method == "POST"
   && !(context.identity.roles.contains("Administrator"))
 };
```

## Aliran TCP
<a name="default-context-tcp-flow"></a>

Saat kebijakan dievaluasi, Akses Terverifikasi menyertakan data tentang aliran TCP saat ini dalam konteks Cedar di bawah kunci. `context.tcp_flow`

```
{
    "title": "TCP flow data included by Verified Access",
    "type": "object",
    "properties": {
        "destination_ip": {
            "type": "string",
            "description": "The IP address of the target",
            "example": "192.100.1.3"
        },
        "destination_port": {
            "type": "string",
            "description": "The target port",
            "example": 22
        },
        "client_ip": {
            "type": "string",
            "description": "The IP address connecting to the endpoint",
            "example": "172.154.16.9"
        }
    }
}
```

# AWS IAM Identity Center konteks untuk data kepercayaan Akses Terverifikasi
<a name="trust-data-iam"></a>

Saat kebijakan dievaluasi, jika Anda mendefinisikan AWS IAM Identity Center sebagai penyedia kepercayaan, Akses Terverifikasi AWS sertakan data kepercayaan dalam konteks Cedar di bawah kunci yang Anda tentukan sebagai “Nama Referensi Kebijakan” pada konfigurasi penyedia kepercayaan. Anda dapat menulis kebijakan yang mengevaluasi terhadap data kepercayaan jika Anda memilih.

**catatan**  
Kunci konteks untuk penyedia kepercayaan Anda berasal dari nama referensi kebijakan yang Anda konfigurasikan saat membuat penyedia kepercayaan. Misalnya, jika Anda mengonfigurasi nama referensi kebijakan sebagai “idp123", kunci konteksnya adalah “context.idp123". Periksa apakah Anda menggunakan kunci konteks yang benar saat membuat kebijakan.

[Skema JSON](https://json-schema.org/) berikut menunjukkan data mana yang termasuk dalam evaluasi.

```
{
   "title": "AWS IAM Identity Center context specification",
   "type": "object",
   "properties": {
     "user": {
       "type": "object",
       "properties": {
         "user_id": {
           "type": "string",
           "description": "a unique user id generated by AWS IdC"
         },
         "user_name": {
           "type": "string",
           "description": "username provided in the directory"
         },
         "email": {
           "type": "object",
           "properties": {
             "address": {
               "type": "email",
               "description": "email address associated with the user"
             },
             "verified": {
               "type": "boolean",
               "description": "whether the email address has been verified by AWS IdC"
             }
           }
         }
       }
     },
     "groups": {
       "type": "object",
       "description": "A list of groups the user is a member of",
       "patternProperties": {
         "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$": {
           "type": "object",
           "description": "The Group ID of the group",
           "properties": {
             "group_name": {
               "type": "string",
               "description": "The customer-provided name of the group"
             }
           }
         }
       }
     }
   }
 }
```

Berikut ini adalah contoh kebijakan yang mengevaluasi terhadap data kepercayaan yang diberikan oleh AWS IAM Identity Center.

```
permit(principal, action, resource) when {
   context.idc.user.email.verified == true
   // User is in the "sales" group with specific ID
   && context.idc.groups has "c242c5b0-6081-1845-6fa8-6e0d9513c107"
 };
```

**catatan**  
Karena nama grup dapat diubah, IAM Identity Center mengacu pada grup yang menggunakan ID grup mereka. Ini membantu menghindari melanggar pernyataan kebijakan saat mengubah nama grup.

# Konteks penyedia kepercayaan pihak ketiga untuk data kepercayaan Akses Terverifikasi
<a name="trust-data-third-party-trust"></a>

Bagian ini menjelaskan data kepercayaan yang diberikan Akses Terverifikasi AWS oleh penyedia kepercayaan pihak ketiga.

**catatan**  
Kunci konteks untuk penyedia kepercayaan Anda berasal dari nama referensi kebijakan yang Anda konfigurasikan saat membuat penyedia kepercayaan. Misalnya, jika Anda mengonfigurasi nama referensi kebijakan sebagai “idp123", kunci konteksnya adalah “context.idp123". Pastikan Anda menggunakan kunci konteks yang benar saat membuat kebijakan.

**Topics**
+ [Ekstensi browser](#trust-data-browser)
+ [Jamf](#trust-data-iam-jamf)
+ [CrowdStrike](#trust-data-iam-cs)
+ [JumpCloud](#trust-data-jc)

## Ekstensi browser
<a name="trust-data-browser"></a>

Jika Anda berencana untuk memasukkan konteks kepercayaan perangkat ke dalam kebijakan akses Anda, maka Anda akan memerlukan ekstensi browser Akses AWS Terverifikasi, atau ekstensi browser mitra lain. Akses Terverifikasi saat ini mendukung browser Google Chrome dan Mozilla Firefox.

Saat ini kami mendukung tiga penyedia kepercayaan perangkat: Jamf (yang mendukung perangkat macOS) CrowdStrike , (yang mendukung perangkat Windows 11 dan Windows 10), JumpCloud dan (yang mendukung Windows dan macOS). 
+ Jika Anda menggunakan data kepercayaan **Jamf** dalam kebijakan Anda, pengguna Anda harus mengunduh dan menginstal ekstensi Akses Terverifikasi AWS browser dari [toko web Chrome](https://chromewebstore.google.com/category/extensions) atau [situs Add-on Firefox](https://addons.mozilla.org/en-US/firefox/) di perangkat mereka.
+ Jika Anda menggunakan data **CrowdStrike**kepercayaan dalam kebijakan Anda, pertama-tama pengguna Anda harus menginstal [Host Pesan Akses Terverifikasi AWS Asli](https://d3p8dc6667u8pq.cloudfront.net/WPF/latest/AWS_Verified_Access_Native_Messaging_Host.msi) (tautan unduhan langsung). Komponen ini diperlukan untuk mendapatkan data kepercayaan dari CrowdStrike agen yang berjalan di perangkat pengguna. Kemudian, setelah menginstal komponen ini, pengguna harus menginstal ekstensi Akses Terverifikasi AWS browser dari [toko web Chrome](https://chromewebstore.google.com/category/extensions) atau [situs Add-on Firefox](https://addons.mozilla.org/en-US/firefox/) di perangkat mereka.
+ Jika Anda menggunakan **JumpCloud**, pengguna Anda harus memiliki ekstensi JumpCloud browser dari [toko web Chrome](https://chromewebstore.google.com/category/extensions) atau [situs Add-on Firefox](https://addons.mozilla.org/en-US/firefox/) yang diinstal pada perangkat mereka.

## Jamf
<a name="trust-data-iam-jamf"></a>

Jamf adalah penyedia kepercayaan pihak ketiga. Ketika kebijakan dievaluasi, jika Anda mendefinisikan Jamf sebagai penyedia kepercayaan, Akses Terverifikasi menyertakan data kepercayaan dalam konteks Cedar di bawah kunci yang Anda tentukan sebagai “Nama Referensi Kebijakan” pada konfigurasi penyedia kepercayaan. Anda dapat menulis kebijakan yang mengevaluasi terhadap data kepercayaan jika Anda memilih. [Skema JSON](https://json-schema.org/) berikut menunjukkan data mana yang termasuk dalam evaluasi.

Untuk informasi selengkapnya tentang penggunaan Jamf dengan Akses Terverifikasi, lihat [Mengintegrasikan AWS Verified Access dengan Jamf Device Identity](https://docs.jamf.com/technical-papers/jamf-security/aws-verified-access/index.html) di situs web Jamf.

```
{
    "title": "Jamf device data specification",
    "type": "object",
    "properties": {
        "iss": {
            "type": "string",
            "description": "\"Issuer\" - the Jamf customer ID"
        },
        "iat": {
            "type": "integer",
            "description": "\"Issued at Time\" - a unixtime (seconds since epoch) value of when the device information data was generated"
        },
        "exp": {
            "type": "integer",
            "description": "\"Expiration\" - a unixtime (seconds since epoch) value for when this device information is no longer valid"
        },
        "sub": {
            "type": "string",
            "description": "\"Subject\" - either the hardware UID or a value generated based on device location"
        },
        "groups": {
            "type": "array",
            "description": "Group IDs from UEM connector sync",
            "items": {
                "type": "string"
            }
        },
        "risk": {
            "type": "string",
            "enum": [
                "HIGH",
                "MEDIUM",
                "LOW",
                "SECURE",
                "NOT_APPLICABLE"
            ],
            "description": "a Jamf-reported level of risk associated with the device."
        },
        "osv": {
            "type": "string",
            "description": "The version of the OS that is currently running, in Apple version number format (https://support.apple.com/en-us/HT201260)"
        }
    }
}
```

Berikut ini adalah contoh kebijakan yang mengevaluasi terhadap data kepercayaan yang diberikan oleh Jamf.

```
permit(principal, action, resource) when {
   context.jamf.risk == "LOW"
};
```

Cedar menyediakan `.contains()` fungsi yang berguna untuk membantu dengan enum seperti skor risiko Jamf.

```
permit(principal, action, resource) when {
   ["LOW", "SECURE"].contains(context.jamf.risk)
};
```

## CrowdStrike
<a name="trust-data-iam-cs"></a>

CrowdStrike adalah penyedia kepercayaan pihak ketiga. Ketika kebijakan dievaluasi, jika Anda mendefinisikan CrowdStrike sebagai penyedia kepercayaan, Akses Terverifikasi menyertakan data kepercayaan dalam konteks Cedar di bawah kunci yang Anda tentukan sebagai “Nama Referensi Kebijakan” pada konfigurasi penyedia kepercayaan. Anda dapat menulis kebijakan yang mengevaluasi terhadap data kepercayaan jika Anda memilih. [Skema JSON](https://json-schema.org/) berikut menunjukkan data mana yang termasuk dalam evaluasi.

Untuk informasi selengkapnya tentang penggunaan CrowdStrike dengan Akses Terverifikasi, lihat [Mengamankan aplikasi pribadi dengan CrowdStrike dan Akses Terverifikasi AWS](https://github.com/CrowdStrike/aws-verified-access/) di GitHub situs web.

```
{
  "title": "CrowdStrike device data specification",
  "type": "object",
  "properties": {
    "assessment": {
      "type": "object",
      "description": "Data about CrowdStrike's assessment of the device",
      "properties": {
        "overall": {
          "type": "integer",
          "description": "A single metric, between 1-100, that accounts as a weighted average of the OS and and Sensor Config scores"
        },
        "os": {
          "type": "integer",
          "description": "A single metric, between 1-100, that accounts for the OS-specific settings monitored on the host"
        },
        "sensor_config": {
          "type": "integer",
          "description": "A single metric, between 1-100, that accounts for the different sensor policies monitored on the host"
        },
        "version": {
          "type": "string",
          "description": "The version of the scoring algorithm being used"
        }
      }
    },
    "cid": {
      "type": "string",
      "description": "Customer ID (CID) unique to the customer's environment"
    },
    "exp": {
      "type": "integer",
      "description": "unixtime, The expiration time of the token"
    },
    "iat": {
      "type": "integer",
      "description": "unixtime, The issued time of the token"
    },
    "jwk_url": {
      "type": "string",
      "description": "URL that details the JWT signing"
    },
    "platform": {
      "type": "string",
      "enum": ["Windows 10", "Windows 11", "macOS"],
      "description": "Operating system of the endpoint"
    },
    "serial_number": {
      "type": "string",
      "description": "The serial number of the device derived by unique system information"
    },
    "sub": {
      "type": "string",
      "description": "Unique CrowdStrike Agent ID (AID) of machine"
    },
    "typ": {
      "type": "string",
      "enum": ["crowdstrike-zta+jwt"],
      "description": "Generic name for this JWT media. Client MUST reject any other type"
    }
  }
}
```

Berikut ini adalah contoh kebijakan yang mengevaluasi terhadap data kepercayaan yang diberikan oleh CrowdStrike.

```
permit(principal, action, resource) when {
   context.crowdstrike.assessment.overall > 50
};
```

## JumpCloud
<a name="trust-data-jc"></a>

JumpCloud adalah penyedia kepercayaan pihak ketiga. Ketika kebijakan dievaluasi, jika Anda mendefinisikan JumpCloud sebagai penyedia kepercayaan, Akses Terverifikasi menyertakan data kepercayaan dalam konteks Cedar di bawah kunci yang Anda tentukan sebagai “Nama Referensi Kebijakan” pada konfigurasi penyedia kepercayaan. Anda dapat menulis kebijakan yang mengevaluasi terhadap data kepercayaan jika Anda memilih. [Skema JSON](https://json-schema.org/) berikut menunjukkan data mana yang termasuk dalam evaluasi.

Untuk informasi selengkapnya tentang penggunaan JumpCloud dengan Akses AWS Terverifikasi, lihat [Mengintegrasikan JumpCloud dan Akses AWS Terverifikasi](https://jumpcloud.com/support/integrate-with-aws-verified-access) di JumpCloud situs web.

```
{
  "title": "JumpCloud device data specification",
  "type": "object",
  "properties": {
    "device": {
      "type": "object",
      "description": "Properties of the device",
      "properties": {
        "is_managed": {
          "type": "boolean",
          "description": "Boolean to indicate if the device is under management"
        }
      }
    },
    "exp": {
      "type": "integer",
      "description": "Expiration. Unixtime of the token's expiration."
    },
    "durt_id": {
      "type": "string",
      "description": "Device User Refresh Token ID. Unique ID that represents the device + user."
    },
    "iat": {
      "type": "integer",
      "description": "Issued At. Unixtime of the token's issuance."
    },
    "iss": {
      "type": "string",
      "description": "Issuer. This will be 'go.jumpcloud.com'"
    },
    "org_id": {
      "type": "string",
      "description": "The JumpCloud Organization ID"
    },
    "sub": {
      "type": "string",
      "description": "Subject. The managed JumpCloud user ID on the device."
    },
    "system": {
      "type": "string",
      "description": "The JumpCloud system ID"
    }
  }
}
```

Berikut ini adalah contoh kebijakan yang mengevaluasi terhadap konteks kepercayaan yang diberikan oleh JumpCloud.

```
permit(principal, action, resource) when {
   context.jumpcloud.org_id == 'Unique_organization_identifier'
};
```

# Klaim pengguna lulus dan verifikasi tanda tangan di Akses Terverifikasi
<a name="user-claims-passing"></a>

Setelah Akses Terverifikasi AWS instans berhasil mengautentikasi pengguna, instans mengirimkan klaim pengguna yang diterima dari iDP ke titik akhir Akses Terverifikasi. Klaim pengguna ditandatangani sehingga aplikasi dapat memverifikasi tanda tangan dan juga memverifikasi bahwa klaim dikirim oleh Akses Terverifikasi. Selama proses ini, header HTTP berikut ditambahkan:

`x-amzn-ava-user-context`

Header ini berisi klaim pengguna dalam format token web JSON (JWT). Format JWT mencakup header, payload, dan tanda tangan yang dikodekan URL base64. Akses Terverifikasi menggunakan ES384 (algoritma tanda tangan ECDSA menggunakan algoritma hash SHA-384) untuk menghasilkan tanda tangan JWT.

Aplikasi dapat menggunakan klaim ini untuk personalisasi atau pengalaman khusus pengguna lainnya. Pengembang aplikasi harus mendidik diri mereka sendiri mengenai tingkat keunikan dan verifikasi setiap klaim yang diberikan oleh penyedia identitas sebelum digunakan. Secara umum, `sub` klaim adalah cara terbaik untuk mengidentifikasi pengguna tertentu.

**Topics**
+ [JWT untuk klaim pengguna OIDC](#oidc-sample)
+ [Klaim pengguna JWT untuk IAM Identity Center](#IdC-sample)
+ [Kunci publik](#public-keys)
+ [Mengambil dan mendekode JWT](#sample-code)

## Contoh: Menandatangani JWT untuk klaim pengguna OIDC
<a name="oidc-sample"></a>

Contoh berikut menunjukkan seperti apa header dan payload untuk klaim pengguna OIDC dalam format JWT.

Contoh header:

```
{
   "alg": "ES384",
   "kid": "12345678-1234-1234-1234-123456789012",
   "signer": "arn:aws:ec2:us-east-1:123456789012:verified-access-instance/vai-abc123xzy321a2b3c", 
   "iss": "OIDC Issuer URL",
   "exp": "expiration" (120 secs)
}
```

Contoh muatan:

```
{
   "sub": "xyzsubject",
   "email": "xxx@amazon.com",
   "email_verified": true,
   "groups": [
      "Engineering",
      "finance"
   ],
   "additional_user_context": {
      "aud": "xxx",
      "exp": 1000000000,
      "groups": [
         "group-id-1",
         "group-id-2"
      ],
      "iat": 1000000000,
      "iss": "https://oidc-tp.com/",
      "sub": "xyzsubject",
      "ver": "1.0"
   }
}
```

## Contoh: Menandatangani JWT untuk klaim pengguna IAM Identity Center
<a name="IdC-sample"></a>

Contoh berikut menunjukkan seperti apa header dan payload untuk klaim pengguna IAM Identity Center dalam format JWT.

**catatan**  
Untuk IAM Identity Center, hanya informasi pengguna yang akan dimasukkan dalam klaim.

Contoh header:

```
{
   "alg": "ES384",
   "kid": "12345678-1234-1234-1234-123456789012",
   "signer": "arn:aws:ec2:us-east-1:123456789012:verified-access-instance/vai-abc123xzy321a2b3c", 
   "iss": "arn:aws:ec2:us-east-1:123456789012:verified-access-trust-provider/vatp-abc123xzy321a2b3c",
   "exp": "expiration" (120 secs)
}
```

Contoh muatan:

```
{
    "user": {
        "user_id": "f478d4c8-a001-7064-6ea6-12423523",
        "user_name": "test-123",
        "email": {
            "address": "test@amazon.com",
            "verified": false
        }
    }
}
```

## Kunci publik
<a name="public-keys"></a>

Karena instans Akses Terverifikasi tidak mengenkripsi klaim pengguna, sebaiknya Anda mengonfigurasi titik akhir Akses Terverifikasi untuk menggunakan HTTPS. Jika Anda mengonfigurasi titik akhir Akses Terverifikasi untuk menggunakan HTTP, pastikan untuk membatasi lalu lintas ke titik akhir menggunakan grup keamanan.

Untuk memastikan keamanan, Anda harus memverifikasi tanda tangan sebelum melakukan otorisasi berdasarkan klaim, dan memvalidasi bahwa `signer` bidang di header JWT berisi ARN instance Akses Terverifikasi yang diharapkan.

Untuk mendapatkan kunci publik, dapatkan ID kunci dari header JWT dan gunakan untuk mencari kunci publik dari titik akhir.

Titik akhir untuk masing-masing Wilayah AWS adalah sebagai berikut:

`https://public-keys.prod.verified-access.<region>.amazonaws.com/<key-id>`

## Contoh: Mengambil dan mendekode JWT
<a name="sample-code"></a>

Contoh kode berikut menunjukkan cara mendapatkan ID kunci, kunci publik, dan payload di Python 3.9.

```
import jwt
import requests
import base64
import json

# Step 1: Validate the signer
expected_verified_access_instance_arn = 'arn:aws:ec2:region-code:account-id:verified-access-instance/verified-access-instance-id'

encoded_jwt = headers.dict['x-amzn-ava-user-context']
jwt_headers = encoded_jwt.split('.')[0]
decoded_jwt_headers = base64.b64decode(jwt_headers)
decoded_jwt_headers = decoded_jwt_headers.decode("utf-8")
decoded_json = json.loads(decoded_jwt_headers)
received_verified_access_instance_arn = decoded_json['signer']

assert expected_verified_access_instance_arn == received_verified_access_instance_arn, "Invalid Signer"

# Step 2: Get the key id from JWT headers (the kid field)
kid = decoded_json['kid']

# Step 3: Get the public key from regional endpoint
url = 'https://public-keys.prod.verified-access.' + region + '.amazonaws.com/' + kid
req = requests.get(url)
pub_key = req.text

# Step 4: Get the payload
payload = jwt.decode(encoded_jwt, pub_key, algorithms=['ES384'])
```