Skip to content

本文为 SPIRE 官方文档 plugin_server_upstreamauthority_aws_pca 的中文译本,以英文原文为准。

🔗 穿越源码分析:Server 详解 · UpstreamAuthority · 上游 CA 与无缝轮换

服务端插件:UpstreamAuthority "aws_pca"

aws_pca 插件使用来自 AWS Certificate Manager(ACM)Private Certificate Authority(PCA)的证书颁发机构(certificate authority),为 SPIRE Server 签名中间签名证书(intermediate signing certificate)。

该插件接受以下配置项:

配置项说明
region要使用的 AWS 区域(Region)
certificate_authority_arn"上游" CA 证书的 ARN
ca_signing_template_arn(可选)用于 server CA 的签名模板(signing template)的 ARN。默认为仅用于终端实体(end-entity)证书的签名模板。可能的取值见 Using Templates
signing_algorithm(可选)用于 server CA 的签名算法。默认为 CA 的默认值。可能的取值见 Issue Certificate
assume_role_arn(可选)要担任(assume)的 IAM 角色的 ARN
endpoint(可选)以主机名或全限定 URI 形式给出的端点(endpoint),用于覆盖默认端点。更多信息见 AWS SDK Config docs
supplemental_bundle_path(可选)一个文件的路径,该文件包含应额外纳入信任包(bundle)的 PEM 编码 CA 证书。

插件会尝试使用默认凭据提供链(default provider chain)加载 AWS 凭据。这包括来自环境变量、共享凭据文件以及 EC2 实例角色的凭据。完整的默认凭据链见 Specifying Credentials

关于 ACM Private Certificate Authority 的更多细节,见 AWS Certificate Manager Private Certificate Authority

注意:来自 ACM 的 Private Certificate Authority 无法在保持相同 ARN 的前提下轮换其私钥。因此,目前若要更改由哪个 ACM CA 为 SPIRE 签名中间 CA,需要重启 SPIRE server。建议为 SPIRE 使用一个持久化的密钥存储(key store),以便在重启后仍保留已有的中间签名证书。

配置示例:

hcl
UpstreamAuthority "aws_pca" {
    plugin_data {
        region = "us-west-2"
        certificate_authority_arn = "arn:aws:acm-pca:us-west-2:123456789012:certificate-authority/12ac02bc-d425-49f7-ab78-570a44972772"
        ca_signing_template_arn = "arn:aws:acm-pca:::template/SubordinateCACertificate_PathLen0/V1"
        signing_algorithm = "SHA256WITHECDSA"
        assume_role_arn = "arn:aws:iam::123456789012:role/my-role"
    }
}

SPIRE server 要求为所用的 IAM 身份配置以下策略。

注意:所提供的示例允许访问所有 CA 和证书。应将资源(Resource)细化指定,以进一步限制授权范围。见 Configure Access to ACM Private CA

json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ACMPCASigning",
            "Effect": "Allow",
            "Action": [
                "acm-pca:DescribeCertificateAuthority",
                "acm-pca:IssueCertificate",
                "acm-pca:GetCertificate"
            ],
            "Resource": "*"
        }
    ]
}