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の環境変数として設定することができます。これにより、機密情報を安全に管理し、アプリケーションのセキュリティを向上させることができます。