비밀 값 검색 - AWS IoT Greengrass

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

비밀 값 검색

시크릿 매니저 IPC 서비스를 사용하여 코어 디바이스의 시크릿에서 시크릿 값을 검색할 수 있습니다. Secret Manager 구성 요소를 사용하여 암호화된 암호를 핵심 장치에 배포할 수 있습니다. 그런 다음 IPC 작업을 사용하여 암호를 해독하고 해당 값을 사용자 지정 구성 요소에 사용할 수 있습니다.

최소 SDK 버전

다음 표에는 코어 기기의 비밀번호에서 비밀 값을 검색하는 데 사용해야 AWS IoT Device SDK 하는 의 최소 버전이 나와 있습니다.

권한 부여

사용자 지정 구성 요소에서 Secret Manager를 사용하려면 구성 요소가 코어 기기에 저장한 암호의 가치를 가져오도록 허용하는 권한 부여 정책을 정의해야 합니다. 권한 부여 정책 정의에 대한 자세한 내용은 을 참조하십시오구성 요소가 IPC 작업을 수행할 수 있도록 승인하십시오..

시크릿 매니저의 권한 부여 정책에는 다음과 같은 속성이 있습니다.

IPC 서비스 식별자: aws.greengrass.SecretManager

Operation 설명 리소스

aws.greengrass#GetSecretValue 또는 *

구성 요소가 코어 디바이스에서 암호화된 비밀의 가치를 가져올 수 있도록 합니다.

Secrets Manager 보안 ARN 또는 모든 비밀에 대한 액세스를 * 허용하기 위한 것입니다.

권한 부여 정책 예제

다음 권한 부여 정책 예제를 참조하여 구성 요소에 대한 권한 부여 정책을 구성할 수 있습니다.

예 권한 부여 정책 예시

다음 예제 권한 부여 정책은 구성 요소가 코어 기기의 모든 암호 값을 가져올 수 있도록 허용합니다.

참고

프로덕션 환경에서는 구성 요소가 사용하는 암호만 검색하도록 권한 부여 정책의 범위를 줄이는 것이 좋습니다. 구성 요소를 배포할 때 * 와일드카드를 비밀 ARN 목록으로 변경할 수 있습니다.

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

GetSecretValue

코어 디바이스에 저장한 비밀의 값을 가져옵니다.

이 작업은 에서 보안 값을 가져오는 데 사용할 수 있는 Secrets Manager 작업과 비슷합니다AWS 클라우드. 자세한 내용을 알아보려면 AWS Secrets Manager API 참조GetSecretValue 섹션을 참조하십시오.

요청

이 작업의 요청에는 다음과 같은 매개 변수가 있습니다.

secretId(Python:secret_id)

얻어야 할 비밀의 이름. Amazon 리소스 이름 (ARN) 또는 암호의 친숙한 이름을 지정할 수 있습니다.

versionId(Python:version_id)

(선택 사항) 가져올 버전의 ID.

versionId 또는 versionStage를 지정할 수 있습니다.

versionId또는 를 지정하지 않는 versionStage 경우 이 작업의 기본값은 AWSCURRENT 레이블이 있는 버전으로 설정됩니다.

versionStage(Python:version_stage)

(선택 사항) 가져올 버전의 스테이징 레이블입니다.

versionId 또는 versionStage를 지정할 수 있습니다.

versionId또는 versionStage 를 지정하지 않으면 레이블이 있는 버전이 이 작업의 기본값이 됩니다AWSCURRENT.

응답

이 작업의 응답에는 다음 정보가 포함됩니다.

secretId(Python:secret_id)

비밀의 ID.

versionId(Python:version_id)

이 버전의 시크릿의 ID입니다.

versionStage(Python:version_stage)

이 버전의 시크릿에 첨부된 스테이징 라벨 목록.

secretValue(Python:secret_value)

이 버전의 시크릿의 가치. 이 개체SecretValue, 에는 다음 정보가 들어 있습니다.

secretString(Python:secret_string)

Secrets Manager에 문자열로 제공한 보호된 비밀 정보 중 해독된 부분입니다.

secretBinary(Python:secret_binary)

(선택 사항) Secrets Manager에 바이트 배열 형식의 이진 데이터로 제공한 보호된 비밀 정보 중 복호화된 부분입니다. 이 속성에는 이진 데이터가 base64로 인코딩된 문자열로 포함되어 있습니다.

Secrets Manager 콘솔에서 시크릿을 생성한 경우에는 이 속성이 사용되지 않습니다.

예제

다음 예제는 사용자 지정 구성 요소 코드에서 이 작업을 호출하는 방법을 보여줍니다.

