如何通过AWS证书ARN或域名查询关联的AWS资源ARN?
解决方案:查询与AWS证书或域名关联的资源ARN
一、通过ACM证书ARN查询关联资源
AWS CLI没有直接内置命令可列出ACM证书关联的资源,但可以通过脚本遍历常见关联服务(如Application Load Balancer、CloudFront、API Gateway),筛选出引用目标证书ARN的资源。
以下是bash脚本示例,输入证书ARN即可返回关联资源ARN:
#!/bin/bash CERT_ARN="$1" echo "查询与证书 $CERT_ARN 关联的资源:" # 1. 查询Application Load Balancer(ELBv2)监听器 echo "--- Application Load Balancers ---" aws elbv2 describe-listeners --query "Listeners[?Certificates[?CertificateArn=='$CERT_ARN']].ListenerArn" --output text # 2. 查询CloudFront分发 echo "--- CloudFront Distributions ---" aws cloudfront list-distributions --query "DistributionList.Items[?ViewerCertificate.AcmCertificateArn=='$CERT_ARN'].ARN" --output text # 3. 查询API Gateway绑定的资源 echo "--- API Gateway REST APIs ---" # 先获取绑定该证书的自定义域名 DOMAIN_NAMES=$(aws apigateway get-domain-names --query "items[?certificateArn=='$CERT_ARN'].domainName" --output text) # 再查询每个域名对应的API ARN for DOMAIN in $DOMAIN_NAMES; do aws apigateway get-base-path-mappings --domain-name "$DOMAIN" --query "items[].restApiId" --output text | xargs -I {} aws apigateway get-rest-api --rest-api-id {} --query "ARN" --output text done
使用方式:将脚本保存为find-cert-associated-resources.sh,赋予执行权限后运行:
chmod +x find-cert-associated-resources.sh ./find-cert-associated-resources.sh "arn:aws:acm:us-east-1:123456789012:certificate/abcdef-1234-5678-90ab-cdef12345678"
二、直接通过域名查询关联资源
如果想跳过获取证书ARN的步骤,可以整合证书查询与资源关联逻辑,或直接遍历服务查找绑定目标域名的资源:
整合式脚本(域名→证书→关联资源)
以下脚本输入域名后,自动获取对应证书ARN,再查询所有关联资源:
#!/bin/bash DOMAIN="$1" # 获取域名对应的ACM证书ARN CERT_ARN=$(aws acm list-certificates --query "CertificateSummaryList[?DomainName=='$DOMAIN'].CertificateArn" --output text) if [ -z "$CERT_ARN" ]; then echo "未找到域名 $DOMAIN 对应的ACM证书" exit 1 fi echo "域名 $DOMAIN 对应的证书ARN:$CERT_ARN" echo "查询关联资源:" # 查询ELBv2监听器 echo "--- Application Load Balancers ---" aws elbv2 describe-listeners --query "Listeners[?Certificates[?CertificateArn=='$CERT_ARN']].ListenerArn" --output text # 查询CloudFront分发 echo "--- CloudFront Distributions ---" aws cloudfront list-distributions --query "DistributionList.Items[?ViewerCertificate.AcmCertificateArn=='$CERT_ARN'].ARN" --output text # 查询API Gateway资源 echo "--- API Gateway REST APIs ---" DOMAIN_NAMES=$(aws apigateway get-domain-names --query "items[?certificateArn=='$CERT_ARN'].domainName" --output text) for DOMAIN in $DOMAIN_NAMES; do aws apigateway get-base-path-mappings --domain-name "$DOMAIN" --query "items[].restApiId" --output text | xargs -I {} aws apigateway get-rest-api --rest-api-id {} --query "ARN" --output text done # 额外:直接查找绑定该域名的CloudFront分发(不通过证书) echo "--- 直接绑定域名的CloudFront Distributions ---" aws cloudfront list-distributions --query "DistributionList.Items[?Origins.Items[?DomainName=='$DOMAIN']].ARN" --output text
使用方式:
chmod +x find-domain-resources.sh ./find-domain-resources.sh "example.com"
直接查询绑定域名的资源(不依赖证书)
对于未使用ACM证书的资源(如HTTP协议的ELB),可以直接通过域名筛选:
- 查询绑定域名的ELBv2规则:
aws elbv2 describe-rules --query "Rules[?Conditions[?Field=='host-header' && Values[?contains(@, '$DOMAIN')]]].RuleArn" --output text
- 查询绑定域名的API Gateway自定义域名:
aws apigateway get-domain-names --query "items[?domainName=='$DOMAIN'].domainName" --output text
内容的提问来源于stack exchange,提问作者kgcwc09
相关产品推荐
相关产品推荐

