Menyamarkan dan menyembunyikan data

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat Dokumentasi Apigee Edge.

Saat Anda men-debug panggilan API di Apigee, konten terkadang dapat berisi data sensitif, seperti kartu kredit atau informasi kesehatan identitas pribadi (PHI) yang harus disamarkan.

Apigee menyediakan berbagai cara untuk menyamarkan atau menyembunyikan data sensitif dari Sesi debug dan Trace.

Menyamarkan data sensitif

Apigee memungkinkan Anda menentukan konfigurasi mask untuk menyamarkan data tertentu dalam sesi debug dan pelacakan. Jika data disamarkan, data akan diganti dengan tanda bintang dalam output rekaman aktivitas. Anda dapat menyamarkan data sensitif dan tidak mengubah data yang tidak sensitif. Contoh:

<ServiceRequest>
  <request-id>B540A938-F551</request-id>
  <customer-name>**********</customer-name>
</ServiceRequest>

Konfigurasi mask adalah resource singleton yang Anda tentukan di tingkat lingkungan. Secara default, tidak ada data masking yang diterapkan.

Penyamaran data hanya berlaku untuk data yang diambil dalam sesi debug untuk proxy API. Data masking tidak memengaruhi data yang dikirim ke target atau aplikasi klien. Jika Anda mengubah konfigurasi penyamaran data, Anda harus memulai sesi debug baru untuk melihat efek perubahan Anda.

Struktur konfigurasi mask

Masker adalah file berformat JSON yang memungkinkan Anda mengidentifikasi data sensitif dalam sumber berikut:

  • Payload XML: Dengan menggunakan XPath, Anda mengidentifikasi elemen XML yang akan difilter dari permintaan atau payload pesan respons.
  • Payload JSON: Dengan menggunakan JSONPath, Anda mengidentifikasi properti JSON yang akan difilter payload pesan respons atau permintaan.
  • Variabel flow: Anda dapat menentukan daftar variabel yang harus disamarkan di debug {i>output<i} tersebut. Saat Anda menentukan request.content, response.content, atau variabel alur message.content, isi permintaan/respons juga disamarkan.

Berikut ini contoh struktur dasar konfigurasi mask dalam format JSON. Untuk mengetahui informasi selengkapnya tentang kolom konfigurasi mask yang ditampilkan dalam contoh, lihat DebugMask.

{
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "responseXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "faultXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "requestJSONPaths": [
    "$.store.book[*].author"
  ],
  "responseJSONPaths": [
    "$.store.book[*].author"
  ],
  "faultJSONPaths": [
    "$.store.book[*].author"
  ],
  "variables": [
    "request.header.user-name",
    "request.formparam.password",
    "myCustomVariable"
  ]
}

Melihat konfigurasi mask di lingkungan menggunakan API

Untuk melihat konfigurasi mask di lingkungan, berikan GET ke resource berikut:

/organizations/{org}/environments/{env}/debugmask

Contoh:

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask" \
  -X GET \
  -H "Authorization: Bearer $TOKEN"

Jika $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan di Mendapatkan token akses OAuth 2.0. Untuk mengetahui informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi tentang variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan API Apigee.

Berikut ini contoh responsnya:

{
  "name": "organizations/myorg/environments/test/debugmask"
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "responseXPaths": [
    "/myco:Greeting/myco:User"
  ]
}

Memperbarui konfigurasi mask di lingkungan menggunakan API

Untuk memperbarui resource singleton konfigurasi mask di lingkungan, berikan PATCH ke resource berikut:

/organizations/{org}/environments/{env}/debugmask

Secara opsional, Anda dapat meneruskan parameter kueri berikut:

  • Setel parameter kueri updateMask untuk menentukan mask kolom berisi daftar yang dipisahkan koma yang berisi nama kolom yang sepenuhnya memenuhi syarat di mask debug. Contoh: "requestJSONPaths"
  • Setel parameter kueri replaceRepeatedFields untuk menentukan apakah akan mengganti nilai yang ada di mask debug saat melakukan update. Secara default, nilai ditambahkan (false)

Contoh:

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask" \
  -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-type: application/json" \
  -d \
  '{
     "namespaces": {
       "ns1": "http://example.com"
     },
     "requestXPaths": [
       "/ns1:employee/ns1:name"
     ]
   }'

Jika $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan di Mendapatkan token akses OAuth 2.0. Untuk mengetahui informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi tentang variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan API Apigee.

Menyamarkan XML cakupan namespace

