
# 使用访问凭证访问华为云API最佳实践
应用访问云服务API需要进行认证，常用的方式是在应用程序中维护一个访问密钥，使用访问密钥签名并调用云服务的API。但访问密钥一旦生成，除非主动禁用或删除，否则长期有效。一旦泄露，攻击者可以长期利用，并访问访问密钥所属用户有权限操作的所有云资源。为避免访问密钥泄露，应用程序需要对其进行安全防护，比如限制使用范围，加密存储、定期轮转等，无形中增加了访问密钥的使用门槛和使用成本。
#### 访问凭证类型
访问凭证分为访问密钥和临时安全凭证：
- 访问密钥，即AK/SK（Access Key ID/Secret Access Key），是您访问华为云时的一种永久身份凭证，不能登录控制台。系统通过AK识别访问用户的身份，通过SK进行签名验证，通过加密签名验证可以确保请求的机密性、完整性和请求者身份的正确性。具体请参见[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_05_0003.html)。
- 临时安全凭证，包括临时访问密钥（临时AK/SK）和securitytoken。临时安全凭证除了具备访问密钥特性，还具备时效性，可对有效期进行设置，到期后无法重复使用，只能重新获取。临时安全凭证生命周期较短，因此相比永久访问密钥更加安全，而且也支持对原有的操作权限进行进一步约束。具体请参见[临时安全凭证](https://support.huaweicloud.com/usermanual-iam5/iam_01_1236.html)。
 
#### 典型的访问凭证泄露场景
- 公开资料中存在明文的访问凭证。
- 将包含访问凭证的代码上传至公开的GitHub等公共代码仓。
- 业务代码中有硬编码的明文访问凭证，并交给第三方员工使用。
 
#### 访问凭证的安全使用方案
常见场景下，为了降低访问凭证泄露，对应的访问凭证安全使用方案如下表所示。
表1访问凭证安全使用方案 
| 方案名称                            | 适用场景                                                                                                                                                                                                                                                                        |
|:---|:---|
| 在华为云命令行工具（KooCLI）中使用配置项参数设置访问凭证 | 您需要通过KooCLI调用云服务时，可以在KooCLI配置项中配置临时安全凭证、ecsAgency（当在被委托的ECS服务器中使用KooCLI调用云服务时，会根据ECS委托自动获取临时认证信息）、SSO登录的方式设置身份凭证，代替访问密钥。详细方案请参考[操作指导](https://support.huaweicloud.com/usermanual-hcli/hcli_03_003_01.html)。                                                                 |
| 在ECS上通过委托的临时安全凭证访问其他云服务         | 客户开发的应用程序运行的ECS实例上，该应用程序需要调用API访问云服务资源，此时需要为应用程序配置访问凭证进行身份验证。您可以创建ECS云服务委托，授权ECS服务从IAM获取临时安全凭证，应用程序无需关注访问凭证的管理和维护，直接从ECS元数据服务获取临时安全凭证，即可签名后调用云服务API。ECS会为您自动轮换这些临时安全凭证，从而确保每次申请的临时安全凭证安全有效。详细方案请参考[操作指导](https://support.huaweicloud.com/usermanual-iam5/iam_01_1286.html)。 |
| 其他场景                            | 若以上方案均不适用于您的场景，建议您合理配置并保存访问凭证，并定期轮转。                                                                                                                                                                                                                                        |
   
#### 在华为云命令行工具（KooCLI）中使用配置项参数设置访问凭证
- **场景描述**
  客户在命令行工具（KooCLI）上调用云服务，可以通过增加配置项的方式，设置访问凭证。已配置多个配置项的情况下，您可在命令中以"--cli-profile"指定要操作或使用的配置项的名称，以"--cli-mode"指定认证模式。
  认证模式取值范围：
  - 访问凭证：分为访问密钥和临时安全凭证。访问密钥即为永久AK/SK，临时安全凭证即为临时AK/SK和SecurityToken。
  
  - ecsAgency：当委托给ECS服务器时，在ECS服务器中使用KooCLI调用云服务时自动获取临时认证信息。建议使用该方式设置访问凭证，避免在命令行的历史信息中可查询到明文的访问凭证。
  
  - SSO：开通[IAM身份中心](https://support.huaweicloud.com/qs-identitycenter/iic_02_0002.html)并完成配置后，允许用户使用特定用户名和密码登录统一的用户门户网站，访问为其分配的多个账号下的资源。认证信息有效期内，无需多次登录。
    
- **设置访问凭证**
  - 设置认证模式为AK/SK的配置项，其中认证参数为临时安全凭证，即临时AK（cli-access-key），SK（cli-secret-key）和SecurityToken（cli-security-token），使用临时安全凭证相比访问密钥，降低了凭证的暴露时间：
    ```
    hcloud configure set --cli-profile=testAKSKST --cli-mode=AKSK --cli-region=cn-north-4 --cli-access-key=******** --cli-secret-key=******** --cli-security-token=******** --cli-project-id=068119468****************af89d2e --cli-domain-id=094518e46****************cfbc4c0 --cli-read-timeout=10 --cli-connect-timeout=5
    ```
    
  
  - 当配置项的认证模式为AK/SK时，若该配置项中同时配置了cli-security-token参数值，则默认其中cli-access-key和cli-secret-key为临时AK/SK，否则为永久AK/SK。
  
  - 设置认证模式为ecsAgency的配置项，无需添加认证参数：
    ```
    hcloud configure set --cli-profile=testEcsAgency --cli-mode=ecsAgency --cli-region=cn-north-4 --cli-read-timeout=10 --cli-connect-timeout=5
    ```
    
  
  - 当在被委托的ECS服务器中使用KooCLI调用云服务时，会根据ECS委托自动获取临时认证信息。
  
  - 设置认证模式为SSO的配置项，其中认证参数为用户门户URL（cli-sso-start-url），开通IAM身份中心实例所在的区域（cli-sso-region），账号名（cli-sso-account-name），权限集名称（cli-sso-permission-set-name），其中参数cli-sso-account-name与cli-sso-permission-set-name非必填：
    1. 先新增认证模式为SSO的配置项：
       ```
       hcloud configure set --cli-profile=testSSO --cli-mode=SSO --cli-region=cn-north-4 --cli-sso-start-url=https://idcenter.huaweicloud.com/d-3********6/portal --cli-sso-region=cn-north-4 --cli-sso-account-name=ACCOUNT_01 --cli-sso-permission-set-name=PERMISSION_01
       ```
       
    
    2. 进行SSO登录，若第一步中未配置cli-sso-account-name与cli-sso-permission-set-name参数，登录过程中需按照提示选择账号名与权限集名称：
       ```
       hcloud configure sso --cli-profile=testSSO
       ```
       
     
   
 
#### 在ECS上通过委托的临时安全凭证访问其他云服务
- **场景描述**
  假如您是一位开发者，开发了一个应用程序，这个应用程序运行在ECS实例上，应用程序的代码中涉及调用API访问华为云服务。您的应用程序若想要以更安全的方式访问云服务，需要获取临时安全凭证，而IAM的委托功能，则支持通过ECS委托获取临时安全凭证。
  图1通过ECS委托获取临时安全凭证   
  ![](https://support.huaweicloud.com/bestpractice-iam5/zh-cn_image_0000002502033140.png "点击放大") 
- **操作步骤**
  通过ECS委托获取临时安全凭证的操作流程如下图所示。详细操作步骤请参见[操作指导](https://support.huaweicloud.com/usermanual-iam5/iam_01_1286.html)。
  图2通过ECS委托获取临时安全凭证的操作流程   
  ![](https://support.huaweicloud.com/bestpractice-iam5/zh-cn_image_0000002533793141.png "点击放大") 
 
#### 其他场景
若以上方案均不适用，必须使用访问密钥时，建议按照以下最佳实践妥善管理：
- 不为华为账号创建访问密钥。
- 不为仅需要访问控制台的IAM用户创建访问密钥。
- 不将访问密钥明文嵌入代码。
- 妥善保管访问密钥，不随意分享，不记录在公开文档中。
- 为IAM用户仅授予最小必要权限。
- 访问密钥停用后，及时删除。
- 定期轮转访问密钥：一个IAM用户启用一对访问密钥后，另一对仅用于轮转。
 
