AWS Secrets Managerを使用して安全にシークレットを管理する方法
AWS Secrets Managerを活用することで、データベースの認証情報やAPIキーなどの機密情報を安全に管理し、アプリケーションのセキュリティを強化することが可能です。この記事では、AWS Secrets Managerでシークレットを効率的に作成し、AWS CLIを使用してその情報を取得する手順について、やってみました。
検証用です。用途に合わせて、設定を変えてみてください。
AWS Secrets Managerとは?
AWS Secrets ManagerはAmazon Web Servicesが提供する、機密情報をセキュアに保存し、アクセスを管理するサービスです。このサービスを利用することで、開発者やシステム管理者はハードコードされた認証情報をソースコードから排除し、セキュリティを向上させることが可能になります。
AWS Secrets Managerのメリット
AWS Secrets Managerを使用することで、以下のようなメリットが得られます:
- セキュリティの強化:機密情報を安全に保存し、不正アクセスから保護します。
- 簡易な管理:シークレットの一元管理を通じて、アクセス権限やポリシーの管理が容易になります。
- 自動ローテーション:定期的なシークレットの自動更新をサポートし、セキュリティを維持します。
- コンプライアンスの遵守:機密情報の管理に関するコンプライアンス要件を満たすのに役立ちます。
前提
AWS Secrets Managerを使用する前に、以下の条件を満たしていることを確認してください:
- AWSアカウントが既に作成されていること。
- AWS CLIがインストールされ、設定されていること。
AWS Secrets Manager とは? – AWS Secrets Manager
シークレットの安全な管理方法
ステップ1: AWS Secrets Managerにアクセス
まず、AWS Management Consoleにログインし、「Secrets Manager」と入力して検索、サービスページにアクセスします。このプロセスは、機密情報を管理するための初期ステップとなります。
ステップ2: 新しいシークレットの作成
1. シークレットの作成開始
AWS Management Consoleで、「新しいシークレットを保存する」ボタンをクリックし、シークレット作成プロセスを開始します。
2. シークレットタイプの選択
「その他のシークレットタイプ(プレーンテキストまたはキーと値のペア)」を選択します。※用途に合わせて選択してください。
3. シークレット情報の入力
- キーと値のペア:具体的なキー(例:
username
)と値(例:testUser
)を入力し、構造化された形式で情報を保存します。 - プレーンテキスト:JSON形式(例:
{"username":"testUser","password":"testPassword"}
)で情報を一つのテキストブロックとして保存します。
- 暗号化キーのpathはデフォルト
4. シークレットの詳細設定
シークレットに名前を付け(例: MyTestSecret
)、任意で説明を追加します。
- ローテーションなどは用途に合わせて設定してください。今回は検証用で、ローテーションはスキップします。
5. シークレットの保存
設定内容をレビューし、問題がなければ「保存」をクリックしてシークレットを保存します。
AWS CLIを使用してシークレット情報を取得する方法
AWS CLIを活用することで、AWS Secrets Managerに保存されたシークレット情報の取得が簡単になります。本セクションでは、AWS CLIを設定し、シークレット情報を取得する手順について解説します。AWS CLIは、Amazon Web Servicesのリソースをコマンドラインから操作するためのツールです。
AWS CLIの設定手順
AWS CLIを使用するための準備として、以下の手順を実行します:
- AWS CLIのインストールと設定:
AWS CLIの使い始め方については、 AWS CLI を簡単に使い始める方法を教えてください | DevelopersIOが参考になります。この記事では、AWS CLIのインストールから基本的な設定方法まで、詳細に説明されています。
-
認証情報の準備:
AWS CLIを利用するにあたり、アクセスキーIDとシークレットアクセスキーが必要となります。これらの認証情報は、AWS Management Console内のIAMセクションで生成することができます。新しいアクセスキーを作成し、表示された情報を安全な場所に記録しておきましょう。 -
AWS CLIの設定:
次に、ターミナルまたはコマンドプロンプトでaws configure
コマンドを実行し、AWS CLIの設定を行います。このステップでは、アクセスキーID、シークレットアクセスキー、デフォルトリージョン、出力フォーマットを指定します。aws configure
- AWS Access Key ID [None]: あなたのアクセスキーIDを入力。
- AWS Secret Access Key [None]: あなたのシークレットアクセスキーを入力。
- Default region name [None]: 使用するAWSリージョンのコードを入力。
- Default output format [None]: 出力形式(
json
、text
、table
のいずれか)を指定。
シークレット情報の取得
AWS CLIが正しく設定されたら、以下のコマンドを使用して、AWS Secrets Managerに保存されたシークレット情報を取得できます。
aws secretsmanager get-secret-value --secret-id [your-secret-name]
このコマンドにより、指定したシークレットの詳細がJSON形式で表示されます。特にSecretString
フィールドには、保存されている機密情報が含まれています。
アクセスキーの作成方法や、AWS CLIのさらなる活用方法については、以下のリソースも参照してください:
IAM ユーザーのアクセスキーの管理 – AWS Identity and Access Management
AWS コマンドラインインターフェイス(CLI: AWSサービスを管理する統合ツール)| AWS
注意事項
- セキュリティ:アクセスキーIDとシークレットアクセスキーは機密情報です。第三者に漏洩しないよう、安全に管理してください。
- リージョンの選択:デフォルトリージョンは、主に使用するAWSサービスが配置されている地域を選択することをお勧めします。これにより、コマンドの実行速度が向上します。
- 出力形式:デフォルトの出力形式は、後からいつでも
aws configure
コマンドを再度実行することで変更可能です。
AWS CLIを使用したシークレット情報の取得方法
AWS CLIを利用してAWS Secrets Managerに保存されたシークレット情報を取得する際は、以下のコマンドを実行します。
aws secretsmanager get-secret-value --secret-id [your-secret-name]
このコマンドにより、指定したシークレットの情報がJSON形式で出力されます。特にSecretString
フィールドには、保存されている機密情報が含まれており、これを使用してアプリケーションの設定やデータベース接続情報などを安全に取り扱うことができます。
AWS Secrets Managerから取得したシークレット情報の解析
AWS CLIを用いてAWS Secrets Managerから取得したシークレット情報は、以下のようなJSON形式で出力されます。
{
"ARN": "arn:aws:secretsmanager:[your-region]:[your-account-id]:secret:[your-secret-name]-xxxxxx",
"Name": "[your-secret-name]",
"VersionId": "example-version-id",
"SecretString": "{\"username\":\"[your-username]\",\"password\":\"[your-password]\"}",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": xxxxxxxxx.xxx
}
この出力例に含まれる主要な情報は以下の通りです:
- ARN (Amazon Resource Name):シークレットの一意の識別子です。この値を使用して、特定のシークレットを参照することができます。
- Name:シークレットの名前を示します。これはシークレットを識別するために用いられます。
- VersionId:シークレットのバージョンを特定するIDです。
- SecretString:保存されている機密情報です。この例では、ユーザー名とパスワードが含まれています。
- VersionStages:シークレットのバージョンステージを示します。"AWSCURRENT"は現在アクティブなバージョンを指します。
- CreatedDate:シークレットが作成された日時です。
この方法を用いることで、AWS Secrets Managerに保存されたシークレット情報を安全に管理し、必要に応じてアクセスすることができます。
jq
コマンドを使用したシークレット情報の効率的な抽出方法
jq
コマンドは、コマンドラインでJSONデータを操作するための優れたツールです。AWS Secrets Managerから取得したJSON形式のシークレット情報に対して、jq
を用いることで特定のデータを瞬時に抽出することが可能になります。
以下は、AWS CLIを用いてシークレット情報を取得し、jq
コマンドで特定のフィールドを抽出する一連のプロセスです。
AWS Secrets Managerからのシークレット情報の取得とデータ抽出
aws secretsmanager get-secret-value --secret-id [your-secret-name] --query 'SecretString' --output text | jq -r '.username, .password'
このコマンドを実行することで得られる出力例:
testUser
testPassword
このプロセスにおける主要なステップの解説:
--query 'SecretString'
オプションを用いて、AWS Secrets Managerから取得したシークレットの中からSecretString
フィールドを指定し、必要な情報のみを抽出します。--output text
で、取得したデータをテキスト形式に変換し、jq
コマンドで処理しやすい形にします。jq -r '.username, .password'
により、JSONオブジェクトからusername
とpassword
の値を直接抽出し、テキストとして出力します。-
注意点
jq
コマンドを使用する前に、システムにjq
が正しくインストールされていることを確認してください。
参考URLまとめ
IAM ユーザーのアクセスキーの管理 – AWS Identity and Access Management
4.2. AWS アクセスキーおよび AWS シークレットアクセスキーの作成 Red Hat Enterprise Linux 9 | Red Hat Customer Portal