KMS は、ACK クラスタに KMS Agent をサイドカーとしてデプロイすることをサポートしています。Agent は RRSA メカニズムを介して KMS からシークレット値を取得し、ビジネスアプリケーションはローカルインターフェイスを介して KMS シークレットを取得します。このアプローチにより、SDK の統合が不要になり、アプリケーションの変更コストが削減され、統合標準が統一されます。多くのアプリケーションが KMS にアクセスする必要があるシナリオに適しています。このトピックでは、ACKコンテナ環境にKMS Agentをデプロイしてシークレットを取得する方法について説明します。
前提条件
このベストプラクティスについて学習する前に、次の概念をよく理解しておいてください。
KMS Agent とは: KMS Agent は、KMS サービスからシークレット値を取得してメモリにキャッシュする役割を担う HTTP プロキシサービスです。アプリケーションは、HTTP リクエストを介して KMS Agent からシークレット値を取得します。
RRSA を介して ServiceAccount の RAM 権限を構成して Pod 権限の隔離を実装する: アプリケーションが Alibaba Cloud ACK クラスタにデプロイされている場合は、RRSA (RAM Roles for Service Accounts) 機能を使用して、コンテナクラスタ内で隔離された RAM ロールの機能を実装できます。各アプリケーションは独立した RAM ロールを引き受けて、Alibaba Cloud OpenAPI にアクセスできます。
シナリオ
アクセス資格情報として RRSA を使用して ACK コンテナ環境に KMS Agent をデプロイしてシークレットを取得することは、次のビジネスシナリオに適しています。
企業は「最後の鍵」の問題を解決する必要があります。
企業は機密資格情報を Alibaba Cloud KMS でホストしてセキュリティを強化します。ただし、KMS 自体にアクセスするには認証が必要であるため、クラウドサービスへのアクセスに長期間固定の AccessKey に依存すると、KMS アクセス資格情報が新たな脆弱性となるセキュリティリスクが生じる可能性があります。
Alibaba Cloud ACK クラスタで RRSA 機能を有効にすることで、異なる Pod に異なる RAM ロールを関連付けることができます。異なる Pod 内のアプリケーションは、独立した RAM ロールを引き受けて一時的な資格情報を使用してクラウド リソースにアクセスできます。これにより、アプリケーションの最小権限の原則が実装され、AccessKey なしで Alibaba Cloud OpenAPI にアクセスできるようになり、AccessKey の漏洩を防ぎます。
企業は、異なるアプリケーション間で資格情報へのアクセス権限を隔離する必要があります。
たとえば、権限の拡大や不正な資格情報アクセスを防ぐために、同じアプリケーションのテスト環境と本番環境間、および異なるアプリケーション間で権限の隔離が必要です。
RRSA は RAM ポリシーに基づいています。異なるアプリケーションは異なる名前空間とサービスアカウントで実行され、異なる RAM ロールにバインドされます。RAM ロールに異なる権限を付与することで、異なるアプリケーションに対して KMS シークレットへのアクセス制御を実装できます。
アプリケーションと KMS を統合するための開発コストを削減します。
KMS にアクセスする必要があるアプリケーションが少数の場合、SDK を統合できます。ただし、数百または数千のアプリケーションを持つ中規模から大規模の企業の場合、各アプリケーションを SDK と統合するように変更し、一貫した標準に従って障害復旧とキャッシュを設計することは非常に困難です。さらに、中国本土の企業ではセキュリティ、運用、開発チームが通常別々であるため、既存のオープンソースの外部シークレットアプローチはあまり適していません。統合 DevOps モデルの方が適しています。
この場合、KMS Agent を使用してシークレットを取得できます。ACK コンテナクラスタ環境では、KMS Agent はビジネスコンテナと同じ Pod 内でサイドカーコンテナとして実行されます。ACK クラスタで RRSA が有効になっている場合、KMS Agent はアクセス資格情報を設定することなく、RRSA RamRole ID を使用して KMS に自動的にアクセスします。Agent はリモート KMS からシークレットを取得してメモリにキャッシュし、ビジネスアプリケーションは Agent からシークレットを取得します。
ソリューションアーキテクチャ
次の図は、ユーザーが dev と prod の 2 つのアプリケーションを持ち、ACK コンテナ環境に KMS Agent をデプロイしてシークレットを取得する例を示しています。異なる環境のアプリケーションは、対応する KMS シークレットにのみアクセスできます。
制限事項
ACK クラスタは、ACK マネージドクラスター、ACK 専用クラスター、ACK 登録クラスター、および ACK Serverless クラスタをサポートしています。
ACK クラスタと KMS インスタンスは同じリージョンにある必要があります。
プロシージャ
次の手順では、ビジネスアプリケーションが KMS Agent を介してシークレットを取得できるように ACK、RAM、および KMS を構成する方法を示します。開発者は KMS でシークレットを作成し、アプリケーションでローカルに取得するだけで済みます。残りの構成は、運用チームとセキュリティチームによって事前に設定されます。プロセス全体を通して、開発者はビジネスコードに SDK を統合したり、アプリケーションが KMS にアクセスするための認証、承認、キャッシュ、または障害復旧について心配する必要はありません。
ステップ 1: KMS Agent 実行可能ファイルを作成する
Golang 環境をインストールします。詳細な操作については、「Go インストールガイド」をご参照ください。
ソースコードと依存関係をダウンロードします。
Git ウェブサイト にアクセスして、Git ツールをダウンロードしてインストールします。
次のコマンドを実行して、ソースコードと依存関係をダウンロードします。
git clone https://github.com/aliyun/alibabacloud-kms-agent go mod download
プロジェクトのルートディレクトリで
go build .コマンドを実行して、実行可能ファイルをコンパイルします。デフォルトのファイル名は alibabacloud-kms-agent で、プロジェクトのルートディレクトリに保存されます。コンパイル環境とデプロイ環境が同じ場合は、
go build .コマンドを実行するだけです。コンパイル環境とデプロイ環境が異なる場合は、次のコマンドを参考にしてクロスプラットフォームコンパイルを行い、64 ビット実行可能ファイルを生成します。コンパイル環境
デプロイ環境が Mac の場合
デプロイ環境が Linux の場合
デプロイ環境が Windows の場合
Mac
go build .CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build .CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .Linux
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build .go build .CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .Windows
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build .SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build .go build .プロジェクトのルートディレクトリで、実行可能ファイル alibabacloud-kms-agent が存在するかどうかを確認します。

