AWS Private CA Connector for Kubernetes の使用を開始します。 - AWS Private Certificate Authority

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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
  1. 次の信頼ポリシー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" ] } ] }
  2. 次のコマンドを実行して 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
  1. に保存されているプライベート CA を信頼するトラストアンカーを作成しますCA_ARN。手順については、「 の開始方法 IAM Roles Anywhere」を参照してください。環境変数を作成して、トラストアンカー ARN を保存します。

    export TRUST_ANCHOR_ARN=trustAnchorArn
  2. 次の信頼ポリシー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" } } } ] }
  3. 次のコマンドを実行して 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
  1. プロファイルの作成先 IAM Roles Anywhere:

    PROFILE_ARN=$(aws rolesanywhere create-profile \ --name "privateca-profile" \ --role-arns "$ROLE_ARN" \ --region "$REGION" \ --query 'profile.profileArn' \ --enabled \ --output text)
  2. Connector for Kubernetes で使用するクライアント証明書を生成し、以下を認証 IAM Roles Anywhere します AWS Private CA。

    1. クライアント証明書のプライベートキーを生成します。

      openssl genrsa -out client.key 2048
    2. クライアント証明書の証明書署名リクエスト (CSR) を生成します。

      openssl req -new \ -key client.key \ -out client.csr \ -subj "/CN=aws-privateca-issuer"
    3. 以下からクライアント証明書を発行します 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)
    4. クライアント証明書をローカルに保存します。

      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
  3. クライアント証明書を使用してクラスターに AWS Private CA 発行者をインストールします。

    1. awspca Helm リポジトリを追加します。

      helm repo add awspca https://cert-manager.github.io/aws-privateca-issuer helm repo update
    2. 名前空間を作成します。

      kubectl create namespace aws-privateca-issuer
    3. 前に作成した証明書をシークレットに配置します。

      kubectl create secret tls aws-privateca-credentials \ -n aws-privateca-issuer \ --cert=pca-issuer-client-cert.pem \ --key=client.key
  4. 以下を使用して AWS Private CA 発行者をインストールします IAM Roles Anywhere。

    1. という名前のファイルを作成して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
    2. 以下を使用して 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 はクライアント認証証明書を自動的に更新できます。

  1. という名前のファイルを作成します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
  2. 新しいマネージドクライアント認証証明書を作成します。

    kubectl apply -f pca-auth-cert.yaml
  3. 証明書が作成されたことを確認します。

    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-manageraws-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