翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Private CA Connector for Kubernetes の使用を開始します。
以下のトピックでは、 AWS Private CA を使用して Kubernetes クラスター内の通信を保護する方法を示します。別の例については、GitHub の「Encryption in transit for Kubernetes」を参照してください。
プライベート認証機関を使用して、Amazon EKS クラスターとの通信を保護することができます。作業を開始する前に、次の項目が揃っていることを確認してください。
-
セキュリティポリシーにスコープされた適切なアクセス許可を持つ AWS アカウント。
- Amazon EKS clusters
-
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "IAM",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:GetRole"
],
"Resource": "*"
},
{
"Sid": "EKS",
"Effect": "Allow",
"Action": [
"eks:CreateAddon",
"eks:DescribeAddon",
"eks:CreatePodIdentityAssociation",
"eks:DescribeCluster"
],
"Resource": "*"
},
{
"Sid": "IAMPassRole",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws:iam::*:role/CertManagerPrivateCARole"
}
]
}
- Other clusters
-
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "GetAndIssuePCACertificates",
"Effect": "Allow",
"Action": [
"acm-pca:GetCertificate",
"acm-pca:IssueCertificate"
],
"Resource": "*"
},
{
"Sid": "RolesAnywhere",
"Effect": "Allow",
"Action": [
"rolesanywhere:CreateProfile"
],
"Resource": "*"
},
{
"Sid": "IAM",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:AttachRolePolicy"
],
"Resource": "*"
},
{
"Sid": "IAMPassRole",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws:iam::*:role/CertManagerPrivateCARole"
}
]
}
-
Kubernetes クラスター。Amazon Elastic Kubernetes Service クラスターを作成するには、Amazon EKS クイックスタートガイドを参照してください。分かりやすいように、クラスター名を保持する環境変数を作成します。
export CLUSTER=aws-privateca-demo
-
CA と Amazon EKS クラスター AWS リージョン が配置されている 。分かりやすいように、 リージョンを保持する環境変数を作成します。
export REGION=aws-region
-
AWS Private CA プライベート認証機関の Amazon リソースネーム (ARN)。わかりやすいように、プライベート CA ARN を保持する環境変数を作成します。
export CA_ARN="arn:aws:acm-pca:region:account:certificate-authority/CA_ID/certificate/certificate_ID"
プライベート CA を作成するには、「 でプライベート CA https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.htmlを作成する」を参照してください。 AWS Private CA
-
次のソフトウェアがインストールされているコンピュータ。
cert-manager をインストールする
プライベート CA を使用するには、証明書をリクエストし、配布し、証明書の更新を自動化するcert-manager>アドオンをインストールする必要があります。また、プライベート証明書を発行できるaws-private-ca-issuerプラグインをインストールする必要があります AWS Private CA。アドオンとプラグインをインストールするには、次の手順を実行します。
- Amazon EKS clusters
-
Amazon EKS アドオンcert-managerとして をインストールします。
aws eks create-addon \
--cluster-name $CLUSTER \
--addon-name cert-manager \
--region $REGION
- Other clusters
-
Helm cert-managerを使用して をインストールします。
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true
IAM 許可を設定する
aws-privateca-issuer プラグインには、 とやり取りするアクセス許可が必要です AWS Private CA。Amazon EKS クラスターでは、ポッド ID を使用します。他のクラスターでは、 を使用します AWS Identity and Access Management Roles Anywhere。
IAM ポリシーを作成します。ポリシーは AWSPrivateCAConnectorForKubernetesPolicyマネージドポリシーを使用します。ポリシーの詳細については、AWS 「 マネージドポリシーリファレンスガイド」のAWSPrivateCAConnectorForKubernetesPolicy」を参照してください。
- Amazon EKS clusters
-
-
次の信頼ポリシーtrust-policy.jsonを含む という名前のファイルを作成します。
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "TrustPolicyForEKSClusters",
"Effect": "Allow",
"Principal": {
"Service": "pods.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
-
次のコマンドを実行して IAM ロールを作成します。
ROLE_ARN=$(aws iam create-role \
--role-name CertManagerPrivateCARole \
--assume-role-policy-document file://trust-policy.json \
--region $REGION \
--output text \
--query "Role.Arn")
aws iam attach-role-policy \
--role-name CertManagerPrivateCARole \
--policy-arn arn:aws:iam::aws:policy/AWSPrivateCAConnectorForKubernetesPolicy
- Other clusters
-
-
に保存されているプライベート CA を信頼するトラストアンカーを作成しますCA_ARN。手順については、「 の開始方法 IAM Roles Anywhere」を参照してください。環境変数を作成して、トラストアンカー ARN を保存します。
export TRUST_ANCHOR_ARN=trustAnchorArn
-
次の信頼ポリシーtrust-policy.jsonを含む というファイルを作成します。
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "TrustPolicyForSelfManagedOrOnPremiseClusters",
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
],
"Condition": {
"ArnEquals": {
"aws:SourceArn": [
"arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TRUST_ANCHOR_ARN"
]
},
"StringEquals": {
"aws:PrincipalTag/x509Subject/CN": "aws-privateca-issuer"
}
}
}
]
}
-
次のコマンドを実行して IAM ロールを作成します。
ROLE_ARN=$(aws iam create-role \
--role-name CertManagerPrivateCARole \
--assume-role-policy-document file://trust-policy.json \
--query "Role.Arn" \
--region $REGION \
--output text)
aws iam attach-role-policy \
--role-name CertManagerPrivateCARole \
--region $REGION \
--policy-arn arn:aws:iam::aws:policy/AWSPrivateCAConnectorForKubernetesPolicy
AWS Private CA クラスター発行者をインストールして設定する
aws-privateca-connector-for-kubernetes アドオンをインストールするには、次のコマンドを使用します。
- Amazon EKS clusters
-
アドオンを作成します。
aws eks create-addon --region $REGION \
--cluster-name $CLUSTER \
--addon-name aws-privateca-connector-for-kubernetes \
--pod-identity-associations "[{
\"serviceAccount\": \"aws-privateca-issuer\",
\"roleArn\": \"$ROLE_ARN\"
}]"
次に、アドオンがアクティブになるまで待ちます。
aws eks describe-addon \
--cluster-name $CLUSTER \
--addon-name aws-privateca-connector-for-kubernetes \
--region $REGION \
--query 'addon.status'
- Other clusters
-
-
プロファイルの作成先 IAM Roles Anywhere:
PROFILE_ARN=$(aws rolesanywhere create-profile \
--name "privateca-profile" \
--role-arns "$ROLE_ARN" \
--region "$REGION" \
--query 'profile.profileArn' \
--enabled \
--output text)
-
Connector for Kubernetes で使用するクライアント証明書を生成し、以下を認証 IAM Roles Anywhere します AWS Private CA。
-
クライアント証明書のプライベートキーを生成します。
openssl genrsa -out client.key 2048
-
クライアント証明書の証明書署名リクエスト (CSR) を生成します。
openssl req -new \
-key client.key \
-out client.csr \
-subj "/CN=aws-privateca-issuer"
-
以下からクライアント証明書を発行します AWS Private CA。
CERT_ARN=$(aws acm-pca issue-certificate \
--signing-algorithm SHA256WITHRSA \
--csr fileb://client.csr \
--validity Value=1,Type=DAYS \
--certificate-authority-arn "$CA_ARN" \
--region "$REGION" \
--query 'CertificateArn' \
--output text)
-
クライアント証明書をローカルに保存します。
aws acm-pca get-certificate \
--certificate-authority-arn $CA_ARN \
--certificate-arn $CERT_ARN \
--region $REGION \
--query 'Certificate'
--output text > pca-issuer-client-cert.pem
-
クライアント証明書を使用してクラスターに AWS Private CA 発行者をインストールします。
-
awspca Helm リポジトリを追加します。
helm repo add awspca https://cert-manager.github.io/aws-privateca-issuer
helm repo update
-
名前空間を作成します。
kubectl create namespace aws-privateca-issuer
-
前に作成した証明書をシークレットに配置します。
kubectl create secret tls aws-privateca-credentials \
-n aws-privateca-issuer \
--cert=pca-issuer-client-cert.pem \
--key=client.key
-
以下を使用して AWS Private CA 発行者をインストールします IAM Roles Anywhere。
-
という名前のファイルを作成してvalues.yaml、以下で使用する AWS Private CA 発行者プラグインを設定します IAM Roles Anywhere。
cat > values.yaml <<EOF
env:
AWS_EC2_METADATA_SERVICE_ENDPOINT: "http://127.0.0.1:9911"
extraContainers:
- name: "rolesanywhere-credential-helper"
image: "public.ecr.aws/rolesanywhere/credential-helper:latest"
command: ["aws_signing_helper"]
args:
- "serve"
- "--private-key"
- "/etc/cert/tls.key"
- "--certificate"
- "/etc/cert/tls.crt"
- "--role-arn"
- "$ROLE_ARN"
- "--profile-arn"
- "$PROFILE_ARN"
- "--trust-anchor-arn"
- "$TRUST_ANCHOR_ARN"
volumeMounts:
- name: cert
mountPath: /etc/cert/
readOnly: true
volumes:
- name: cert
secret:
secretName: aws-privateca-credentials
EOF
-
以下を使用して AWS Private CA 発行者をインストールします IAM Roles Anywhere。
helm install aws-privateca-issuer awspca/aws-privateca-issuer \
-n aws-privateca-issuer \
-f values.yaml
発行者が準備できるようになるまで待ちます。以下のコマンドを使用します。
kubectl wait --for=condition=ready pods --all -n aws-privateca-issuer --timeout=120s
次に、インストールを確認して、すべてのポッドが READY状態になっていることを確認します。
kubectl -n aws-privateca-issuer get all
を設定するにはaws-private-ca-cluster-issuer、発行者の設定cluster-issuer.yamlを含む という名前の YAML ファイルを作成します。
cat > cluster-issuer.yaml <<EOF
apiVersion: awspca.cert-manager.io/v1beta1
kind: AWSPCAClusterIssuer
metadata:
name: aws-privateca-cluster-issuer
spec:
arn: "$CA_ARN"
region: "$REGION"
EOF
次に、クラスター設定を適用します。
kubectl apply -f cluster-issuer.yaml
発行者のステータスを確認します。
kubectl describe awspcaclusterissuer aws-privateca-cluster-issuer
次のようなレスポンスが表示されます。
Status:
Conditions:
Last Transition Time: 2025-08-13T21:00:00Z
Message: AWS PCA Issuer is ready
Reason: Verified
Status: True
Type: Ready
cert-manager を使用して AWS Private CA クライアント証明書を管理する
Amazon EKS クラスターを使用していない場合は、 で信頼された証明書を手動でブートストラップした後、 によって管理されるクライアント認証証明書に移行aws-privateca-issuerできますcert-manager。これにより、 cert-manager はクライアント認証証明書を自動的に更新できます。
-
という名前のファイルを作成しますpca-auth-cert.yaml。
cat > pca-auth-cert.yaml <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: aws-privateca-client-cert
namespace: aws-privateca-issuer
spec:
secretName: aws-privateca-credentials
duration: 168h
renewBefore: 48h
commonName: aws-privateca-issuer
privateKey:
algorithm: ECDSA
size: 256
rotationPolicy: Always
usages:
- client auth
issuerRef:
name: aws-privateca-cluster-issuer
kind: AWSPCAClusterIssuer
group: awspca.cert-manager.io
EOF
-
新しいマネージドクライアント認証証明書を作成します。
kubectl apply -f pca-auth-cert.yaml
-
証明書が作成されたことを確認します。
kubectl get certificate aws-privateca-client-cert -n aws-privateca-issuer
次のようなレスポンスが表示されます。
NAME READY SECRET AGE
aws-privateca-client-cert True aws-privateca-credentials 19m
最初の TLS 証明書を発行する
これで cert-managerと aws-privateca-issuerがインストールされ、証明書を発行できます。
証明書リソースcertificate.yamlを含む という名前の YAML ファイルを作成します。
cat > certificate.yaml <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-certificate
namespace: default
spec:
secretName: example-certificate-tls
issuerRef:
name: aws-privateca-cluster-issuer
kind: AWSPCAClusterIssuer
group: awspca.cert-manager.io
commonName: example.internal
dnsNames:
- example.internal
- api.example.internal
duration: 2160h # 90 days
renewBefore: 360h # 15 days
usages:
- digital signature
- key encipherment
- server auth
EOF
次のコマンドを使用して証明書を適用します。
kubectl apply -f certificate.yaml
その後、次のコマンドを使用して証明書のステータスを確認できます。
kubectl get certificate example-certificate
kubectl describe certificate example-certificate
次のようなレスポンスが表示されます。
NAME READY SECRET AGE
example-certificate True example-certificate-tls 30s
次のコマンドを使用して、発行された証明書を検査できます。
kubectl get secret example-certificate-tls -o yaml
次のコマンドを使用して、証明書をデコードして調べることもできます。
kubectl get secret example-certificate-tls -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout