Ambil nilai-nilai rahasia - AWS IoT Greengrass

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

Ambil nilai-nilai rahasia

Gunakan layanan IPC secret manager untuk mengambil nilai-nilai rahasia dari rahasia pada perangkat inti. Anda menggunakan komponen secret manager untuk men-deploy rahasia terenkripsi ke perangkat inti. Kemudian, Anda dapat menggunakan operasi IPC untuk mendekripsi rahasia itu dan menggunakan nilainya dalam komponen kustom Anda.

SDK (Versi Minimum)

Tabel berikut menjelaskan versi minimumAWS IoT Device SDKyang harus Anda gunakan untuk mengambil nilai-nilai rahasia dari rahasia pada perangkat inti.

Otorisasi

Untuk menggunakan secrets manager dalam komponen kustom, Anda harus menentukan kebijakan otorisasi yang memungkinkan komponen Anda untuk mendapatkan nilai rahasia yang Anda simpan pada perangkat inti. Untuk informasi tentang cara menentukan kebijakan otorisasi, lihat Otorisasi komponen untuk melakukan operasi IPC.

Kebijakan otorisasi untuk secrets manager memiliki properti berikut.

Pengenal layanan IPC: aws.greengrass.SecretManager

Operasi Deskripsi Sumber daya

aws.greengrass#GetSecretValue atau *

Memungkinkan komponen untuk mendapatkan nilai rahasia yang dienkripsi pada perangkat inti.

ARN rahasia Secrets Manager, atau * untuk memungkinkan akses ke semua rahasia.

Contoh kebijakan otorisasi

Anda dapat mereferensikan contoh kebijakan otorisasi berikut untuk membantu Anda mengonfigurasi kebijakan otorisasi untuk komponen Anda.

contoh Contoh kebijakan otorisasi

Kebijakan otorisasi contoh berikut memungkinkan komponen untuk mendapatkan nilai rahasia apa pun pada perangkat inti.

catatan

Kami sarankan dalam lingkungan produksi, Anda mengurangi lingkup kebijakan otorisasi, sehingga komponen mengambil hanya rahasia yang digunakannya. Anda dapat mengubah wildcard * ke daftar ARN rahasia saat Anda men-deploy komponen.

{ "accessControl": { "aws.greengrass.SecretManager": { "com.example.MySecretComponent:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "*" ] } } } }

GetSecretValue

Mendapatkan nilai rahasia yang Anda simpan pada perangkat inti.

Operasi ini mirip dengan operasi Secrets Manager yang dapat Anda gunakan untuk mendapatkan nilai rahasia di AWS Cloud. Untuk informasi selengkapnya, lihat GetSecretValue dalam Referensi API AWS Secrets Manager.

Permintaan

Permintaan operasi ini memiliki parameter berikut:

secretId(Python:secret_id)

Nama layanan yang akan didapat. Anda dapat menentukan Amazon Resource Name (ARN) atau nama yang ramah untuk rahasia tersebut.

versionId(Python:version_id)

(Opsional) ID dari versi yang akan didapatkan.

Anda dapat menentukan versionId atau versionStage.

Jika Anda tidak menentukan versionId atau versionStage, operasi ini default ke versi dengan label AWSCURRENT.

versionStage(Python:version_stage)

(Opsional) Label penahapan dari versi yang akan didapatkan.

Anda dapat menentukan versionId atau versionStage.

Jika Anda tidak menentukan versionId atau versionStage, operasi ini default ke versi dengan label AWSCURRENT.

Response

Tanggapan operasi ini memiliki informasi berikut:

secretId(Python:secret_id)

ID dari rahasia tersebut.

versionId(Python:version_id)

ID dari versi rahasia ini.

versionStage(Python:version_stage)

Daftar label penahapan yang melekat pada versi rahasia ini.

secretValue(Python:secret_value)

Nilai dari versi rahasia ini. Objek ini, SecretValue, berisi informasi berikut.

secretString(Python:secret_string)

Bagian yang didekripsi dari informasi rahasia terlindungi yang Anda berikan kepada Secrets Manager sebagai string.

secretBinary(Python:secret_binary)

(Opsional) Bagian yang didekripsi dari informasi rahasia terlindungi yang Anda berikan kepada Secrets Manager sebagai data biner dalam bentuk himpunan byte. Properti ini berisi data biner sebagai string base64-encoded.

Properti ini tidak digunakan jika Anda membuat rahasia di konsol Secrets Manager.

Contoh

Contoh-contoh berikut ini menunjukkan cara memanggil operasi ini dalam kode komponen kustom.

Java (IPC client V1)

contoh Contoh: Dapatkan nilai rahasia

catatan

Contoh ini menggunakanIPCUtilskelas untuk membuat koneksi keAWS IoT GreengrassLayanan IPC inti. Untuk informasi selengkapnya, lihat Hubungkan ke layanan IPC inti AWS IoT Greengrass.

package com.aws.greengrass.docs.samples.ipc; import com.aws.greengrass.docs.samples.ipc.util.IPCUtils; import software.amazon.awssdk.aws.greengrass.GetSecretValueResponseHandler; import software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCClient; import software.amazon.awssdk.aws.greengrass.model.GetSecretValueRequest; import software.amazon.awssdk.aws.greengrass.model.GetSecretValueResponse; import software.amazon.awssdk.aws.greengrass.model.UnauthorizedError; import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class GetSecretValue { public static final int TIMEOUT_SECONDS = 10; public static void main(String[] args) { String secretArn = args[0]; String versionStage = args[1]; try (EventStreamRPCConnection eventStreamRPCConnection = IPCUtils.getEventStreamRpcConnection()) { GreengrassCoreIPCClient ipcClient = new GreengrassCoreIPCClient(eventStreamRPCConnection); GetSecretValueResponseHandler responseHandler = GetSecretValue.getSecretValue(ipcClient, secretArn, versionStage); CompletableFuture<GetSecretValueResponse> futureResponse = responseHandler.getResponse(); try { GetSecretValueResponse response = futureResponse.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); response.getSecretValue().postFromJson(); String secretString = response.getSecretValue().getSecretString(); System.out.println("Successfully retrieved secret value: " + secretString); } catch (TimeoutException e) { System.err.println("Timeout occurred while retrieving secret: " + secretArn); } catch (ExecutionException e) { if (e.getCause() instanceof UnauthorizedError) { System.err.println("Unauthorized error while retrieving secret: " + secretArn); } else { throw e; } } } catch (InterruptedException e) { System.out.println("IPC interrupted."); } catch (ExecutionException e) { System.err.println("Exception occurred when using IPC."); e.printStackTrace(); System.exit(1); } } public static GetSecretValueResponseHandler getSecretValue(GreengrassCoreIPCClient greengrassCoreIPCClient, String secretArn, String versionStage) { GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest(); getSecretValueRequest.setSecretId(secretArn); getSecretValueRequest.setVersionStage(versionStage); return greengrassCoreIPCClient.getSecretValue(getSecretValueRequest, Optional.empty()); } }
Python (IPC client V1)

contoh Contoh: Dapatkan nilai rahasia

catatan

Contoh ini mengasumsikan bahwa Anda menggunakan versi 1.5.4 atau yang lebih baru dari AWS IoT Device SDK untuk Python v2. Jika Anda menggunakan versi 1.5.3 SDK, lihat GunakanAWS IoT Device SDKuntuk Python v2 (klien IPC V1) untuk informasi tentang cara terhubung ke layanan IPC inti AWS IoT Greengrass.

import json import awsiot.greengrasscoreipc from awsiot.greengrasscoreipc.model import ( GetSecretValueRequest, GetSecretValueResponse, UnauthorizedError ) secret_id = 'arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef' TIMEOUT = 10 ipc_client = awsiot.greengrasscoreipc.connect() request = GetSecretValueRequest() request.secret_id = secret_id request.version_stage = 'AWSCURRENT' operation = ipc_client.new_get_secret_value() operation.activate(request) future_response = operation.get_response() response = future_response.result(TIMEOUT) secret_json = json.loads(response.secret_value.secret_string) # Handle secret value.

Contoh

Gunakan contoh berikut untuk mempelajari cara menggunakan layanan IPC secret manager dalam komponen Anda.

Contoh komponen ini mencetak nilai suatu rahasia yang Anda deploy ke perangkat inti tersebut.

penting

Contoh komponen ini mencetak nilai rahasia, jadi gunakan hanya dengan rahasia yang menyimpan data uji. Jangan gunakan komponen ini untuk mencetak nilai rahasia yang menyimpan informasi penting.

Resep

Contoh resep berikut menentukan parameter konfigurasi ARN rahasia dan memungkinkan komponen untuk mendapatkan nilai rahasia apa pun pada perangkat inti.

catatan

Kami sarankan dalam lingkungan produksi, Anda mengurangi lingkup kebijakan otorisasi, sehingga komponen mengambil hanya rahasia yang digunakannya. Anda dapat mengubah wildcard * ke daftar ARN rahasia saat Anda men-deploy komponen.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.PrintSecret", "ComponentVersion": "1.0.0", "ComponentDescription": "Prints the value of an AWS Secrets Manager secret.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.SecretManager": { "VersionRequirement": "^2.0.0", "DependencyType": "HARD" } }, "ComponentConfiguration": { "DefaultConfiguration": { "SecretArn": "", "accessControl": { "aws.greengrass.SecretManager": { "com.example.PrintSecret:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "*" ] } } } } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Install": "python3 -m pip install --user awsiotsdk", "Run": "python3 -u {artifacts:path}/print_secret.py \"{configuration:/SecretArn}\"" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "Install": "py -3 -m pip install --user awsiotsdk", "Run": "py -3 -u {artifacts:path}/print_secret.py \"{configuration:/SecretArn}\"" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.PrintSecret ComponentVersion: 1.0.0 ComponentDescription: Prints the value of a Secrets Manager secret. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.SecretManager: VersionRequirement: "^2.0.0" DependencyType: HARD ComponentConfiguration: DefaultConfiguration: SecretArn: '' accessControl: aws.greengrass.SecretManager: com.example.PrintSecret:secrets:1: policyDescription: Allows access to a secret. operations: - aws.greengrass#GetSecretValue resources: - "*" Manifests: - Platform: os: linux Lifecycle: Install: python3 -m pip install --user awsiotsdk Run: python3 -u {artifacts:path}/print_secret.py "{configuration:/SecretArn}" - Platform: os: windows Lifecycle: Install: py -3 -m pip install --user awsiotsdk Run: py -3 -u {artifacts:path}/print_secret.py "{configuration:/SecretArn}"

