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
,在下方列表中选择 Authors
为 Alibaba 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, 将通过凭证提供链来为你获取凭证。
环境凭证
程序首先会在环境变量里寻找环境凭证,如果定义了 ALICLOUD_ACCESS_KEY
和 ALICLOUD_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/
获取临时安全凭证。