Amazon Timestream for InfluxDB でシークレットを使用する方法 - Amazon Timestream

Amazon Timestream for LiveAnalytics に類似した機能をご希望の場合は Amazon Timestream for InfluxDB をご検討ください。リアルタイム分析に適した、シンプルなデータインジェストと 1 桁ミリ秒のクエリ応答時間を特徴としています。詳細については、こちらを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Timestream for InfluxDB でシークレットを使用する方法

Timestream for InfluxDB は、ユーザーインターフェイスを介したユーザー名およびパスワードの認証、ならびに最小特権のクライアントおよびアプリケーション接続のトークン認証情報をサポートしています。Timestream for InfluxDB のユーザーは組織内で allAccess アクセス許可を持っており、一方のトークンは任意のアクセス許可のセットを持つことができます。安全な API トークン管理のベストプラクティスに従い、組織内できめ細かなアクセスを実現するため、トークンを管理するユーザーを作成する必要があります。Timestream for InfluxDB の管理者ベストプラクティスの詳細については、「InfluxData Documentation」を参照してください。

AWS Secrets Manager は、データベース認証情報、API キー、およびその他のシークレット情報を保護するために使用できるシークレットストレージサービスです。次に、コード内で、ハードコードされた認証情報を Secrets Manager への API コールに置き換えることができます。シークレットはそこに存在しないため、お客様のコードを調べている誰かがシークレットを漏らさないようにするのに役立ちます。Secrets Manager の概要については、AWS 「Secrets Manager とは」を参照してください。

データベースインスタンスを作成すると、Timestream for InfluxDB は、マルチユーザーローテーション AWS Lambda 関数で使用する管理者シークレットを自動的に作成します。Timestream for InfluxDB のユーザーとトークンをローテーションするには、ローテーションするユーザーまたはトークンごとに、新しいシークレットを手動で作成する必要があります。各シークレットは、Lambda 関数を使用してスケジュールに従ってローテーションするように設定されます。新しいローテーションシークレットを設定するプロセスは、Lambda 関数コードのアップロード、Lambda ロールの設定、新しいシークレットの定義、シークレットローテーションスケジュールの設定で構成されます。

シークレットの内容

Timestream for InfluxDB ユーザー認証情報をシークレットに保存する場合は、次の形式を使用します。

シングルユーザー:

{ "engine": "<required: must be set to 'timestream-influxdb'>", "username": "<required: username>", "password": "<required: password>", "dbIdentifier": "<required: DB identifier>" }

Timestream for InfluxDB インスタンスを作成すると、管理者シークレットが、マルチユーザー Lambda 関数で使用される認証情報と共に Secrets Manager に自動的に保存されます。adminSecretArn を DB インスタンスの概要ページにある Authentication Properties Secret Manager ARN 値に設定するか、管理者シークレットの ARN に設定します。新しい管理者シークレットを作成するには、関連付けられた認証情報を既に持っており、その認証情報に管理者権限が付いている必要があります。

Timestream for InfluxDB トークン認証情報をシークレットに保存する場合は、次の形式を使用します。

マルチユーザー:

{ "engine": "<required: must be set to 'timestream-influxdb'>", "org": "<required: organization to associate token with>", "adminSecretArn": "<required: ARN of the admin secret>", "type": "<required: allAccess or operator or custom>", "dbIdentifier": "<required: DB identifier>", "token": "<required unless generating a new token: token being rotated>", "writeBuckets": "<optional: list of bucketIDs for custom type token, must be input within plaintext panel, for example ['id1','id2']>", "readBuckets": "<optional: list of bucketIDs for custom type token, must be input within plaintext panel, for example ['id1','id2']>", "permissions": "<optional: list of permissions for custom type token, must be input within plaintext panel, for example ['write-tasks','read-tasks']>" }

Timestream for InfluxDB 管理者認証情報をシークレットに保存する場合は、次の形式を使用します。

管理者シークレット:

{ "engine": "<required: must be set to 'timestream-influxdb'>", "username": "<required: username>", "password": "<required: password>", "dbIdentifier": "<required: DB identifier>", "organization": "<optional: initial organization>", "bucket": "<optional: initial bucket>" }

シークレットで自動ローテーションをオンにするには、そのシークレットが正しい JSON 構造になっている必要があります。Timestream for InfluxDB シークレットをローテーションする方法については、「シークレットのローテーション」を参照してください。