ステップ 2: ACK RRSA を有効にして、特定のシークレットへのアクセスを承認する
ACK RRSA 機能を有効にします。
クラスタ作成中に有効にする
ACK マネージドクラスター または ACK Edge クラスタ を作成する際に、[クラスタ構成] ステップの [詳細オプション (オプション)] セクションで、[RRSA OIDC] の横にある [有効にする] をクリックします。

クラスタ作成後に有効にする
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、[クラスタ情報] をクリックします。
[基本情報] タブの [セキュリティと監査] セクションで、[RRSA OIDC] の横にある [有効にする] をクリックします。

[RRSA を有効にする] ダイアログボックスで、[確認] をクリックします。
[基本情報] セクションで、クラスタの状態が [更新中] から [実行中] に変わると、クラスタの RRSA 機能が有効になります。
クラスタの詳細ページを開きます。[基本情報] タブの [セキュリティと監査] セクションで、RRSA OIDC の右側の [有効] ステータスにカーソルを合わせて、プロバイダの URL リンクと ARN 情報を表示します。

[ID プロバイダ] の信頼できるエンティティを持つ RAM ロールを作成します。
Alibaba Cloud アカウントを使用して、RAM コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。[ロール] ページで、[ロールの作成] をクリックします。
[ロールの作成] パネルで、信頼できるエンティティタイプとして [ID プロバイダ] を選択し、[エディタの切り替え] をクリックします。

