SuperAPI AI 工具集

oraclecloud-install-auth

部署与运维

查看项目

更新于 10-16 10:10

技能介绍

用途

Oracle Cloud Install & Auth 用于配置 Oracle Cloud Infrastructure(OCI)的 API 密钥认证。OCI 认证需要 ~/.oci/config 文件,其中包含五个必填字段:用户 OCID、指纹、租户 OCID、区域以及 RSA 私钥路径。任何一个字段错误都会产生难以定位的 ConfigFileNotFound 或 InvalidKeyFilePath 错误。该技能的目标是生成经过验证的 ~/.oci/config 文件、生成 RSA 密钥对、将公钥上传到 OCI,并通过 Python SDK 和 OCI CLI 验证连接。

主要能力

  • 安装 OCI Python SDK 和 CLI(pip install oci oci-cli)
  • 生成 RSA 密钥对并设置私钥权限为 600
  • 获取密钥指纹
  • 在 OCI 控制台上传公钥
  • 创建包含五个必填字段的 ~/.oci/config 文件
  • 使用 Python SDK 验证认证(oci.config.validate_config、IdentityClient)
  • 使用 OCI CLI 验证认证(oci iam user get)
  • 提供配置验证脚本以捕获常见配置错误
  • 支持多配置文件(如 dev/staging/prod)

使用方式

前置条件:拥有活跃租户的 OCI 账户(https://cloud.oracle.com)、Python 3.8+、OpenSSL、用户 OCID、租户 OCID 以及家庭区域。

步骤:

  1. 安装 OCI Python SDK 和 CLI:pip install oci oci-cli
  2. 生成 RSA 密钥对:
    mkdir -p ~/.oci
    openssl genrsa -out ~/.oci/oci_api_key.pem 2048
    chmod 600 ~/.oci/oci_api_key.pem
    openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem
    
  3. 获取密钥指纹:
    openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
    
  4. 将公钥上传到 OCI 控制台:Profile > User Settings > API Keys > Add API Key > Paste Public Key,粘贴 ~/.oci/oci_api_key_public.pem 的内容,控制台显示的指纹必须与步骤 3 匹配。
  5. 创建配置文件:
    cat > ~/.oci/config << 'EOF'
    [DEFAULT]
    user=ocid1.user.oc1..aaaa_YOUR_USER_OCID
    fingerprint=ab:cd:ef:12:34:56:78:90:ab:cd:ef:12:34:56:78:90
    tenancy=ocid1.tenancy.oc1..aaaa_YOUR_TENANCY_OCID
    region=us-ashburn-1
    key_file=~/.oci/oci_api_key.pem
    EOF
    chmod 600 ~/.oci/config
    
    所有五个字段均为必填。key_file 必须指向私钥(而非公钥 .pem)。
  6. 使用 Python SDK 验证:
    import oci
    config = oci.config.from_file("~/.oci/config")
    oci.config.validate_config(config)
    identity = oci.identity.IdentityClient(config)
    user = identity.get_user(config["user"]).data
    print(f"Authenticated as: {user.name} ({user.email})")
    print(f"Tenancy: {config['tenancy']}")
    print(f"Region: {config['region']}")
    
  7. 使用 OCI CLI 验证:
    oci iam user get --user-id "$(grep ^user ~/.oci/config | cut -d= -f2)" \
      --query 'data.name' --raw-output
    
  8. 配置验证脚本(validate_oci_config.py):
    import oci
    import os
    
    def validate():
        """Validate OCI config file and key access."""
        config_path = os.path.expanduser("~/.oci/config")
        if not os.path.exists(config_path):
            raise FileNotFoundError(f"Config not found: {config_path}")
    
        config = oci.config.from_file(config_path)
        oci.config.validate_config(config)
    
        key_path = os.path.expanduser(config.get("key_file", ""))
        if not os.path.exists(key_path):
            raise FileNotFoundError(f"Private key not found: {key_path}")
    
        perms = oct(os.stat(key_path).st_mode)[-3:]
        if perms != "600":
            print(f"WARNING: Key file permissions are {perms}, should be 600")
    
        identity = oci.identity.IdentityClient(config)
        identity.get_user(config["user"])
        print("Config is valid. Authentication successful.")
    
    validate()
    

多配置文件示例:

# ~/.oci/config
[DEFAULT]
user=ocid1.user.oc1..aaaa_PROD_USER
tenancy=ocid1.tenancy.oc1..aaaa_PROD
region=us-ashburn-1
fingerprint=ab:cd:...
key_file=~/.oci/oci_api_key.pem

[STAGING]
user=ocid1.user.oc1..aaaa_STAGING_USER
tenancy=ocid1.tenancy.oc1..aaaa_STAGING
region=us-phoenix-1
fingerprint=12:34:...
key_file=~/.oci/oci_api_key_staging.pem

# Load a specific profile
config = oci.config.from_file("~/.oci/config", profile_name="STAGING")

适用场景

  • 设置新的 OCI 集成
  • 生成 API 签名密钥
  • 排查 OCI 认证错误(如 NotAuthenticated、ConfigFileNotFound、InvalidKeyFilePath、InvalidPrivateKey、NotAuthorizedOrNotFound、CERTIFICATE_VERIFY_FAILED)
  • 管理多环境(dev/staging/prod)的 OCI 配置文件

限制

  • 需要 OCI 账户、Python 3.8+、OpenSSL 和必要的 OCID 信息
  • 五个配置字段必须全部正确,否则会产生难以定位的错误
  • 公钥必须在 OCI 控制台手动上传,指纹必须与本地生成的一致
  • 私钥文件权限应为 600,否则会有安全警告
  • 企业代理环境下可能遇到 SSL 证书问题(CERTIFICATE_VERIFY_FAILED)
  • 认证成功后可继续使用 oraclecloud-hello-world 启动第一个计算实例,或参考 oraclecloud-common-errors 解决认证问题

输出结果

成功完成后将产生:

  • RSA 密钥对:~/.oci/oci_api_key.pem(私钥)和 ~/.oci/oci_api_key_public.pem(公钥)
  • 经过验证的 ~/.oci/config 文件,包含所有五个必填字段
  • 公钥已上传到 OCI 用户配置文件,且指纹匹配
  • 通过 Python SDK 或 OCI CLI 确认 API 连接正常