14.3. 准备 AWS 帐户
当 cert-manager 从 Let's Encrypt (或其他 ACME 证书签发者)请求证书时,Let 的 Encrypt 服务器会验证您是否使用 质询 控制该证书中的域名。在本教程中,您使用 DNS-01 质询,它证明您通过在域名下将特定值放在 TXT 记录中来控制您的域名的 DNS。这一切都由 cert-manager 自动完成。要允许 cert-manager 权限为您的域修改 Amazon Route 53 公共托管区,您需要创建一个具有特定策略权限的 Identity Access Management (IAM)角色,以及允许访问 pod 的信任关系。
本教程中使用的公共托管区与 ROSA 集群位于同一个 AWS 帐户。如果您的公共托管区位于不同的帐户中,则需要执行一些额外的步骤来 跨 帐户访问。
检索 Amazon Route 53 公共托管区 ID:
注意此命令查找与之前作为
DOMAIN
环境变量指定的自定义域匹配的公共托管区。您可以通过运行export ZONE_ID=<zone_ID
> 来手动指定 Amazon Route 53 公共托管区,将 <zone_ID&
gt; 替换为您的特定的 Amazon Route 53 公共托管区 ID。$ export ZONE_ID=$(aws route53 list-hosted-zones-by-name --output json \ --dns-name "${DOMAIN}." --query 'HostedZones[0]'.Id --out text | sed 's/\/hostedzone\///')
为 cert-manager Operator 创建 AWS IAM 策略文档,它提供 只 更新指定的公共托管区的功能:
$ cat <<EOF > "${SCRATCH}/cert-manager-policy.json" { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:GetChange", "Resource": "arn:aws:route53:::change/*" }, { "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets", "route53:ListResourceRecordSets" ], "Resource": "arn:aws:route53:::hostedzone/${ZONE_ID}" }, { "Effect": "Allow", "Action": "route53:ListHostedZonesByName", "Resource": "*" } ] } EOF
使用您在上一步中创建的文件创建 IAM 策略:
$ POLICY_ARN=$(aws iam create-policy --policy-name "${CLUSTER}-cert-manager-policy" \ --policy-document file://${SCRATCH}/cert-manager-policy.json \ --query 'Policy.Arn' --output text)
为 cert-manager Operator 创建 AWS IAM 信任策略:
$ cat <<EOF > "${SCRATCH}/trust-policy.json" { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "StringEquals" : { "${OIDC_ENDPOINT}:sub": "system:serviceaccount:cert-manager:cert-manager" } }, "Principal": { "Federated": "arn:aws:iam::$AWS_ACCOUNT_ID:oidc-provider/${OIDC_ENDPOINT}" }, "Action": "sts:AssumeRoleWithWebIdentity" } ] } EOF
使用您在上一步中创建的信任策略,为 cert-manager Operator 创建 IAM 角色:
$ ROLE_ARN=$(aws iam create-role --role-name "${CLUSTER}-cert-manager-operator" \ --assume-role-policy-document "file://${SCRATCH}/trust-policy.json" \ --query Role.Arn --output text)
将权限策略附加到角色:
$ aws iam attach-role-policy --role-name "${CLUSTER}-cert-manager-operator" \ --policy-arn ${POLICY_ARN}