[ロールの作成] ページの [ビジュアルエディタ] セクションで、次のロール情報を構成し、[OK] をクリックします。
構成項目
説明
[効果]
[許可] を選択します。
[プリンシパル]
ID プロバイダを選択します。
ID プロバイダタイプ: OIDC を選択します。
ID プロバイダ: RRSA を有効にすると、ACK クラスタは ack-rrsa-<cluster_id> という命名形式でデフォルトの ID プロバイダを作成します。<cluster_id> にクラスタの ID を指定します。
[アクション]
デフォルトのままにします。つまり、sts:AssumeRole を選択します。
[条件]
デフォルトの [oidc:iss] 条件と [oidc:aud] 条件に基づいて新しい条件を追加します。
条件キー: [oidc:sub] を選択します。
演算子: [StringEquals] を選択します。
条件値: [system:serviceaccount:<namespace>:<serviceAccountName>]。
<namespace>: アプリケーションの名前空間を指定します。
<serviceAccountName>: サービスアカウントの名前。
この例では、
system:serviceaccount:rrsa-dev:dev-saを使用します。ここで、rrsa-dev は次のステップで作成する必要がある Kubernetes 名前空間、dev-sa は次のステップで作成する必要がある Kubernetes サービスアカウントです。
[ロールの作成] ダイアログボックスで、ロール名を設定し、[OK] をクリックします。この例では、ロール名は dev-role-for-rrsa です。
dev-role-for-rrsa RAM ロールの信頼ポリシーを表示します。
このポリシーにより、特定のサービスアカウントは、OIDC 認証条件を満たした後、Alibaba Cloud RRSA (RAM Roles for Service Accounts) を介して RAM ロールを引き受けることができます。
{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "oidc:aud": [ "sts.aliyuncs.com" ], "oidc:iss": [ "https://oidc-ack-cn-hongkong.oss-cn-hongkong.aliyuncs.com/cf01******" ], "oidc:sub": [ "system:serviceaccount:rrsa-dev:dev-sa" ] } }, "Effect": "Allow", "Principal": { "Federated": [ "acs:ram::5269************:oidc-provider/ack-rrsa-cf01******" ] } } ], "Version": "1" }
権限ポリシーを作成し、RAM ロールに付与します。
この例では、権限ポリシー名は dev-role-for-rrsa-kms-policy で、ポリシーの内容は
env:devタグが付いたシークレットへのアクセスのみを許可します。
権限ポリシーの内容は次のとおりです。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GetSecretValue" ], "Resource": "*", "Condition": { "StringEqualsIgnoreCase": { "kms:tag/env": [ "dev" ] } } } ] }dev-role-for-rrsa-kms-policy 権限ポリシーを dev-role-for-rrsa ロールに付与します。

