

# Rekomendasi enkripsi
<a name="recommendations-encryption"></a>

Saat Anda menentukan rekomendasi, layanan mengenkripsi **konfigurasi rekomendasi dan **hasil rekomendasi**** menggunakan enkripsi amplop dengan SDK Enkripsi. `kmsKeyArn` AWS Semua metadata rekomendasi lainnya (nama, jenis, status) tetap dienkripsi dengan kunci yang dimiliki. AWS 

`kmsKeyArn`Ini ditentukan pada waktu pembuatan melalui`StartRecommendation`.

## Cara kerjanya
<a name="recommendations-encryption-how-it-works"></a>

Enkripsi rekomendasi menggunakan AWS Encryption SDK untuk enkripsi amplop. Ketika layanan menulis atau membaca data rekomendasi, ia memanggil KMS untuk menghasilkan atau mendekripsi kunci data. Hasil rekomendasi juga disimpan di S3 dengan SSE-KMS menggunakan kunci yang dikelola pelanggan yang sama.

Pada waktu API, layanan memvalidasi bahwa pemanggil memiliki izin KMS menggunakan pemeriksaan dry-run (Forward Access Sessions). Ini menangkap masalah izin dengan segera daripada gagal secara asinkron selama alur kerja rekomendasi.

Ketika alur kerja rekomendasi berjalan secara asinkron, service principal (`bedrock-agentcore.amazonaws.com`) mendekripsi konfigurasi dan mengenkripsi hasilnya. Kepala layanan harus memiliki `kms:GenerateDataKey` dan `kms:Decrypt` izin dalam kebijakan utama.

AgentCore pengoptimalan hanya mendukung kunci KMS enkripsi simetris. Kunci KMS harus berada di AWS Wilayah yang sama dengan rekomendasi.

### Mengkonfigurasi izin untuk menggunakan kunci KMS yang dikelola pelanggan
<a name="recommendations-encryption-key-policy"></a>

Kebijakan kunci berikut memberikan izin minimum yang diperlukan untuk enkripsi rekomendasi. Kebijakan ini memiliki tiga pernyataan:
+  **AllowCallerAccess**— Memungkinkan pengguna atau peran IAM untuk memvalidasi kunci melalui. `DescribeKey`
+  **AllowCallerCryptoOps**— Memungkinkan pengguna atau peran IAM untuk mengenkripsi dan mendekripsi, dicakup oleh konteks enkripsi.
+  **AllowServicePrincipalAccess**— Memungkinkan prinsipal AgentCore layanan untuk mengenkripsi dan mendekripsi data rekomendasi selama alur kerja rekomendasi asinkron, dicakup oleh akun sumber dan sumber ARN.

```
{
"Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCallerAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyRecommendationRole"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*"
    },
    {
      "Sid": "AllowCallerCryptoOps",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyRecommendationRole"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:bedrock-agentcore:recommendationArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:recommendation/*"
        }
      }
    },
    {
      "Sid": "AllowServicePrincipalAccess",
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock-agentcore.amazonaws.com"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:recommendation/*"
        }
      }
    }
  ]
}
```

Kebijakan tersebut berisi pernyataan berikut:
+  **AllowCallerAccess**— Memberikan `kms:DescribeKey` izin peran IAM untuk validasi kunci pada waktu pembuatan rekomendasi. Ganti {{111122223333}} dengan ID akun Anda dan {{MyRecommendationRole}} dengan peran IAM atau pengguna yang memulai rekomendasi.
+  **AllowCallerCryptoOps**— Memberikan peran `kms:GenerateDataKey` dan `kms:Decrypt` izin IAM, dicakup oleh konteks enkripsi. `aws:bedrock-agentcore:recommendationArn` Ganti {{111122223333}}{{MyRecommendationRole}},, dan {{us-east-1}} dengan nilai-nilai Anda. Untuk mengizinkan akses ke semua rekomendasi di akun Anda, gunakan wildcard dengan`StringLike`:`arn:aws:bedrock-agentcore:us-east-1:111122223333:recommendation/*`.
+  **AllowServicePrincipalAccess**— Memberikan prinsip AgentCore layanan `kms:GenerateDataKey` dan `kms:Decrypt` izin untuk mengenkripsi dan mendekripsi data rekomendasi selama alur kerja asinkron. Dicakup oleh akun sumber dan sumber ARN (`aws:SourceArn`) untuk mencegah serangan wakil yang membingungkan. Ganti {{us-east-1}} dan {{111122223333}} dengan wilayah dan ID akun Anda.

### Mencakup akses ke kunci KMS yang dikelola pelanggan
<a name="recommendations-encryption-scoping"></a>

