• ログイン無料アカウント

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

秘密管理

シークレットマネジメントを使用すると、エージェントやオンホストの統合機能で機密データ(パスワードなど)を設定ファイルに平文で記述することなく使用できるようになります。現在、Hashicorp Vault、AWS KMS、CyberArk、New Relic CLIの難読化がサポートされています。

詳しくは、NerdBytesのビデオ(5分12秒)をご覧ください。

秘密の定義

設定用YAMLファイルでシークレットを使用するには

  1. variables セクションを定義して、各エントリが秘密のオブジェクトの名前になるようにします。
  2. 各エントリには、秘密のソースと、それらの秘密を取得するための適切な構成を含めてください。
  3. 一般設定セクションでは、 ${variable.property}を設定します。 シークレットオブジェクトのプロパティで自動的に置き換えられるプレースホルダーです。シークレット・オブジェクトは、単純な文字列または json オブジェクトとして定義できます。

重要

秘密の検索に失敗すると、インフラストラクチャ・エージェントが実行に必要なすべてのデータを持っていないため、統合は実行されません。

たとえば、次の設定では、Vault から creds という名前のオブジェクトを取得します(シークレットのオブジェクト名を定義することができます)。保存されたオブジェクトは、 user という名前のプロパティと password という名前のプロパティを持つ有効な JSON であると仮定しましょう。これらを使って、Nginx のオンホスト統合から status_url プロパティの基本的な HTTP 認証情報を設定したいとします。

integration_name: com.newrelic.nginx
variables:
creds:
vault:
http:
url: http://my.vault.host/v1/newengine/data/secret
headers:
X-Vault-Token: my-vault-token
instances:
- name: nginx-server-metrics
command: metrics
arguments:
status_url: http://${creds.user}:${creds.password}@example.com/status
status_module: discover
remote_monitoring: true
labels:
env: production
role: load_balancer

ヒント

変数からは、単純な文字列と有効なJSONオブジェクトの両方を取得することができます。
JSONオブジェクトを使用する場合は、キーと値の両方がダブルクオートで囲まれていることを確認してください。

環境変数の使用

環境変数は、 variables セクションで、 {{MY_ENV_VAR}} の表記で使用することができます。その際、環境変数は拡張され、その値は実行時に置き換えられます。

トークンや難読化キーなどの機密性の高い値が設定ファイルに含まれないようにするには、この方法を使用します。

オンホストの統合設定ファイルで環境変数を使用する場合、 passthrough_environment 設定を定義する必要があります。

秘密の変数

variables セクションの下で、各構成にシークレットを定義します。各エントリはユーザー定義のシークレット名で、取得したシークレットのプロパティを格納します。各変数には、以下のプロパティを格納できます。

YAMLキー

説明

ttl

タイプ文字列

シークレットが更新されるまでの時間。これは、数字の後に時間単位を加えたものになります(s, m or h )。

例: 30s, 10m, 1h

デフォルト: 1h

aws-kms

AWS KMSのシークレット検索の設定

ヴォールト

ヴォールトシークレットの検索設定

サイバーアーク・クリ

CyberArkのコマンドラインインターフェイスの設定

サイバーアーク・エイプ

CyberArk REST APIの設定

obfuscated

New Relic CLIの難読化

AWS KMSの秘密

Amazon KMSからシークレットを取得するには、 aws-kms のセクションで以下のプロパティを設定します。すべてのフィールドが必須ではありません。例えば、エンコードされたKMS文字列を提供するために、 datafilehttp のいずれかが必要です。

YAMLキー

説明

データ

タイプ文字列

復号化するBase64エンコードされたKMS文字列

ファイル

タイプ文字列

復号化するBase64エンコードされたKMS文字列を含むファイルへのパス

http

タイプYAMLプロパティ

Base64 エンコードされた KMS 文字列の復号化を要求する際に使用する HTTP 設定です。詳細は、 Vault http を参照してください。

クレデンシャルファイル

タイプ文字列

AWS認証情報ファイルへのパス

config_file

タイプ文字列

AWS設定ファイルへのパス

リージョン

タイプ文字列

AWS KMSリージョン

種類

型です。String (plain, equal, or json)

秘密の値のフォーマット。

  • プレーン: デスティネーション変数に直接格納される生の文字列です。

  • equal: key=property オブジェクトのプロパティとして宛先変数に格納される1行の文字列。

  • json: デスティネーション変数にプロパティとして格納されるJSONオブジェクトです。

    plain または json のタイプの秘密は、ドット表記を使用します。例えば、 ${mysecret.nestedkey} です。.

次の例では、AWS KMS から平文のパスワード文字列を取得することができます。提供された データ エンコードされた文字列から復号する必要があります。

variables:
myPassword:
aws-kms:
data: T0hBSStGTEVY
region: ap-southeast-2
credential_file: "./my-aws-credentials-file"
config_file: "./my-aws-config-file"
type: plain

ヴォールトの秘密

Vault は、Vault への接続に使用する HTTP 構成を含む http フィールドを有効にする必要があります。http エントリには、以下のエントリを含めることができます。

YAMLキー

説明

url

タイプ文字列

データを要求するURL

tls_config

タイプYAMLプロパティ

TLSの構成プロパティを使用する

ヘッダ

タイプYAMLマップ

リクエストヘッダー

tls_configプロパティ

重要

例えば、 ${mysecret.nestedkey} のように、秘密はドット記法でなければなりません。.

YAMLキー

説明

enable

タイプブーリアン

TLSを有効にする

デフォルト: false

insecure_skip_verify

タイプブーリアン

サーバーの証明書チェーンとホストの検証をスキップする

デフォルト: false

min_version

型。UInt16

