翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
シークレット値を取得する
シークレットマネージャーIPCサービスを使用して、コアデバイスのシークレットからシークレット値を取得します。シークレットマネージャーコンポーネントを使用して、暗号化されたシークレットをコアデバイスにデプロイします。次に、 IPCオペレーションを使用してシークレットを復号し、カスタムコンポーネントでその値を使用できます。
最小SDKバージョン
次の表に、コアデバイスのシークレットからシークレット値を取得するために使用 AWS IoT Device SDK する必要がある の最小バージョンを示します。
認証
カスタムコンポーネントでシークレットマネージャーを使用するには、コアデバイスに保存するシークレットの値をコンポーネントが取得できるようにする承認ポリシーを定義する必要があります。承認ポリシーの定義については、「コンポーネントにIPCオペレーションの実行を許可する」を参照してください。
シークレットマネージャーの承認ポリシーには以下のプロパティがあります。
IPC サービス識別子: aws.greengrass.SecretManager
操作 |
説明 |
リソース |
aws.greengrass#GetSecretValue 、または *
|
コンポーネントがコアデバイスで暗号化されたシークレットの値を取得できるようにします。
|
すべてのシークレットへのアクセス* を許可する Secrets Manager シークレット ARN、または 。
|
承認ポリシーの例
次の承認ポリシーの例を参照して、コンポーネントの承認ポリシーの設定に役立てることができます。
例 承認ポリシーの例
以下の承認ポリシーの例は、コンポーネントがコアデバイスのすべてのシークレット値を取得できるようにします。
実稼働環境では、コンポーネントが使用するシークレットのみ取得するように、承認ポリシーの範囲を小さくすることをお勧めします。コンポーネントをデプロイARNsするときに、*
ワイルドカードをシークレットのリストに変更できます。
{
"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」の「」を参照してください。
リクエスト
このオペレーションのリクエストには以下のパラメータがあります。
refresh
(Python: refresh
)
-
(オプション): リクエストされたシークレットを AWS Secrets Manager サービスからの最新の値と同期するかどうか。
true に設定すると、シークレットマネージャーは指定されたシークレットラベルの最新の値を AWS Secrets Manager サービスにリクエストし、その値をレスポンスとして返します。そうしないと、ローカルに保存されたシークレット値が返されます。
このパラメータは、 リクエストの versionId
パラメータと組み合わせては機能しません。
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)
-
例: シークレット値の取得
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)
-
例: シークレット値の取得
この例では、 for Python v2 のバージョン 1.5.4 以降を使用していることを前提 AWS IoT Device SDK としています。
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();
例
次の例を使用して、コンポーネントでシークレットマネージャーIPCサービスを使用する方法を学びます。
このコンポーネントの例は、コアデバイスにデプロイしたシークレットの値を出力します。
このコンポーネントの例はシークレットの値を出力するため、テストデータが保存されたシークレットのみで使用してください。このコンポーネントを使用して、重要な情報が保存されたシークレットの値を出力しないでください。
レシピ
次のレシピ例では、シークレットARN設定パラメータを定義し、コンポーネントがコアデバイス上の任意のシークレットの値を取得できるようにします。
実稼働環境では、コンポーネントが使用するシークレットのみ取得するように、承認ポリシーの範囲を小さくすることをお勧めします。コンポーネントをデプロイARNsするときに、*
ワイルドカードをシークレットのリストに変更できます。
- 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)
使用方法
このコンポーネントの例をシークレットマネージャーコンポーネントと一緒に使用すると、コアデバイスのシークレットの値をデプロイおよび出力できます。
テストシークレットを作成、デプロイ、および出力するには
-
テストデータを使用して、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 ユーザーガイド」の「シークレットの作成」を参照してください。
-
以下の設定マージの更新を使用して、シークレットマネージャーコンポーネント (aws.greengrass.SecretManager
) をデプロイします。前に作成したシークレットARNの を指定します。
{
"cloudSecrets": [
{
"arn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestGreengrassSecret-abcdef
"
}
]
}
詳細については、デバイスに AWS IoT Greengrass コンポーネントのデプロイ「」または Greengrass CLIデプロイコマンド を参照してください。
-
以下の設定マージの更新を使用して、このセクションのコンポーネントの例を作成してデプロイします。前に作成したシークレット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 コンポーネントの作成」を参照してください
-
AWS IoT Greengrass Core ソフトウェアログを表示してデプロイが成功したことを確認し、com.example.PrintSecret
コンポーネントログを表示してシークレット値が出力されたことを確認します。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。