シークレットの変更

Timestream for InfluxDB インスタンスの作成プロセス中に生成された認証情報は、アカウントの Secrets Manager シークレットに保存されます。GetDbInstance レスポンスオブジェクトには、Amazon リソースネーム (ARN) をそのようなシークレットに保持する influxAuthParametersSecretArn が含まれています。このシークレットは、Timestream for InfluxDB インスタンスが利用できるようになった後に入力されます。こちらは読み取り専用のコピーであり、このシークレットの更新/変更/削除は作成された DB インスタンスに影響しません。このシークレットを削除しても、API レスポンスは削除されたシークレット ARN を引き続き参照します。

既存のトークン認証情報を保存するのではなく、Timestream for InfluxDB インスタンスに新しいトークンを作成するときは、シークレットの token 値を空白のままにし、AUTHENTICATION_CREATION_ENABLED Lambda 環境変数を true に設定してマルチユーザーローテーション関数を使用することで、非オペレータートークンを作成します。新しいトークンを作成すると、シークレットで定義されたアクセス許可がトークンに割り当てられ、最初のローテーションが完了した後は変更できなくなります。シークレットのローテーションの詳細については、AWS 「Secrets Manager シークレットのローテーション」を参照してください。

シークレットが削除された場合、Timestream for InfluxDB インスタンスの関連付けられたユーザーまたはトークンは削除されません。

シークレットのローテーション

Timestream for InfluxDB のユーザー認証情報とトークン認証情報をローテーションするときは、Timestream for InfluxDB シングルユーザーローテーションおよびマルチユーザーローテーション Lambda 関数を使用します。シングルユーザー Lambda 関数を使用して、Timestream for InfluxDB インスタンスのユーザー認証情報をローテーションし、マルチユーザー Lambda 関数を使用して、Timestream for InfluxDB インスタンスのトークン認証情報をローテーションします。

シングルユーザーおよびマルチユーザー Lambda 関数を使用したユーザーとトークンのローテーションは、オプションです。Timestream for InfluxDB の認証情報には有効期限がなく、公開された認証情報は DB インスタンスに対する悪意のあるアクションというリスクをもたらします。Secrets Manager で Timestream for InfluxDB の認証情報をローテーションする利点は、公開された認証情報に対する攻撃ベクトルを次のローテーションサイクルの時間までに制限し、セキュリティレベルを高められることです。DB インスタンスでローテーションが実施されていない場合、公開された認証情報は手動で削除されるまで有効です。

指定したスケジュールに従って自動的にシークレットを更新するように Secrets Manager を設定することができます。これにより、長期のシークレットを短期のシークレットに置き換えることが可能となり、侵害されるリスクが大幅に減少します。Secrets Manager によるシークレットのローテーションの詳細については、AWS 「Secrets Manager シークレットのローテーション」を参照してください。

ユーザーのローテーション

シングルユーザー Lambda 関数を使用してユーザーをローテーションすると、ローテーションのたびに新しいランダムパスワードがユーザーに割り当てられます。自動ローテーションを有効にする方法の詳細については、「データベース以外の AWS Secrets Manager シークレットの自動ローテーションを設定する」を参照してください。

管理者シークレットのローテーション

管理者シークレットをローテーションするには、シングルユーザーローテーション関数を使用します。DB の初期化ではこれらの値が自動的に入力されないため、シークレットに engine および dbIdentifier 値を追加する必要があります。完全なシークレットテンプレートについては、「シークレットの内容」を参照してください。

Timestream for InfluxDB インスタンスの管理者シークレットを見つけるには、Timestream for InfluxDB インスタンスの概要ページにある管理者シークレット ARN を使用します。管理者ユーザーには Timestream for InfluxDB インスタンスの昇格されたアクセス許可があるため、すべての Timestream for InfluxDB 管理者シークレットをローテーションすることが推奨されます。

Lambda ローテーション関数

シークレットの内容を新しいシークレットで使用し、Timestream for InfluxDB ユーザーの必須フィールドを追加することで、シングルユーザーローテーション関数を使用して Timestream for InfluxDB ユーザーをローテーションできます。シークレットローテーション Lambda 関数の詳細については、「Lambda 関数によるローテーション」を参照してください。

