Microserviceの環境変数にAWS Secrets Managerのシークレット情報を設定する方法
はじめに
Microserviceアーキテクチャでは、各サービスが独自の環境変数を持つことが一般的です。これらの環境変数には、APIキーやデータベースの認証情報などの機密情報が含まれることがあります。AWS Secrets Managerを使用して、これらの機密情報を安全に管理し、環境変数として設定する方法を解説します。
手順
1. AWS Secrets Managerでシークレットを作成
まず、AWS Secrets Managerでシークレットを作成します。
- AWSコンソールにログインし、Secrets Managerに移動します。
- 「シークレットの作成」をクリックします。
- 「その他のシークレットタイプ」を選択し、キーと値のペアを追加します。
- シークレットに分かりやすい名前を付けます(例:
example-secret)。 - 「シークレットの作成」をクリックして完了します。
2. IAMロールの設定
次に、KubernetesがAWS Secrets ManagerにアクセスできるようにIAMロールを設定します。
-
IAMコンソールに移動し、ポリシーを作成します。
-
以下のポリシーを使用して、Secrets Managerへのアクセスを許可します:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:<region>:<account-id>:secret:example-secret" } ] } -
IAMロールを作成し、上記のポリシーをアタッチします。
3. KubernetesにExternalSecretを設定
次に、KubernetesにExternalSecretリソースを設定します。
-
ExternalSecretのマニフェストファイルを作成します:apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: example-external-secret namespace: default spec: refreshInterval: "15s" secretStoreRef: name: aws-secretsmanager kind: SecretStore target: name: example-secrets data: - secretKey: aws_s3_accesskeyid remoteRef: key: example-secret property: AWS_S3_AccessKeyId -
このマニフェストを適用して、
ExternalSecretを作成します。
4. Deploymentで環境変数を設定
最後に、Deploymentで環境変数を設定します。
-
Deploymentのマニフェストファイルを作成します:apiVersion: apps/v1 kind: Deployment metadata: name: example-deployment spec: template: spec: containers: - name: example-container env: - name: FILE_AWSOSS_ACCESSKEYID valueFrom: secretKeyRef: name: example-secrets key: aws_s3_accesskeyid -
このマニフェストを適用して、Deploymentを作成します。
5. GitLab CI/CDパイプラインの設定
GitLab CI/CDを使用して、デプロイメントを自動化します。
-
.gitlab-ci.ymlファイルを作成し、以下の内容を追加します:stages: - deploy deploy: stage: deploy script: - kubectl apply -f external-secret.yaml - kubectl apply -f deployment.yaml only: - main -
external-secret.yamlとdeployment.yamlファイルをリポジトリに追加し、GitLabにプッシュします。
ExternalSecretの自動生成機能
External Secrets Operatorは、外部のシークレット管理システム(例えば、AWS Secrets Manager)から情報を取得し、自動的にKubernetesのSecretリソースとして注入する機能を持っています。これにより、ExternalSecretが適切に設定されていれば、SecretStoreやSecretリソースを手動で作成する必要はなく、External Secrets Operatorがこれらのリソースを自動的に管理してくれます。
まとめ
以上の手順により、AWS Secrets Managerからシークレットを取得し、Microserviceの環境変数として設定することができます。これにより、機密情報を安全に管理し、アプリケーションのセキュリティを向上させることができます。