Credentials 设置

Credentials 配置介绍。

使用 AccessKey 作为访问凭据,需要在初始化 Client 时设置凭证。示例代码如下:

注意

确保包含 AccessKey 的代码不会泄漏(例如提交到外部公开的 GitHub 项目),否则将会危害您的阿里云账号的信息安全。

使用 AccessKey 调用(包含 STS Token 方式)

最简单也是使用最多的方式是直接通过 AlibabaCloud.OpenApiClient.Models.Config 配置进行设置:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;


namespace AlibabaCloud.SDK.Sample
{
    public class Program 
    {
        public static void Main(string[] args)
        {
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 您的 AccessKey ID
                AccessKeyId = "accessKeyId",
                // 您的 AccessKey Secret
                AccessKeySecret = "accessKeySecret",
                // 您的 STS Token
                // SecurityToken = "securityToken",
            };
            // 访问的域名
            config.Endpoint = "ecs-cn-hangzhou.aliyuncs.com";
            AlibabaCloud.SDK.Ecs20140526.Client client = AlibabaCloud.SDK.Ecs20140526.Client(config);
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest describeRegionsRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeRegionsRequest();
            // 复制代码运行请自行打印 API 的返回值
            client.DescribeRegions(describeRegionsRequest);
        }
    }
}

或者使用 SDK Credentials 的方式,该方式是最权威的方式,提供了多种 Credentials 认证配置。下面我们主要介绍 SDK Credentials 的方式。

使用 SDK Credentials 包

安装

通过 .NET CLI 工具来安装

dotnet add package Aliyun.Credentials

通过 NuGet 程序包管理器来安装:

解决方案资源管理器面板 中右击您的项目选择 管理 NuGet 程序包 菜单,在打开的 NuGet 管理面板 中点击 浏览 选项卡输入 Aliyun.Credentials,在下方列表中选择 AuthorsAlibaba Cloud 由官方发布的包点击 安装 即可。

配置 AccessKey

通过用户信息管理设置 access_key,它们具有该账户完全的权限,请妥善保管。有时出于安全考虑,您不能把具有完全访问权限的主账户 AccessKey 交于一个项目的开发者使用,您可以创建RAM子账户并为子账户授权,使用RAM子用户的 AccessKey 来进行API调用。

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "access_key",                    // 凭证类型
                AccessKeyId = "<AccessKeyId>",          // AccessKeyId
                AccessKeySecret = "<AccessKeySecret>"   // AccessKeySecret
            };
            var akCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = akCredential.GetAccessKeyId();
            string accessSecret = akCredential.GetAccessKeySecret();
            string credentialType = akCredential.GetType();
        }
    }
}

配置 STS Token

通过安全令牌服务(Security Token Service,简称 STS),申请临时安全凭证(Temporary Security Credentials,简称 TSC),创建临时安全凭证。

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "sts",                           // 凭证类型
                AccessKeyId = "<AccessKeyId>",          // AccessKeyId
                AccessKeySecret = "<AccessKeySecret>",  // AccessKeySecret
                SecurityToken = "<SecurityToken>"       // STS Token
            };
            var stsCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = stsCredential.GetAccessKeyId();
            string accessSecret = stsCredential.GetAccessKeySecret();
            string credentialType = stsCredential.GetType();
            string securityToken = stsCredential.GetSecurityToken();
        }
    }
}

配置 RamRoleArn

通过指定RAM角色,让凭证自动申请维护 STS Token。你可以通过为 Policy 赋值来限制获取到的 STS Token 的权限。

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "ram_role_arn",                  // 凭证类型
                AccessKeyId = "<AccessKeyId>",          // AccessKeyId
                AccessKeySecret = "<AccessKeySecret>",  // AccessKeySecret
                RoleArn = "<RoleArn>",                  // 格式为:acs:ram::userId:role/roleName
                RoleSessionName = "<RoleSessionName>",  // 角色会话名称
            };
            var arnCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = arnCredential.GetAccessKeyId();
            string accessSecret = arnCredential.GetAccessKeySecret();
            string credentialType = arnCredential.GetType();
            string securityToken = arnCredential.GetSecurityToken();
        }
    }
}

配置 EcsRamRole

通过指定角色名称,让凭证自动申请维护 STS Token

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "ecs_ram_role",      // 凭证类型
                RoleName = "<RoleName>"     // 账户RoleName,非必填,不填则自动获取,建议设置,可以减少请求up to reduce requests
            };
            var ecsCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = ecsCredential.GetAccessKeyId();
            string accessSecret = ecsCredential.GetAccessKeySecret();
            string credentialType = ecsCredential.GetType();
            string securityToken = ecsCredential.GetSecurityToken();
        }
    }
}

配置 RsaKeyPair

通过指定公钥 ID 和私钥文件,让凭证自动申请维护 AccessKey。仅支持日本站。

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "rsa_key_pair",                  // 凭证类型
                PrivateKeyFile = "<PrivateKeyFile>",    // PrivateKey文件路径
                PublicKeyId = "<PublicKeyId>"           // 账户PublicKeyId
            };
            var rsaCredential = new Aliyun.Credentials.Client(config);

            string accessKeyId = rsaCredential.GetAccessKeyId();
            string accessSecret = rsaCredential.GetAccessKeySecret();
            string credentialType = rsaCredential.GetType();
            string securityToken = rsaCredential.GetSecurityToken();
        }
    }
}

配置 Bearer Token

如呼叫中心(CCC)产品需用此凭证,请自行申请维护 Bearer Token。

using Aliyun.Credentials.Models;

namespace credentials_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Config config = new Config()
            {
                Type = "bearer",                    // 凭证类型
                BearerToken = "<BearerToken>"       // BearerToken
            };
            var bearerCredential = new Aliyun.Credentials.Client(config);

            string bearerToken = bearerCredential.GetBearerToken();
            string credentialType = bearerCredential.GetType();
        }
    }
}

凭证提供程序链

如果你调用 new Client(config) 时传入 null, 将通过凭证提供链来为你获取凭证。

  1. 环境凭证

程序首先会在环境变量里寻找环境凭证,如果定义了 ALICLOUD_ACCESS_KEYALICLOUD_SECRET_KEY 环境变量且不为空,程序将使用他们创建凭证。如否则,程序会在配置文件中加载和寻找凭证。

2. 配置文件

如果用户主目录存在默认文件 ~/.alibabacloud/credentials (Windows 为 C:\Users\USER_NAME\.alibabacloud\credentials),程序会自动创建指定类型和名称的凭证。默认文件可以不存在,但解析错误会抛出异常。也可以手动加载指定文件: AlibabaCloud::load('/data/credentials', 'vfs://AlibabaCloud/credentials', ...); 不同的项目、工具之间可以共用这个配置文件,因为超出项目之外,也不会被意外提交到版本控制。Windows 上可以使用环境变量引用到主目录 %UserProfile%。类 Unix 的系统可以使用环境变量 $HOME 或 ~ (tilde)。 可以通过定义 ALIBABA_CLOUD_CREDENTIALS_FILE 环境变量修改默认文件的路径。

[default]                          # 默认凭证
type = access_key                  # 认证方式为 access_key
access_key_id = foo                # access key id
access_key_secret = bar            # access key secret

3. 实例 RAM 角色

如果定义了环境变量 ALIBABA_CLOUD_ECS_METADATA 且不为空,程序会将该环境变量的值作为角色名称,请求 http://100.100.100.200/latest/meta-data/ram/security-credentials/ 获取临时安全凭证。

阿里云首页 阿里云SDK 相关技术圈