ステップ 3: ACK で名前空間とサービスアカウントを作成する
名前空間は ACK クラスタを論理的に隔離された仮想空間に分割し、開発、テスト、本番などの環境を分離するために使用されます。異なる名前空間のアプリケーションは、デフォルトでは互いのリソースにアクセスできません。これにより、RAM ロールのバインディングに物理的な境界が提供されます。サービスアカウントは Pod の ID を提供し、RRSA メカニズムを介して RAM ロールと動的にバインドします。
YAML ファイルを使用して名前空間を作成します。
この例では、名前空間名は rrsa-dev、YAML ファイル名は namespace.yaml です。
apiVersion: v1 kind: Namespace metadata: name: rrsa-dev次のコマンドを実行して、ACK クラスタに
rrsa-devという名前の名前空間を作成します。kubectl apply -f namespace.yaml名前空間が正常に作成されたかどうかを確認します。
kubectl get namespaces出力に
rrsa-devが含まれている場合、作成は成功です。YAML ファイルを使用してサービスアカウントを作成します。
この例では、サービスアカウント名は dev-sa、YAML ファイル名は serviceaccount.yaml です。
apiVersion: v1 kind: ServiceAccount metadata: name: dev-sa namespace: rrsa-dev次のコマンドを実行して、
rrsa-devにdev-saという名前の ServiceAccount を作成します。kubectl apply -f serviceaccount.yamlServiceAccount が正常に作成されたかどうかを確認します。
kubectl get serviceaccount -n rrsa-dev出力に
dev-saが含まれている場合、作成は成功です。
ステップ 4: サイドカーコンテナイメージを作成する
Alibaba Cloud の ACK コンテナサービスで、アプリケーションコンテナと一緒に KMS Agent をサイドカーコンテナとしてデプロイします。
config.toml で KMS Agent ランタイムパラメータを構成します。
説明config.toml は Agent の構成ファイルです。このファイルは、ステップ 1 で取得した alibabacloud-kms-agent ソースコードの configs ディレクトリにあります。
[Server] HttpPort = 2025 [KMS] Region = "cn-hangzhou" [Cache] CacheType = "InMemory" CacheSize = 1000 TtlSeconds = 300 [Log] LogLevel = "Debug" LogPath = "./logs/" MaxSize = 100 MaxBackups = 2Dockerfile を作成します。
たとえば、Agent が
deploy/ack/agentパスにデプロイされている場合は、そのパスに Dockerfile を作成します。ファイルの内容については、agent_Dockerfile をご参照ください。# centos イメージをベースとして使用する FROM centos:centos7 # コンテナ内の作業ディレクトリを設定する WORKDIR /usr/local/alibabacloudkmsagent # バイナリと構成をコンテナにコピーする COPY alibabacloud-kms-agent . COPY config.toml . # エントリポイントを設定して kms agent を実行する ENTRYPOINT ["./alibabacloud-kms-agent", "agent", "./config.toml"] # 日本語訳のコメントを追加 (元の英語のコメントは残す) # Use the centos image as the base (centos イメージをベースとして使用する) # Set the working directory inside the container (コンテナ内の作業ディレクトリを設定する) # Copy the binary and config to the container (バイナリと構成をコンテナにコピーする) # Set the entry point to run the kms agent (エントリポイントを設定して kms agent を実行する)ステップ 1 と2 で作成したファイルを deploy/ack/agent ディレクトリにコピーします。
deploy/ack/agent ├── alibabacloud-kms-agent ├── config.toml ├── Dockerfile.agentサイドカーコンテナイメージを作成し、Alibaba Cloud Container Registry にアップロードします。
# ビルド docker build -t registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0 . # アップロード docker push registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0
ステップ 5: ビジネスコンテナイメージを作成する
たとえば、ビジネスアプリケーションが
deploy/ack/appパスにデプロイされている場合は、そのパスにアプリケーションコンテナイメージの Dockerfile を記述します。# centos イメージをベースとして使用する FROM centos:centos7 # コンテナ内の作業ディレクトリを設定する WORKDIR / # エントリポイントを設定して kms agent を実行する ENTRYPOINT ["sleep", "360000"]アプリケーションコンテナイメージを作成し、Alibaba Cloud Container Registry にアップロードします。
# ビルド docker build -t registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:app-v1.0 . # アップロード docker push registry.cn-hangzhou.aliyuncs.com/<ns>/<repo>:app-v1.0
ステップ 6: アプリケーションをデプロイする
方法 1: カスタムデプロイメントテンプレート
カスタムデプロイメントテンプレートを作成して、アプリケーションコンテナと同じ Pod に KMS Agent を追加コンテナとしてデプロイします。以下に示すように、app コンテナと sidecar コンテナを同じ Pod または Deployment に配置してデプロイします。コンテナアプリケーションの実行方法については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
KMS_TOKEN: Agent の起動時に生成される SSRF トークンファイルの格納パスを指定します。
ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC ID プロバイダの ARN。この場合は ACK クラスタ ARN です。
ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンを含むファイルパス。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: rrsa-dev
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
serviceAccountName: dev-sa
containers:
- name: kmsagent
image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0
env:
- name: ALIBABA_CLOUD_ROLE_ARN
value: acs:ram::<uid>:role/dev-role-for-rrsa
- name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN
value: acs:ram::<uid>:oidc-provider/ack-rrsa-<ackClusterId>
- name: ALIBABA_CLOUD_OIDC_TOKEN_FILE
value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token
- name: KMS_TOKEN
value: file:///var/run/kmstoken/token
volumeMounts:
- name: shared-volume
mountPath: /var/run/kmstoken
- name: rrsa-oidc-token
mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens
readOnly: true
command: ["/bin/sh", "-c", "./alibabacloud-kms-agent token /var/run/kmstoken/token && ./alibabacloud-kms-agent agent config.toml"]
- name: my-app
image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns/<repo>:app-v1.0
volumeMounts:
- name: shared-volume
mountPath: /var/run/kmstoken
volumes:
- name: shared-volume
emptyDir: {}
- name: rrsa-oidc-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
audience: sts.aliyuncs.com
expirationSeconds: 3600
path: token方法 2: OpenKruise をインストールして挿入ルールを構成する
OpenKruise は、Kubernetes の標準拡張機能のセットです。ネイティブ Kubernetes と組み合わせて使用することで、アプリケーション Pod、サイドカーコンテナ、およびイメージ配布を効率的に管理できます。詳細については、「OpenKruise を使用してクラウドネイティブアプリケーションをデプロイする」をご参照ください。
OpenKruise をインストールします。

ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[アドオン] ページで、[アプリケーションの管理] タブをクリックします。[ack-kruise] セクションで、[インストール] をクリックします。
[注記] ダイアログボックスで、コンポーネント情報を確認し、[OK] をクリックします。
サイドカー挿入ルールを設定します。
サイドカーコンテナ挿入ルールを設定して、ラベル app が付いた Pod にサイドカーコンテナを挿入します。
環境変数の定義:
KMS_TOKEN: Agent の起動時に生成される SSRF トークンファイルの格納パスを指定します。
ALIBABA_CLOUD_ROLE_ARN: RAM ロールの ARN。
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC ID プロバイダの ARN。この場合は ACK クラスタ ARN です。
ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC トークンを含むファイルパス。
セレクターの定義: サイドカー挿入が必要な Pod を選択します。これは実際の要件に応じて変更できます。この例では、app ラベルが付いた Pod にサイドカーコンテナを挿入します。
apiVersion: apps.kruise.io/v1alpha1 kind: SidecarSet metadata: name: kms-agent-sidecarset namespace: rrsa-dev spec: serviceAccountName: dev-sa containers: - name: kms-agent image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:kmsagent-v1.0 env: - name: ALIBABA_CLOUD_ROLE_ARN value: acs:ram::<uid>:role/dev-role-for-rrsa - name: ALIBABA_CLOUD_OIDC_PROVIDER_ARN value: acs:ram::<uid>:oidc-provider/ack-rrsa-<ackClusterId> - name: ALIBABA_CLOUD_OIDC_TOKEN_FILE value: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens/token - name: KMS_TOKEN value: file:///var/run/kmstoken/token volumeMounts: - name: shared-volume mountPath: /var/run/kmstoken - name: rrsa-oidc-token mountPath: /var/run/secrets/ack.alibabacloud.com/rrsa-tokens readOnly: true command: ["/bin/sh", "-c", "./alibabacloud-kms-agent token /var/run/kmstoken/token && ./alibabacloud-kms-agent agent config.toml"] # サイドカー挿入が必要な Pod を選択するために使用されます。実際の要件に応じて変更できます。 selector: matchLabels: app: app volumes: - name: shared-volume emptyDir: {} - name: rrsa-oidc-token projected: defaultMode: 420 sources: - serviceAccountToken: audience: sts.aliyuncs.com expirationSeconds: 3600 path: tokenKMS Agent を自動的に挿入します。
Deployment ファイルを作成し、ラベル
app: appを付けて ACK にアプリケーションをデプロイして、サイドカーコンテナの挿入を有効にします。apiVersion: apps/v1 kind: Deployment metadata: name: app-with-kmsagent namespace: rrsa-dev spec: replicas: 1 selector: matchLabels: app: app template: metadata: labels: app: app spec: serviceAccountName: dev-sa containers: - name: my-app image: registry-vpc.cn-hangzhou.aliyuncs.com/<ns>/<repo>:app-v1.0 volumeMounts: - name: shared-volume mountPath: /var/run/kmstoken volumes: - name: shared-volume emptyDir: {}コンテナアプリケーションを実行します。詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
アプリケーションが起動すると、アプリケーションが配置されている Pod に KMS agent プロキシコンテナが挿入されていることがわかります。

