CNE AWS Ready: シークレットとライセンスの管理
Liferay Cloud Native Experience (CNE) は、外部のシークレットプロバイダーから機密値を取得します。 この方法により、認証情報、証明書、ライセンスがGitOpsリポジトリに保存されることを防ぎます。
External Secrets Operatorは、設定済みのVaultからKubernetesにシークレットを同期し、CNEはデプロイ時にそれらを利用します。
シークレット保管庫の設定
CNE AWS Readyは、複数のシークレットプロバイダーをサポートしています。 デフォルトでは、このプラットフォームはAWS Secrets Managerと統合されています。
AWS Secrets Manager(デフォルト)
AWS Secrets Managerは、デフォルトのシークレット保管庫です。 Cloud Native のブートストラップ プロセスは、Kubernetes ワークロードがシークレットを取得できるように、サービス アカウント (IRSA) に必要な IAM ロールを構成します。
デフォルトのIAMポリシーでは、以下のシークレットパスへのアクセスが許可されます。
{
"Statement": [
{
"Action": [
"secretsmanager:DescribeSecret",
"secretsmanager:GetSecretValue"
],
"Effect": "Allow",
"Resource": [
"arn:aws:secretsmanager:<region>:<accountid>:secret:liferay/certificates/*",
"arn:aws:secretsmanager:<region>:<accountid>:secret:liferay/licenses/*",
"arn:aws:secretsmanager:<region>:<accountid>:secret:liferay/credentials/gitops*"
]
}
],
"Version": "2012-10-17"
}
これらのパスにより、CNEはデプロイ中にTLS証明書、ライセンス、およびGitOps認証情報を取得できます。
カスタムシークレット保管庫の使用
HashiCorp Vault、Azure Key Vault、Google Secret Managerなどの代替シークレットプロバイダーを設定することもできます。
カスタムプロバイダーを使用するには:
-
保管庫から秘密情報を読み取る権限を持つサービスアカウントを作成してください。
-
Terraform の設定ファイル (
gitops/resources/terraform.tfvars) でexternal_secret_store_provider_hcl変数を定義します。
HashiCorp Vaultの設定例:
external_secret_store_provider_hcl={
vault={
auth={
tokenSecretRef={
key="token"
name="vault-token"
}
}
path="secret"
server="http://my.vault.server:8200"
version="v2"
}
}
追加の設定オプションについては、 外部シークレット演算子 を参照してください。
GitOpsリポジトリ認証情報
CNEは、デプロイメント構成を保存するGitOpsリポジトリにアクセスするための認証情報を必要とします。
これらの認証情報は、設定済みのシークレット保管庫に保存してください。 デフォルトのシークレット名は liferay/credentials/gitops です。
カスタムシークレット名を使用するには、config.json のgit_repo_configセクションのcredentials_secret_nameフィールドを更新します。
デフォルトではなく company/credentials/gitops に秘密情報を保存する場合、設定は次のようになります。
{
"provider": "aws",
"variables": {
"deployment_name": "deployment-name",
"liferay_git_repo_url": "https://github.com/your-org/your-gitops-repo",
"liferay_helm_chart_version": "0.1.90",
"region": "us-east-2",
"liferay_git_repo_config": {
"auth": {
"credentials_secret_name": "company/credentials/gitops"
},
"source_paths": {},
"target": {}
}
}
}
設定で指定したAWSリージョンと同じリージョンにシークレットが存在することを確認してください。
秘密鍵の構造は認証方法によって異なります。
個人アクセストークン(HTTPS)
以下のキーと値のペアを含むシークレットを作成してください。
| キー | 説明 |
|---|---|
git_machine_user_id | Gitユーザー名またはマシンアカウント名 |
git_access_token | 個人アクセストークン(PAT) |
例:
| 秘密の名前 | liferay/認証情報/gitops |
|---|---|
| キー | 値 |
git_machine_user_id | ユーザー |
git_access_token | ghp_abc…WxYZ |
SSH認証
このキーと値のペアを含むシークレットを作成します。
| キー | 説明 |
|---|---|
git_ssh_private_key | Base64エンコードされたSSH秘密鍵 |
例:
| 秘密の名前 | liferay/認証情報/gitops |
|---|---|
| キー | 値 |
git_ssh_private_key | LS0t…LSo= |
TLS証明書
TLS証明書をシークレット保管庫に保存する際は、以下の名前プレフィックスを使用してください。
liferay/certificates/
各証明書の秘密情報には以下が含まれている必要があります。
| キー | 説明 |
|---|---|
tls.crt | Base64エンコードされた証明書 |
tls.key | Base64エンコードされた秘密鍵 |
例:
| 秘密の名前 | liferay/certificates/mydomain |
|---|---|
| キー | 値 |
tls.crt | LS0t…LSo= |
tls.key | LS0t…LQo= |
証明書ファイルをエンコードする際、行折り返しを無効にする:
base64 -w 0 domain.cert.pem
base64 -w 0 private.key.pem
Liferayライセンス
先に進む前に、Liferay .xml のアクティベーションキーがあることを確認してください。 詳細については、 Liferay DXP のアクティベーション を参照してください。
CNEは、デプロイ時に設定済みのシークレットボールトからLiferayライセンスを取得します。
ライセンスはプレフィックス liferay/licenses/ を使用して保存します。
各秘密には以下が含まれていなければならない。
| キー | 説明 |
|---|---|
license.xml | Base64エンコードされたライセンスファイル |
例:
| 秘密の名前 | liferay/licenses/mylicense |
|---|---|
| キー | 値 |
license.xml | PD94…Pg== |
ライセンスファイルを改行なしでエンコードします。
base64 -w 0 license.xml
Liferayライセンスの設定
ライセンスを保存した後、CNEを設定して、Liferayデプロイメントでライセンスを取得してマウントします。
外部シークレット参照の設定
ライセンス参照を infrastructure.yaml に追加します。
license:
externalSecretName: "liferay/licenses/mylicense"
targetSecretName: "liferay-license"
externalSecretNameは、保管庫内のシークレットを識別します。targetSecretNameは、クラスターで作成された Kubernetes シークレットを定義します。
Liferayがライセンスを使用するように設定する
環境の liferay.yaml ファイルを更新して、ライセンス シークレットを Liferay コンテナにマウントします。 ライセンスを提供する際は、Liferayがマウントされたライセンスを使用するように、デフォルトの試用版ライセンスを無効にしてください。
customEnv:
x-license:
- name: LIFERAY_DISABLE_TRIAL_LICENSE
value: "true"
customVolumeMounts:
x-license:
- mountPath: /etc/liferay/mount/files/deploy
name: license
customVolumes:
x-license:
- name: license
secret:
secretName: liferay-license
items:
- key: license.xml
path: license.xml
secretName、はinfrastructure.yamlで定義されているtargetSecretNameと一致しなければならない。
これらの変更をコミットした後、外部シークレットオペレーターはライセンスを保管庫から同期し、デプロイ中にLiferayコンテナにマウントします。