シークレットの内容を新しいシークレットで使用し、Timestream for InfluxDB ユーザーの必須フィールドを追加することで、シングルユーザーローテーション関数を使用して Timestream for InfluxDB ユーザーをローテーションできます。シークレットローテーション Lambda 関数の詳細については、「Lambda 関数によるローテーション」を参照してください。

シングルユーザーローテーション関数は、シークレットで定義された認証情報を使用して Timestream for InfluxDB の DB インスタンスを認証し、新しいランダムパスワードを生成してユーザーの新しいパスワードを設定します。シークレットローテーション Lambda 関数の詳細については、「Lambda 関数によるローテーション」を参照してください。

Lambda 関数の実行ロールのアクセス許可

次の IAM ポリシーを、シングルユーザー Lambda 関数のロールとして使用します。このポリシーは、Timestream for InfluxDB ユーザーのシークレットのローテーションを実行するのに必要なアクセス許可を Lambda 関数に付与します。

IAM ポリシーに以下に記載されているすべての項目を AWS アカウントの値に置き換えます。

  • {rotating_secret_arn} – ローテーションするシークレットの ARN は、Secrets Manager シークレットの詳細に記載されています。

  • {db_instance_arn} – Timestream for InfluxDB のインスタンス ARN は、Timestream for InfluxDB インスタンスのサマリーページに記載されています。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "timestream-influxdb:GetDbInstance" ], "Resource": "arn:aws:timestream-influxdb:us-east-2:111122223333:db-instance/MyDbInstance", "Effect": "Allow" } ] }

トークンのローテーション

Timestream for InfluxDB トークンは、シークレットの内容を新しいシークレットで使用し、Timestream for InfluxDB トークンの必須フィールドを追加することで、マルチユーザーローテーション関数を使用してローテーションできます。シークレットローテーション Lambda 関数の詳細については、「Lambda 関数によるローテーション」を参照してください。

Timestream for InfluxDB トークンは、Timestream for InfluxDB マルチユーザー Lambda 関数を使用してローテーションできます。Lambda の設定で AUTHENTICATION_CREATION_ENABLED 環境変数を true に設定し、トークンの作成を有効にします。新しいトークンを作成するには、シークレット値にシークレットの内容を使用します。新しいシークレットで token キーと値のペアを省略し、typeallAccess に設定するか、特定のアクセス許可を定義して、タイプを custom に設定します。ローテーション関数は、最初のローテーションサイクル中に新しいトークンを作成します。ローテーション後は、シークレットを編集してトークンのアクセス許可を変更することはできず、それ以降のローテーションでは、DB インスタンスで設定されたアクセス許可が使用されます。

Lambda ローテーション関数

マルチユーザーローテーション関数は、管理者シークレットの管理者認証情報を使用して、新しいアクセス許可の同一のトークンを作成することで、トークン認証情報をローテーションします。Lambda 関数は、シークレット内のトークン値を検証した後に、置換トークンを作成し、新しいトークン値をシークレットに保存して、古いトークンを削除します。Lambda 関数が新しいトークンを作成している場合、まず AUTHENTICATION_CREATION_ENABLED 環境変数が true に設定されていること、シークレットにトークン値がないこと、トークンタイプがタイプのオペレーターではないことを確認します。

Lambda 関数の実行ロールのアクセス許可

次の IAM ポリシーを、マルチユーザー Lambda 関数のロールとして使用します。このポリシーは、Timestream for InfluxDB トークンのシークレットのローテーションを実行するのに必要なアクセス許可を Lambda 関数に付与します。

IAM ポリシーに以下に記載されているすべての項目を AWS アカウントの値に置き換えます。

  • {rotating_secret_arn} – ローテーションするシークレットの ARN は、Secrets Manager シークレットの詳細に記載されています。

  • {authentication_properties_admin_secret_arn} – Timestream for InfluxDB 管理者シークレット ARN は、Timestream for InfluxDB インスタンスのサマリーページに記載されています。

  • {db_instance_arn} – Timestream for InfluxDB のインスタンス ARN は、Timestream for InfluxDB インスタンスのサマリーページに記載されています。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:us-east-2:111122223333:secret:MyAdminSecret" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "timestream-influxdb:GetDbInstance" ], "Resource": "arn:aws:timestream-influxdb:us-east-2:111122223333:db-instance/MyDbInstance", "Effect": "Allow" } ] }