Anda dapat menggunakan konteks enkripsi untuk mengurangi akses ke kunci yang dikelola pelanggan. AgentCore pengoptimalan mencakup konteks enkripsi berikut di semua operasi KMS:

```
{
  "aws:bedrock-agentcore:recommendationArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:recommendation/recommendation-id"
}
```

Anda dapat menggunakan konteks enkripsi ini dalam kondisi kebijakan utama untuk membatasi operasi KMS ke rekomendasi tertentu, seperti yang ditunjukkan dalam `AllowCallerCryptoOps` pernyataan dalam contoh kebijakan kunci di atas. Perhatikan bahwa `AllowServicePrincipalAccess` penggunaan `aws:SourceArn` untuk pelingkupan daripada konteks enkripsi.

## Memulai rekomendasi dengan kunci KMS yang dikelola pelanggan
<a name="recommendations-encryption-creating"></a>

Tentukan `kmsKeyArn` parameter saat memanggil`StartRecommendation`:

**Example**  

```
agentcore run recommendation \
  -t system-prompt \
  -r MyAgent \
  -e Builtin.Correctness \
  --inline "You are a helpful assistant" \
  --kms-key arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

```
aws bedrock-agentcore start-recommendation \
  --name "MyEncryptedRecommendation" \
  --type SYSTEM_PROMPT_RECOMMENDATION \
  --kms-key-arn "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" \
  --recommendation-config '{
    "systemPromptRecommendationConfig": {
      "systemPrompt": {
        "text": "You are a helpful assistant."
      },
      "agentTraces": {
        "cloudwatchLogs": {
          "logGroupArns": ["arn:aws:logs:us-east-1:111122223333:log-group:/aws/bedrock-agentcore/sessions/my-agent"],
          "serviceNames": ["my-agent.DEFAULT"],
          "startTime": "2025-01-01T00:00:00Z",
          "endTime": "2025-01-02T00:00:00Z"
        }
      },
      "evaluationConfig": {
        "evaluators": [{"evaluatorArn": "arn:aws:bedrock-agentcore:::evaluator/Builtin.Helpfulness"}]
      }
    }
  }'
```

```
import boto3

client = boto3.client('bedrock-agentcore')

response = client.start_recommendation(
    name='MyEncryptedRecommendation',
    type='SYSTEM_PROMPT_RECOMMENDATION',
    kmsKeyArn='arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab',
    recommendationConfig={
        'systemPromptRecommendationConfig': {
            'systemPrompt': {
                'text': 'You are a helpful assistant.'
            },
            'agentTraces': {
                'cloudwatchLogs': {
                    'logGroupArns': ['arn:aws:logs:us-east-1:111122223333:log-group:/aws/bedrock-agentcore/sessions/my-agent'],
                    'serviceNames': ['my-agent.DEFAULT'],
                    'startTime': '2025-01-01T00:00:00Z',
                    'endTime': '2025-01-02T00:00:00Z'
                }
            },
            'evaluationConfig': {
                'evaluators': [{'evaluatorArn': 'arn:aws:bedrock-agentcore:::evaluator/Builtin.Helpfulness'}]
            }
        }
    }
)

print(f"Recommendation ID: {response['recommendationId']}")
```

## Memantau penggunaan KMS untuk rekomendasi
<a name="recommendations-encryption-monitoring"></a>

Nama CloudTrail acara berikut muncul untuk operasi KMS rekomendasi:
+  `GenerateDataKey`— Saat memulai rekomendasi (mengenkripsi konfigurasi) dan ketika alur kerja rekomendasi selesai (mengenkripsi hasilnya). `encryptionContext`Bidang berisi`aws:bedrock-agentcore:recommendationArn`.
+  `Decrypt`— Saat alur kerja rekomendasi memproses konfigurasi, atau saat mengambil hasil rekomendasi.
+  `DescribeKey`— Saat memvalidasi kunci pada waktu pembuatan rekomendasi.

## Perilaku ketika kunci menjadi tidak tersedia
<a name="recommendations-encryption-unavailable"></a>

Jika Anda menonaktifkan atau menghapus kunci KMS yang dikelola pelanggan yang digunakan oleh rekomendasi:
+  **StartRecommendation**— Gagal dalam validasi dengan`ValidationException`.
+  **GetRecommendation**— Gagal dengan `ValidationException` menunjukkan kunci KMS dinonaktifkan atau dihapus.
+  **ListRecommendations**— Berhasil karena daftar mengembalikan metadata saja dan tidak memerlukan operasi KMS.
+  **DeleteRecommendation**— Berhasil karena penghapusan tidak memerlukan data rekomendasi dekripsi.