Artifacts

Contoh aplikasi Python berikut menunjukkan cara menggunakan layanan IPC secret manager untuk mendapatkan nilai rahasia pada perangkat inti.

import concurrent.futures import json import sys import traceback import awsiot.greengrasscoreipc from awsiot.greengrasscoreipc.model import ( GetSecretValueRequest, GetSecretValueResponse, UnauthorizedError ) TIMEOUT = 10 if len(sys.argv) == 1: print('Provide SecretArn in the component configuration.', file=sys.stdout) exit(1) secret_id = sys.argv[1] try: ipc_client = awsiot.greengrasscoreipc.connect() request = GetSecretValueRequest() request.secret_id = secret_id operation = ipc_client.new_get_secret_value() operation.activate(request) future_response = operation.get_response() try: response = future_response.result(TIMEOUT) secret_json = json.loads(response.secret_value.secret_string) print('Successfully got secret: ' + secret_id) print('Secret value: ' + str(secret_json)) except concurrent.futures.TimeoutError: print('Timeout occurred while getting secret: ' + secret_id, file=sys.stderr) except UnauthorizedError as e: print('Unauthorized error while getting secret: ' + secret_id, file=sys.stderr) raise e except Exception as e: print('Exception while getting secret: ' + secret_id, file=sys.stderr) raise e except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)

Penggunaan

Anda dapat menggunakan komponen contoh ini dengan komponen secret manager untuk men-deploy dan mencetak nilai rahasia pada perangkat inti Anda.

Untuk membuat, men-deploy, dan mencetak rahasia uji

  1. Buat rahasia Secrets Manager dengan data uji.

    Linux or Unix
    aws secretsmanager create-secret \ --name MyTestGreengrassSecret \ --secret-string '{"my-secret-key": "my-secret-value"}'
    Windows Command Prompt (CMD)
    aws secretsmanager create-secret ^ --name MyTestGreengrassSecret ^ --secret-string '{"my-secret-key": "my-secret-value"}'
    PowerShell
    aws secretsmanager create-secret ` --name MyTestGreengrassSecret ` --secret-string '{"my-secret-key": "my-secret-value"}'

    Simpan ARN rahasia baru untuk digunakan dalam langkah-langkah berikut.

    Untuk informasi selengkapnya, lihat Membuat rahasia di Panduan Pengguna AWS Secrets Manager.

  2. Deploy komponen secret manager (aws.greengrass.SecretManager) dengan pembaruan gabungan konfigurasi berikut. Tentukan ARN rahasia yang Anda buat sebelumnya.

    { "cloudSecrets": [ { "arn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef" } ] }

    Untuk informasi selengkapnya, lihat Deploy komponen AWS IoT Greengrass ke perangkat atau perintah deployment Greengrass CLI.

  3. Buat dan deploy komponen contoh pada bagian ini dengan pembaruan gabungan konfigurasi berikut. Tentukan ARN rahasia yang Anda buat sebelumnya.

    { "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret", "accessControl": { "aws.greengrass.SecretManager": { "com.example.PrintSecret:secrets:1": { "policyDescription": "Allows access to a secret.", "operations": [ "aws.greengrass#GetSecretValue" ], "resources": [ "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef" ] } } } }

    Untuk informasi selengkapnya, lihatBuatAWS IoT Greengrasskomponen

  4. Lihat log perangkat lunak inti AWS IoT Greengrass untuk memverifikasi bahwa deployment berhasil, dan melihat log komponen com.example.PrintSecret untuk mengetahui nilai rahasia yang dicetak. Untuk informasi selengkapnya, lihat PemantauanAWS IoT Greengrasslog.