ステップ 7: シークレット値を作成して取得する
KMS でシークレットを作成します。
この例では、シークレットを作成するときに、タグ
env:devを追加する必要があります。アプリケーションコンテナはこのタグが付いたシークレットのみを取得でき、他のシークレットを取得する権限はありません。KMS コンソール にログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
Generic Secrets タブをクリックし、インスタンス管理 を選択して、資格情報の作成 をクリックします。パラメータを構成し、[OK] をクリックします。
パラメータ
説明
資格情報名
シークレットの名前。シークレット名は現在のリージョン内で一意です。
Secret Value
管理する機密データのタイプ。有効な値: [シークレットキー/値] および [プレーンテキスト]。
値の長さは 30,720 バイト (30 KB) を超えることはできません。
Initial Version
シークレットの初期バージョン。デフォルト値: [v1]。カスタムバージョン番号を指定することもできます。
CMK
シークレットの現在の値の暗号化に使用するキー。
重要キーとシークレットは同じ KMS インスタンスに属している必要があります。キーは対称キーである必要があります。KMS でサポートされている対称キーの詳細については、「対称暗号化と非対称暗号化のキースペック」をご参照ください。
RAM ユーザーまたは RAM ロールの場合は、キーを使用して GenerateDataKey 操作を呼び出す権限が必要です。
タグ
シークレットに追加するタグ。タグを使用してシークレットを分類および管理できます。タグはキーと値のペアで構成されます。
説明タグキーまたはタグ値の長さは最大 128 文字で、文字、数字、スラッシュ (/)、バックスラッシュ (\)、アンダースコア (_)、ハイフン (-)、ピリオド (.)、プラス記号 (+)、等号 (=)、コロン (:)、アットマーク (@)、およびスペースを含めることができます。
タグキーは aliyun または acs: で始めることはできません。
シークレットごとに最大 20 個のキーと値のペアを構成できます。
説明
シークレットの説明。
ポリシー設定
シークレットのポリシー設定。詳細については、「概要」をご参照ください。
デフォルトのポリシーを使用し、シークレットを作成した後にビジネス要件に基づいてポリシーを変更できます。
シークレット値を取得します。
curl コマンドを使用する。
curl -v -H "X-Vault-Token:$(</var/run/kmstoken/token)" 'http://localhost:2025/secretsmanager/get?secretId=app/dev/secret-1'ビジネスコードで HTTP GET リクエストを使用してシークレットを取得する。
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { url := fmt.Sprintf("http://localhost:2025/secretsmanager/get?secretId=%s", "app/dev/secret-1") token, err := ioutil.ReadFile("/var/run/kmstoken/token") if err != nil { fmt.Printf("error reading token file: %v\n", err) // トークンファイルの読み取りエラー: %v } req, err := http.NewRequest("GET", url, nil) if err != nil { fmt.Printf("error creating request: %v\n", err) // リクエストの作成エラー: %v } req.Header.Add("X-KMS-Token", string(token)) client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Printf("error sending request: %v \n", err) // リクエストの送信エラー: %v } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Printf("status code %d - %s \n", resp.StatusCode, string(body)) // 状態コード %d - %s }