Kubernetes Injector
1Passwordマニュアル|Kubernetes Secrets Injectorは、ウェブフックを通じてシークレット管理を効率化し、安全なデプロイメントを実現します。
Last updated
1Passwordマニュアル|Kubernetes Secrets Injectorは、ウェブフックを通じてシークレット管理を効率化し、安全なデプロイメントを実現します。
Last updated
または環境変数として使用して 1Password シークレットを Kubernetes ポッドまたはデプロイメントに挿入できるようにする変更 Webhook を実装します。
1Password とは異なり、Secrets Injector はリソースにシークレットを割り当てるときに Kubernetes Secret をCreateしません。Kubernetes Operator と Kubernetes Injector を比較するには、
ヒント
1Password サービス アカウントで Kubernetes Secrets Injector を使う方法を紹介します。
Kubernetes Injector を使う前に、次の点を確認してください。
1Passwordに。
Kubernetesのデプロイメントを用意します。minikubeローカルでテストします。
またはとして Secrets Automation ワークフローをCreateします。
Kubernetes Injector については、考慮すべき制限とニュアンスがいくつかあります。例:
Kubernetes Injector では、commandフィールドを使うためにデプロイメント仕様が必要です。
デフォルトでは、シークレットは全てのコンテナのセッションで使用できるわけではありません。
Kubernetes Secrets Injector は、初期化時にコマンド値を変更することで機能します。そのため、シークレットを注入するポッドには、デプロイメント仕様ファイルでコマンド値が定義されている必要があります (次のコード ブロックに示すように)。
以下のコード ブロックのコマンド フィールドを参照してください。この例では、1Password サービス アカウントは、npm start によって実行されるアプリケーションにシークレットを挿入します。
deployment-specification.yaml
spec:
containers:
- name: app-example1
image: my-image
ports:
- containerPort: 5000
command: ["①npm"]
args: ["②start"]
env:
- name: OP_SERVICE_ACCOUNT_TOKEN
valueFrom:
secretKeyRef:
name: op-service-account
key: token
- name: DB_USERNAME
value: op://my-vault/my-item/sql/username
- name: DB_PASSWORD
value: op://my-vault/my-item/sql/password
挿入されたシークレットは、現在のポッドのセッションでのみ使用できます。コンテナ仕様にリストされているコマンドのシークレットにのみアクセスできます。他のセッションでアクセスするには、例えば kubectl を使用して、コマンドの先頭に op run -- を追加する必要があります。
Secrets Automation ワークフローと Kubernetes デプロイメントを使用して Kubernetes Injector を構成およびデプロイするには、次の手順に従います。
これらのコード例で使用される文字列と変数に関する注意事項。
このページのコード例で使用されている一部の文字列は可変かつ任意です。その他の文字列は、1Password のコンテキスト内で特定の意味を持ちます。
このページのコード例で使用されている次の文字列は、1Password のコンテキスト内で非常に具体的かつハードコードされた意味を持ちます。
OP_CONNECT_HOST
OP_CONNECT_TOKEN
OP_SERVICE_ACCOUNT_TOKEN
このページのコード例で使用されている次の文字列は変数であり、1Password のコンテキスト内では特定の意味を持ちません。
DB_PASSWORD
DB_USERNAME
サービス アカウントまたは Connect サーバーの認証トークンを含む Kubernetes Secret をCreateします。
注意
Kubernetes Injector は、サービス アカウントと Connect サーバーの両方を使用して構成できます。両方を構成すると、Connect サーバーとその環境変数 (OP_CONNECT_HOSTおよびOP_CONNECT_TOKEN) が優先されます。
Service account
次のコマンドを実行する前に、コマンド内の OP_SERVICE_ACCOUNT_TOKEN を実際のトークンに置き換えるか、トークンを OP_SERVICE_ACCOUNT_TOKEN という名前の環境変数としてエクスポートします。
$ kubectl create secret generic service-account --from-literal=token=OP_SERVICE_ACCOUNT_TOKEN
kubectl を使用して、名前空間 (NAMESPACE) に Secrets-injection=enabled ラベルを追加してシークレット インジェクションを有効にします。 Kubernetes Injector は、カスタム名前空間を指定しない限り、デフォルトの名前空間を使用します。
$ kubectl label namespace NAMESPACE secrets-injection=enabled
kubectl applyデプロイメント仕様ファイルに対してコマンドを使用します。手動デプロイメントを使う場合は、各デプロイメント仕様ファイルを個別に適用する必要があります。
次の例では、INJECTOR.yaml はKubernetes Injector デプロイメント仕様ファイルの名前であり、CONNECT.yamlは Connect デプロイメント仕様ファイルの名前です。
デプロイを解除するには、kubectl delete を使用します。
ヒント
情報
①デプロイメント仕様ファイルを編集し、次の注釈を追加します。
デプロイメント仕様.yaml
annotations:
operator.1password.io/inject: "app-example1, app-example2"
①デプロイメント仕様ファイルを編集し、1Password 項目へのパスを含む環境変数を追加します。 VAULT 、 ITEM、 SECTION 、および FIELD を正しい値に置き換えてください。
値は、次のコード ブロックのテキストのようになります。
シークレットインジェクションを実行するには、KubernetesポッドまたはデプロイメントにサービスアカウントまたはConnectサーバーの認証トークンを提供する必要があります。
ヒント
認証トークンを環境変数としてエクスポートすると、仕様ファイルで環境変数を使用できます。
Service account
Connect
Service account
次の手順では、サービス アカウント トークンを Kubernetes デプロイメントにリンクします。
①まだCreateしていない場合は、kubectl を使用して、サービス アカウント トークン OP_SERVICE_ACCOUNT_TOKEN を含む汎用 Kubernetes Secret をCreateします。
$ kubectl create secret generic service-account --from-literal=token=$OP_SERVICE_ACCOUNT_TOKEN
②OP_SERVICE_ACCOUNT_TOKEN という名前のサービス アカウント トークンの環境変数をデプロイメント仕様ファイルに追加します。 SECRET_NAME をシークレットの名前に置き換え、KEY_NAME をサービス アカウント キーの名前に置き換えます。
deployment-specification.yaml
spec:
containers:
- name: app-example1
image: my-image
ports:
- containerPort: 5000
command: ["npm"]
args: ["start"]
env:
- name: OP_SERVICE_ACCOUNT_TOKEN
valueFrom:
secretKeyRef:
name: SECRET_NAME
key: KEY_NAME
次の Kubernetes デプロイメント仕様ファイルは、デプロイメント ファイルがどのようになるべきかを示しています。
Service account
次のコード ブロックには、1Password サービス アカウントを使用してシークレットを挿入するための Kubernetes デプロイメント仕様 YAML ファイル設定の例が含まれています。この例では、Kubernetes インジェクターはAPP_1にシークレットを挿入しますが、APP_2には挿入しません。
デプロイメント仕様.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-example
spec:
selector:
matchLabels:
app: app-example
template:
metadata:
annotations:
operator.1password.io/inject: APP_1
labels:
app: app-example
spec:
containers:
- name: APP_1
image: my-image
ports:
- containerPort: 5000
command: ["npm"]
args: ["start"]
env:
- name: OP_SERVICE_ACCOUNT_TOKEN
valueFrom:
secretKeyRef:
name: op-service-account
key: token
- name: DB_USERNAME
value: op://my-vault/my-item/sql/username
- name: DB_PASSWORD
value: op://my-vault/my-item/sql/password
- name: APP_2
image: my-image
ports:
- containerPort: 5000
command: ["npm"]
args: ["start"]
env:
- name: DB_USERNAME
value: op://my-vault/my-item/sql/username
- name: DB_PASSWORD
value: op://my-vault/my-item/sql/password
Connect
次のコード ブロックには、1Password Connect Server を使用してシークレットを挿入するための Kubernetes デプロイメント仕様 YAML ファイル設定の例が含まれています。この例では、Kubernetes Injector はAPP_1にシークレットを挿入しますが、APP_2には挿入しません。
デプロイメント仕様.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-example
spec:
selector:
matchLabels:
app: app-example
template:
metadata:
annotations:
operator.1password.io/inject: APP_1
labels:
app: app-example
spec:
containers:
- name: APP_1
image: my-image
ports:
- containerPort: 5000
command: ["npm"]
args: ["start"]
env:
- name: OP_CONNECT_HOST
value: http://onepassword-connect:8080
- name: OP_CONNECT_TOKEN
valueFrom:
secretKeyRef:
name: connect-token
key: token-value
- name: DB_USERNAME
value: op://my-vault/my-item/sql/username
- name: DB_PASSWORD
value: op://my-vault/my-item/sql/password
- name: APP_2
image: my-image
ports:
- containerPort: 5000
command: ["npm"]
args: ["start"]
env:
- name: DB_USERNAME
value: op://my-vault/my-item/sql/username
- name: DB_PASSWORD
value: op://my-vault/my-item/sql/password
使用しているデプロイメントが、デプロイメントでコマンド フィールドが指定されるように設計されていない場合は、1Password ユースケースに適している可能性があります。
では、app-example1 コンテナは、コマンドにnpm startよって実行されたセッションにDB_USERNAMEおよび DB_PASSWORD 値を挿入します。
コンテナの全てのセッションでシークレットを使用できるようにするもう 1 つの方法は、を使うことです。
①
②
③
④
⑤
⑥
kubectlサービス アカウントのトークンを含む Kubernetes Secret をCreateするために使用します。サービス アカウント トークンは、サービス アカウントのCreateプロセス中に自動的に生Createされます。トークンを紛失した場合は、必要があります。
この例のコマンドはKubernetes InjectorとConnectのみをデプロイします。、
を使うと、Kubernetes Injector を 1 つのコマンドでデプロイおよび構成できます。
Kubernetesインジェクターはウェブフックがデプロイされたとき()必要な。クラスターから Kubernetes Injector を削除すると、TLS 証明書も自動的に削除されます。
にの注釈を付けます。その後に、シークレットを変更して挿入するコンテナのコンマ区切りリストが続きます。
を使用して 1Password アイテムを参照する値を持つ環境変数をポッドまたは します。
これを行う 1 つの方法は、資格情報の し、それを することです。