Java (IPC client V1)
예: 비밀 값 가져오기
참고

이 예제에서는 IPCUtils 클래스를 사용하여 AWS IoT Greengrass Core IPC 서비스에 대한 연결을 생성합니다. 자세한 설명은 AWS IoT Greengrass 코어 IPC 서비스에 연결 섹션을 참조하세요.

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)
예: 비밀 값 가져오기
참고

이 예제에서는 AWS IoT Device SDK Python v2용 버전 1.5.4 이상을 사용하고 있다고 가정합니다.

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.
JavaScript
예: 비밀 값 가져오기
import { GetSecretValueRequest, } from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc/model'; import * as greengrasscoreipc from "aws-iot-device-sdk-v2/dist/greengrasscoreipc"; class GetSecretValue { private readonly secretId : string; private readonly versionStage : string; private ipcClient : greengrasscoreipc.Client constructor() { this.secretId = "<define_your_own_secretId>" this.versionStage = "<define_your_own_versionStage>" this.getSecretValue().then(r => console.log("Started workflow")); } private async getSecretValue() { try { this.ipcClient = await getIpcClient(); const getSecretValueRequest : GetSecretValueRequest = { secretId: this.secretId, versionStage: this.versionStage, }; const result = await this.ipcClient.getSecretValue(getSecretValueRequest); const secretString = result.secretValue.secretString; console.log("Successfully retrieved secret value: " + secretString) } catch (e) { // parse the error depending on your use cases throw e } } } export async function getIpcClient(){ try { const ipcClient = greengrasscoreipc.createClient(); await ipcClient.connect() .catch(error => { // parse the error depending on your use cases throw error; }); return ipcClient } catch (err) { // parse the error depending on your use cases throw err } } const getSecretValue = new GetSecretValue();

예제

다음 예제를 사용하여 구성 요소에서 Secret Manager IPC 서비스를 사용하는 방법을 알아보십시오.

이 예제 구성 요소는 코어 기기에 배포한 암호 값을 인쇄합니다.

중요

이 예제 구성 요소는 암호 값을 인쇄하므로 테스트 데이터를 저장하는 암호에만 사용하십시오. 중요한 정보를 저장하는 시크릿의 값을 인쇄할 때는 이 컴포넌트를 사용하지 마세요.

레시피

다음 예제 레시피는 비밀 ARN 구성 매개변수를 정의하고 구성 요소가 코어 디바이스에 있는 모든 시크릿 값을 가져올 수 있도록 합니다.

참고

프로덕션 환경에서는 구성 요소가 사용하는 암호만 검색하도록 권한 부여 정책의 범위를 줄이는 것이 좋습니다. 구성 요소를 배포할 때 * 와일드카드를 비밀 ARN 목록으로 변경할 수 있습니다.

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}"

아티팩트

다음 예제 Python 애플리케이션은 비밀 관리자 IPC 서비스를 사용하여 핵심 기기의 비밀 값을 가져오는 방법을 보여줍니다.

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)

사용량

이 예제 구성 요소를 비밀 관리자 구성 요소와 함께 사용하여 핵심 기기에 암호 값을 배포하고 인쇄할 수 있습니다.

테스트 시크릿을 만들고, 배포하고, 인쇄하려면
  1. 테스트 데이터를 사용하여 Secrets Manager 시크릿을 생성합니다.

    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"}'

    다음 단계에서 사용할 비밀번호의 ARN을 저장합니다.

    자세한 내용은 AWS Secrets Manager사용 설명서의 암호 생성을 참조하십시오.

  2. 다음 구성 병합 업데이트와 함께 비밀 관리자 구성 요소 (aws.greengrass.SecretManager) 를 배포하십시오. 이전에 생성한 비밀번호의 ARN을 지정합니다.

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

    자세한 내용은 디바이스에 AWS IoT Greengrass 구성 요소 배포 또는 Greengrass CLI 배포 명령을 참조하십시오.

  3. 다음 구성 병합 업데이트를 사용하여 이 섹션의 예제 구성 요소를 생성하고 배포하십시오. 이전에 생성한 비밀번호의 ARN을 지정합니다.

    { "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" ] } } } }

    자세한 내용은 AWS IoT Greengrass 구성 요소 생성 단원을 참조하세요.

  4. AWS IoT Greengrass코어 소프트웨어 로그를 보고 배포가 성공했는지 확인하고, com.example.PrintSecret 구성 요소 로그를 보면 암호 값이 인쇄되었는지 확인할 수 있습니다. 자세한 내용은 모니터 AWS IoT Greengrass 로그을(를) 참조하세요.