インフラコードに含まれるパスワードや機密情報

コード内の機密情報は、リポジトリの履歴やデプロイ成果物から漏えいするおそれがあります。

説明

パスワード、API キー、トークン、秘密鍵をインフラコードに直接記述すると、リポジトリやデプロイ成果物にアクセスできる人に認証情報が知られるおそれがあります。ファイルから削除しても、コミット履歴やコピーには残る場合があります。

想定される影響

漏えいした認証情報を使って、そのアカウントの権限でサービスやデータにアクセスされるおそれがあります。

対処方法

機密情報はシークレット管理サービスに保存し、デプロイ時に参照または注入してください。公開された認証情報は失効させて再発行し、コードや履歴のコピーからも取り除いてください。Kubernetes Secret にもアクセス制限と保存時の暗号化が必要です。

例

変更後の例は、別途作成した secret-basic-auth の値を環境変数に渡す方法のみを示しています。その値を利用するアプリケーション側の設定は省略しています。

変更前

yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-basic-auth
type: kubernetes.io/basic-auth
stringData:
  password: "root"

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      env:
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: secret-basic-auth
              key: password

参考資料