기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS Private CA Connector for Kubernetes를 시작합니다.
다음 주제에서는를 AWS Private CA 사용하여 Kubernetes 클러스터에서 통신을 보호하는 방법을 보여줍니다. 또 다른 예는 GitHub의 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
-
Helmcert-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 클러스터의 경우 포드 자격 증명을 사용합니다. 다른 클러스터의 경우를 사용합니다 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)
-
Kubernetes용 커넥터와 함께 사용하고 AWS Private CA다음을 사용하여 인증 IAM Roles Anywhere 할 클라이언트 인증서를 생성합니다.
-
클라이언트 인증서에 대한 프라이빗 키를 생성합니다.
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
-
IAM Roles Anywhere다음을 사용하여 AWS Private CA 발급자를 설치합니다.
-
라는 파일을 생성values.yaml하여 IAM Roles Anywhere다음과 함께 사용할 AWS Private CA 발급자 플러그인을 구성합니다.
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
-
IAM Roles Anywhere다음을 사용하여 AWS Private CA 발급자를 설치합니다.
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
를 구성하려면 발급자의 구성을 cluster-issuer.yaml포함하는 라는 YAML 파일을 aws-private-ca-cluster-issuer생성합니다.
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