Jika Anda ingin menyamarkan data XML dan data tersebut menggunakan namespace XML, konfigurasi mask Anda harus mereferensikan namespace tersebut dengan elemen namespaces. Ini tetap ada meskipun payload XML menggunakan namespace default atau awalan namespace.

Misalnya, Anda ingin menyamarkan nama karyawan dalam {i>payload<i} permintaan, dan XML tidak menggunakan namespace XML:

<employee>
  <name>Shanmu Tharman</name>
  <age>50</age>
</employee>

Oleh karena itu, konfigurasi debugmask tidak memerlukan elemen namespaces:

{
  "requestXPaths": [
    "/employee/name"
  ]
}

Jika payload XML menggunakan namespace dengan awalan:

<cym:employee xmlns:cym="http://cymbalgroup.com" xmlns:id="http://cymbalgroup.com/identity">
  <id:name>Shanmu Tharman</id:name>
  <id:age>50</id:age>
</cym:employee>

Kemudian, konfigurasi mask harus berisi namespaces . Anda dapat memilih awalan namespace yang valid dalam konfigurasi debugmask; awalan namespace dalam konfigurasi debugmask mungkin sama dengan awalan namespace digunakan dalam XML, tetapi itu tidak diperlukan.

{
  "namespaces": {
    "cym": "http://cymbalgroup.com",
    "idns": "http://cymbalgroup.com/identity"
  },
  "requestXPaths": [
    "/cym:employee/idns:name"
  ]
}

Jika Payload XML menggunakan namespace tanpa awalan, artinya namespace default:

<employee xmlns="http://cymbalgroup.com" xmlns:id="http://cymbalgroup.com/identity">
  <id:name>Shanmu Tharman</id:name>
  <id:age>50</id:age>
</employee>

Maka konfigurasi debugmask tetap harus menentukan awalan dalam namespaces yang sesuai dengan namespace default tersebut. Anda dapat menggunakan awalan unik yang Anda sukai.

{
  "namespaces": {
    "p1": "http://cymbalgroup.com",
    "id": "http://cymbalgroup.com/identity"
  },
  "requestXPaths": [
    "/p1:employee/id:name"
  ]
}

Catatan Konfigurasi Lainnya

  • Dengan elemen konfigurasi *XPaths dan *JSONPaths, Anda dapat menyamarkan data yang muncul di request, response, atau fault membuat pesan teks. Namun, konten pesan lengkap juga dapat ditangkap oleh sesi debug. Anda juga dapat ingin mengonfigurasi request.content atau response.content di variables untuk mencegah data sensitif ditampilkan.

  • Jika Anda menggunakan Kebijakan ServiceInfo untuk membuat permintaan, informasi dalam permintaan, dan respons untuk info tersebut tidak akan disamarkan menggunakan elemen konfigurasi seperti requestXPaths atau responseJSONPaths. Jika ingin menyamarkan data tersebut, Anda harus menentukan nama variabel untuk pesan permintaan dan respons di kebijakan ServiceInfo, lalu tentukan variabel tersebut di bagian variables pada debugmask. Misalnya, jika kebijakan ServiceInfo Anda menggunakan:

    <ServiceCallout name='SC-1'>
      <Request variable='rbacRequest'>
        <Set>
          <Payload contentType='application/json'>{ ... }</Payload>
           ...
    

    Maka Anda harus menyertakan rbacRequest.content dalam variables untuk konfigurasi debugmask.

    {
      ...
      "variables": [
        "request.content",
        "response.content",
        "rbacRequest.content"
      ]
    }

Menyembunyikan data sensitif

Selain penyamaran, Anda dapat mencegah data sensitif muncul di alat Trace dan sesi debug dengan memilih nama yang diawali dengan private. untuk variabel kustom.

Misalnya, saat menggunakan Kunci kebijakan Operasi Peta Nilai untuk mengambil nilai dari peta nilai kunci, Anda dapat memilih nama variabel seperti berikut untuk memastikan nilai tidak muncul di sesi Trace atau debug:

<KeyValueMapOperations name='KVM-Get-1'>
    <Scope>environment</Scope>
    <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
    <MapName>settings</MapName>
    <Get assignTo='private.privatekey'>
      <Key>
        <Parameter>rsa_private_key</Parameter>
      </Key>
    </Get>
  </KeyValueMapOperations>

Variabel tanpa awalan private. akan ditampilkan dalam teks yang jelas di Trace dan sesi debug meskipun data tersebut berasal dari penyimpanan data terenkripsi seperti nilai kunci peta. Gunakan penyamaran jika Anda ingin menyamarkan nilai ini.