受け入れ可能なSSL/TLSの最小バージョン

デフォルト: 0 (TLSバージョン1.0を使用しています。)

max_version

型。UInt16

許容される最大のSSL/TLSバージョン

デフォルト: 0 (TLSバージョン1.3を使用しています)

ca

タイプ文字列

TLS証明書

""

次の例では、セキュリティで保護されたサーバーから Vault トークンを使用してシークレットを取得し、サーバー証明書の検証をスキップします。

variables:
mydata:
vault:
http:
url: https://my.vault.host/v1/newengine/data/secret
headers:
X-Vault-Token: my-vault-token
tls_config:
insecure_skip_verify: true

CyberArkのコマンドラインインターフェイス

CyberArkのコマンドラインインターフェイス(CLI)からシークレットを取得するには、以下の構成を使用します。すべてのキーが必要です。

YAMLキー

説明

クライアント

タイプ:文字列

CyberArk CLI実行ファイルのフルパス

デフォルト:""

app-id

タイプ:文字列

秘密保持者のアプリケーションID

デフォルト:""

セーフ

タイプ:文字列

秘密が詰まった金庫

デフォルト:""

フォルダ

タイプ:文字列

秘伝書の入ったフォルダ

デフォルト:""

オブジェクト

タイプ:文字列

秘密が関連付けられているオブジェクト

デフォルト:""

次の例では、コマンドライン・インターフェースを使ってCyberArkの秘密を取得します。

variables:
credentials:
cyberark-cli:
cli: /full/path/to/clipasswordsdk
app-id: my-appid
safe: my-safe
folder: my-folder
object: my-object

CyberArk REST API

CyberArk REST API を使用して秘密を取得するには、HTTP 構成を含む http キーが必要です。 http キーにはこれらのサブキーが含まれており、 url だけが必要です。

YAMLキー

説明

url

タイプ文字列

データを要求するURL、このキーが必要です。

デフォルト:なし

tls_config

タイプYAMLプロパティ

TLSの構成プロパティを使用する

ヘッダ

タイプYAMLマップ

リクエストヘッダー

次の例では、CyberArk REST APIを使用して、サーバー証明書の検証を省略してシークレットを取得しています。

variables:
credentials:
cyberark-api:
http:
url: https://hostname/AIMWebService/api/Accounts?AppID=myAppID&Query=Safe=mySafe;Object=myObject
tls_config:
insecure_skip_verify: true

New Relic CLIの難読化

重要

可能であれば、単純な難読化ではなく、サポートされているシークレットプロバイダーを使用することをお勧めします。

下記のガイドラインを参照して、環境変数を定義し、設定ファイルに難読化キーを持たないようにしてください。

Windowsホストでは、コマンドプロンプトウィンドウではなく、Powershellを使用してください。コマンドプロンプトウィンドウでは、引用符が予期せぬ方法で処理されることがあるからです。

ヒント

Infrastructure Agent 1.14.0以上が必要です。

New Relic CLI の obfuscate コマンドを使用すると、インフラストラクチャ エージェントやオンホストの統合設定ファイル内の機密情報を不明瞭にすることができます。

ステップ

  • New Relic CLI を任意のホスト(開発用のホストでも可)にインストールします。
  • 難読化された値を生成するために、CLI obfuscateコマンド を実行します。
newrelic agent config obfuscate --value '<plain_text_config_value>' --key '<obfuscation_key>'
  • 以下の例のように、cli コマンドの結果を text 引数にコピーして、 obfuscated セクションに入れます。
  • 設定用のYMLファイルで複数の値を参照する必要がある場合、JSONブロックを難読化することができます。なお、Windowsホストでは、 " " の引用符をバックスラッシュでエスケープする必要があるかもしれません。例: '{\"attribute\":\"value\"....また、Windowsホストでは、コマンドプロンプトウィンドウではなく、Powershellを使用してください。コマンドプロンプトウィンドウでは、引用符が予期しない方法で処理されることがあるからです。
newrelic agent config obfuscate --value '{"attribute":"value","attribute2":"value2"}' --key '<obfuscation_key>'

YAMLキー

説明

キー

タイプ文字列

New Relic CLI を使用してクリアテキスト値を難読化する際に使用する文字列

デフォルト:なし

シークレット

タイプ文字列

newrelic-cliコマンドの出力結果

デフォルト:なし

Integrations configuration example
以下の例では、New Relic CLI を使用して難読化された Nginx のユーザーとパスワードを取得することができます。この例では、難読化された値が JSON ブロックであったため、認証情報を取得する際にドット記法を使用しています。

integration_name: com.newrelic.nginx
variables:
creds:
obfuscated:
key: 'random_key_used_in_cli'
secret: 'obscured_output_from_cli'
instances:
- name: nginx-server-metrics
command: metrics
arguments:
status_url: http://${creds.user}:${creds.password}@example.com/status
status_module: discover
remote_monitoring: true

以下の例のように、難読化の引数に環境変数を使用することをお勧めします。

integration_name: com.newrelic.nginx
variables:
creds:
obfuscated:
key: {{OBFUSCATION_KEY}}
secret: {{OBFUSCATION_TEXT}}
instances:
- name: nginx-server-metrics
command: metrics
arguments:
status_url: http://${creds.user}:${creds.password}@example.com/status
status_module: discover
remote_monitoring: true

エージェント設定例
この例では、プロキシの詳細(ユーザ、パスワード、ホスト)を含む文字列を取得することができます。

variables:
obfuscated_proxy:
obfuscated:
key: 'random_key_used_in_cli'
secret: 'obscured_output_from_cli'
proxy: ${obfuscated_proxy}
Copyright © 2022 New Relic Inc.