AWS KMSでのゲートウェイ構成

AWS KMSにKeeperゲートウェイ構成を保存

概要

KeeperゲートウェイがAmazon Web Services (AWS) Elastic Compute Cloud (EC2) インスタンスにインストールされている場合、対応するゲートウェイ構成ファイルをAWS Key Management Service (KMS) に保存できます。これを行うには、Identity Access Management (IAM) ロールポリシーを作成し、それをEC2インスタンスに割り当てて、Keeperゲートウェイサービスに必要な権限を付与し、AWS KMSから必要な構成を取得します。この方法により、構成ファイルをディスクに保存する必要がなくなり、代わりに構成ファイルがAWS KMSに保存されます。

AWSキー管理サービス (KMS) キー

AWS KMSは、データの暗号化と復号化に使用される暗号化キーを簡単に作成および制御できる、完全に管理されたサービスです。このサービスは他のAWSサービスと統合されているため、データの暗号化とキーの管理が簡単になります。このプロセスの一環としてAWS KMSキーが必要になります。このキーに権限を割り当てる際には、最小権限の原則に従うことをお勧めします。

Keeperゲートウェイ構成を作成

AWS Secrets Managerは、ワンタイムトークンから生成されたBase64構成文字列をKeeperボルトに保存します。ボルトでは、新しいゲートウェイを作成してワンタイムトークンが生成されます。その後、生成されたワンタイムトークンを以下のようにゲートウェイコマンドott-initを使用して構成に変換します。

gateway ott-init [ONE-TIME-TOKEN]

このコマンドの出力を安全に保管してください。この値を、後ほどAWS Secrets Managerにシークレットの値として入力します。

AWS Secrets Managerでシークレットを作成

1. AWS Secrets Managerに移動

AWSマネジメントコンソールにログインします。[Services] (サービス) ドロップダウンから[Secrets Manager]を選択します。これにより、AWS Secrets Managerのホームページに移動します。

2. シークレットの作成プロセスを開始

AWS Secrets Managerのホームページで、[Store a new secret] (新しいシークレットを保存) をクリックします。新しいページに移動し、新しいシークレットの作成を開始します。

3. シークレットの秘密の詳細を入力

シークレットの種類として[Other type of secrets (e.g. API key)] (その他の種類のシークレット (例: API キー)) を選択します。ここで、Base64文字列形式のゲートウェイ設定を[Plaintext] (プレーンテキスト) テキストボックスに直接入力します。AWS Secrets Managerはキー/値とプレーンテキストの両方のシークレット形式をサポートしており、この場合はプレーンテキスト形式を使用します。

[Encryption Key] (暗号化キー) セクションで、シークレットの暗号化に使用するKMSキーを選択します。KMSキーがまだない場合は、AWS Secrets Managerで作成できます。

4. シークレットの名前と説明

[Plaintext] (プレーンテキスト) フィールドに値を入力した後、[Next] (次へ) ボタンをクリックします。シークレットに固有の名前を入力します。この名前は、AWS Secrets Manager内でシークレットを見つけるための識別子として機能し、後ほどAWS Secrets Managerでシークレットを使用するようにゲートウェイを構成するときに使用されます。任意でこのAWS Secrets Managerシークレットの目的やその他の関連情報を入力します。

5. シークレットの確認と保存

シークレットの詳細を確認します。正確なことを確認した後、[Store] (保存) をクリックします。これで、AWS Secrets Managerに新しいシークレットが正常に作成されました。

AWS EC2インスタンスの作成

作成するEC2インスタンスは、IAMロールを割り当てることができる標準タイプである必要があります。インスタンスにはさまざまなタイプがあり、それぞれ異なる用途があるため、ニーズに合ったものを選択してください。ゲートウェイツールはあらゆる標準構成と互換性があるため、インスタンスを柔軟に選択できます。

IAMロールの作成

EC2インスタンスがユーザーに代わってAPIリクエストを行うために使用できるIAMロールを作成します。このIAMロールは、AWS Secrets Managerから必要な値のみを読み取ることができるように、必要最小限の権限で設定する必要があります。これにより、機密情報が誤って漏えいする可能性が軽減されます。

  1. IAMダッシュボードに移動します。

  2. 新しいロールを作成します。

  3. 「AWS service」と入力します。

一般的な使用事例: EC2

2に進み、[Create policy] (ポリシーの作成) をクリックすると、新しいタブが開きます。

「JSON」ポリシーを選択し、以下を入力します。

{  
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": "arn:aws:secretsmanager:[REGION]:[ACCOUNT ID]:secret:[SECRET NAME WITH RAND]"
    }
  ]
}

[REGION][ACCOUNT ID][SECRET NAME WITH RAND]などのプレースホルダーを実際のAWSアカウントの詳細情報に置き換えてください。

  • secretsmanager: リソースが属する特定のAWSサービスです。この場合、リソースはAWS Secrets Managerによって管理されます。

  • [REGION]: リージョンは、リソースが配置されている地理的なAWSリージョンです。たとえば、米国西部 (オレゴン) のリージョンはus-west-2となります。

  • [ACCOUNT ID]: リソースを所有するアカウントのAWSアカウントIDで、AWSアカウントに固有の12桁の数字となります。

  • secret: リソースのタイプです。この場合、リソースはAWS Secrets Managerに保存されているシークレットです。

  • [SECRET NAME WITH RAND]: AWS Secrets Managerでシークレットを作成したときに付けた名前です。名前がシークレットARNにある名前であることを確かにします。以下のように、ダッシュの後にランダムな文字が含まれている必要があります。 :arn:aws:secretsmanager:us-east-1:134301558361:secret:keeperRotationGatewayConfig-Vwt7zX

ポリシーに名前を付けて、[Create policy] (ポリシーの作成) をクリックします。

このポリシーを新しく作成されたロールに添付します。前のタブに戻り、ロールのリストを更新して、新しいポリシーをロールに添付します。

最後のページで新しいロールに名前を付け、[Step 2]にポリシーが添付されていることを確認して、[Create role] (ロールの作成) をクリックします。

EC2インスタンスにIAMロールを添付

IAMロールが適切に設定されたので、それをEC2インスタンスに添付します。このプロセスには、AWS EC2インスタンスを起動し、それにポリシーを添付する際の標準的なAWS手順が含まれます。詳細な手順については、AWS EC2のドキュメントをご参照ください。

EC2インスタンスのシークレットへのアクセスをテスト

EC2インスタンスにIAMロールを添付したので、セットアップが正しく行われたことを検証しましょう。検証には、EC2インスタンス内でAWS CLIコマンドを実行して、シークレットにアクセスできることを確認します。

aws secretsmanager get-secret-value --secret-id keeperRotationGatewayConfig --region us-east-1 --output text --query 'SecretString'

注: このコマンドで画面にシークレットが出力されます。

正しい出力が表示された場合は、EC2インスタンスが正常に構成され、Keeperゲートウェイを構成する準備ができていることを意味します。

AWS Secrets Managerキーの指定

AWS Secrets Managerキーは、ゲートウェイの起動時に指定される識別子で、ゲートウェイがAWS Secrets Managerからシークレットにアクセスできるようにするために使用されます。このキーが指定されていない場合、ゲートウェイは起動しません。このキー値を安全に処理し、機密性を保つことが重要です。この場合、シークレット名はAWS Secrets Managerでキーに付けた名前と同じであること、つまり、ARNで以前に指定したランダムな文字が含まれていないことを確認します。

SMキーの指定方法

  1. コマンドラインパラメータの使用: 以下は、ゲートウェイをデバッグモードで起動してすべての出力をログファイルに記録するコマンドです。指定されたシークレット名を使用します。

gateway start --aws-kms-secret-name="[SECRET NAME]"
  1. 環境変数の使用: コンテナ化された環境でゲートウェイを実行する場合に特に便利な方法です。ゲートウェイを起動する前に、環境変数AWS_KMS_SECRET_NAMEを[SECRET NAME]に設定します。これにより、アプリケーションは環境変数から直接SMキーを読み取ることができます。

export AWS_KMS_SECRET_NAME=[SECRET NAME]
gateway start

Linuxサービスを構成

Keeperゲートウェイサービスユニットファイル (/etc/systemd/system/keeper-gateway.service) を開き、 ExecStartで始まる行を変更します。

--config-file /etc/keeper-gateway/gateway-config.json--aws-kms-secret-name="[SECRET NAME]"に置き換えてください。

ここで[SECRET NAME]には、AWS KMSシークレットの名前を指定します。

すると、以下のようになります。

ExecStart=/bin/bash -c "/usr/local/bin/gateway start --service --aws-kms-secret-name=[SECRET NAME]"

サービスに変更を適用します。

sudo systemctl daemon-reload
sudo systemctl restart keeper-gateway

アクセス権限を付与するときは、常に最小権限の原則に従ってください。これにより、アクションを実行するために必要最小限のアクセスのみが付与されます。

最終更新