zoukankan      html  css  js  c++  java
  • Aliyun

    RAM 创建用户

    1. 登录https://ram.console.aliyun.com/
    2. 用户管理 功能中,新建一个 duchaoqun 用户,记录 AccessKeyIDAccessKeySecret
    3. 点击用户进入 用户授权策略 添加一个权限 AliyunSTSAssumeRoleAccess
    4. 角色管理 里面,再创建一个 duchaoqun 的角色,记录 Arn 字符串,最后给这个角色授权 AliyunOSSFullAccess

    App-Token-Server

    • 在 app-token-server 上配置用户和角色的信息,然后APP再发起请求的时候,返回临时的权限。
    {
      "AccessKeyID": "",
      "AccessKeySecret": "",
      "RoleArn": "acs:ram::",
      "TokenExpireTime": "3600",
      "PolicyFile": "policy/bucket_write_policy.txt"
    }
    • AccessKeyID:填写用户的AccessKeyID。
    • AccessKeySecret:填写用户的AccessKeySecret。
    • RoleArn:填写角色的RoleArn。
    • TokenExpireTime:指Android/iOS应用取到这个Token的失效时间,注意,最少是900s,默认值可以不修改。
    • PolicyFile:填写的是该Token所要拥有的权限列表的文件,默认值可以不修改。

    三种最常用token权限文件,放于policy目录下面。分别是:

    • all_policy.txt:指定了该token拥有对该账号下创建Bucket、删除Bucket、上传文件、下载文件、删除文件的权限 。
    • bucket_read_policy.txt:指定了该token拥有该账号下对指定Bucket的读权限。
    • bucket_read_write_policy.txt:指定了该token拥有该账号下对指定Bucket的读写权限。
    • 如果您想要指定这个Token只能对指定的bucket有读写权限, 请把(bucket_read_policy.txt、 bucket_read_write_policy.txt)这些文件里面$BUCKET_NAME直接替换成指定的bucket名字。

    在我们指定的服务器上启动服务:java -jar oss-token-server.jar [port]

    返回的数据内容:

    {
      "status":"200",
      "AccessKeyId":"",
      "AccessKeySecret":"",
      "Expiration":"2020-04-01T03:42:11Z"
    }

    App-Token-Server policy 权限配置

    • 子账号拥有单个bucket(duchaoqun)的全部权限,Server端的配置如下,然后再OSS的web端配置Bucket的授权策略为 duchaoqun/* duchaoqun 读/写 允许
    {
      "Statement": [
        {
          "Action": [
            "oss:*"
          ],
          "Effect": "Allow",
          "Resource": ["acs:oss:*:*:duchaoqun/*"]
        }
      ],
      "Version": "1"
    }

    C#Demo

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;
    using System.Web.Script.Serialization;
    using System.IO;
    using Aliyun.OSS;
    
    namespace Socks
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                HttpWebRequest req = WebRequest.Create("http://fssdemo.rexen.com.cn:7080/") as HttpWebRequest;
                HttpWebResponse rep = req.GetResponse() as HttpWebResponse;
                JavaScriptSerializer js = new JavaScriptSerializer();
                var reader = new StreamReader(rep.GetResponseStream());
                var objText = reader.ReadToEnd();
                StsData json = js.Deserialize(objText, typeof(StsData)) as StsData;
    
                Console.WriteLine(json.Status);
    
                var endpoint = "oss-cn-beijing.aliyuncs.com";
                var accessKeyId = json.AccessKeyId;
                var accessKeySecret = json.AccessKeySecret;
                var securityToken = json.SecurityToken;
    
                var ossStsClient = new OssClient(endpoint, accessKeyId, accessKeySecret, securityToken);
    
                string filePath = @"D:db.sqlite";  //获取本机路径,找到文件
                StreamReader sr = new StreamReader(filePath, Encoding.Default);   //创建文件流
                                                                                  // 上传文件。
                ossStsClient.PutObject("rexen", "test", sr.BaseStream);
                Console.WriteLine("Put object succeeded");
            }
        }
        public class StsData
        {
            public string Status { get; set; }
            public string AccessKeyId { get; set; }
            public string AccessKeySecret { get; set; }
            public string SecurityToken { get; set; }
            public string Expiration { get; set; }
        }
    }

    Server 相应问题

    1. ErrorCode: NoPermission ErrorMessage: Roles may not be assumed by root accounts.
      使用主用户的密钥调用AssumeRole,请使用子用户的密钥。
    2. ErrorCode: MissingSecurityToken ErrorMessage: SecurityToken is mandatory for this action.
      使用临时用户的密钥调用AssumeRole,请使用子用户的密钥。
    3. Error code: InvalidAccessKeyId.NotFound Error message: Specified access key is not found.
      AccessKeyId无效,请检查是否写错,特别是前后不能后空格。
    4. Error code: InvalidAccessKeyId.Inactive Error message: Specified access key is disabled.
      使用的子用户的密钥,已经被禁止,请启用密钥或更换密钥。 密钥是否被禁止,请控制台的“访问控制->用户管理->管理->用户详情->用户AccessKey”确认,并开启。
    5. ErrorCode: InvalidParameter.PolicyGrammar ErrorMessage: The parameter Policy has not passed grammar check.
      角色扮演时指定的授权策略无效。AssumeRole时可以指定授权(Policy),也可以不指定。如果指定授权策略,则临时用户的权限是指定的授权策略和角色权限的交集;如果不指定授权策略,临时用户的权限是角色的权限。报该错误时,请检查指定的授权策略Policy。不推荐临时用户扮演角色时指定授权策略。如果的确需要使用授权策略,强烈建使用 RAM Policy Editor 生成授权策略。
    6. ErrorCode: InvalidParameter.RoleSessionName ErrorMessage: The parameter RoleSessionName is wrongly formed.
      角色扮演时指定RoleSessionName无效。此参数用来区分不同的Token,以标明谁在使用此Token,便于审计; 格式:^[a-zA-Z0-9.@-_]+$,2-32个字符,了解更多请参看 扮演角色操作接口。如命名a,1,abc*abc,忍者神龟等都是非法的
    7. ErrorCode: InvalidParameter.DurationSeconds Error message: The Min/Max value of DurationSeconds is 15min/1hr.
      角色扮演时指定的过期时间无效,即AssumeRoleRequest.setDurationSeconds参数无效。角色扮演时可以指定过期时间,单位为秒,有效时间是900 ~ 3600,如assumeRoleRequest.setDurationSeconds(60L * 20); 20分钟内有效。
    8. ErrorCode: NoPermission ErrorMessage: No permission perform sts:AssumeRole on this Role. Maybe you are not authorized to perform sts:AssumeRole or the specified role does not trust you
      原因1:AssumeRole的子用户没有权限,请给子用户授予AliyunSTSAssumeRoleAccess系统授权策略。请在“访问控制->用户管理->授权->可选授权策略名称”中给子用户授权AliyunSTSAssumeRoleAccess。
      原因2:申请角色扮演的子用户的云账号ID与角色的“受信云账号ID”不符,请角色创建者确认并修改。子用户的云账号ID,即创建子用户的主用户的ID;角色的云账号ID,即创建角色的主用户的云账号ID。请在如下位置确认修改 访问控制 -> 角色管理 -> 管理 -> 角色详细 -> 编辑基本信息 中确认修改。
      原因3:角色的类型错误,如果角色的类型分为“用户角色”和“服务角色”,服务角色不能使用AssumeRole扮演临时用户。

    参考文档

    https://help.aliyun.com/document_detail/100624.html?spm=a2c4g.11186623.2.10.7fc6418bKdfMR6#concept-xzh-nzk-2gb
    https://help.aliyun.com/document_detail/32093.html?spm=a2c4g.11186623.6.1181.16d52d71KXDHZE
    https://www.lastupdate.net/4681.html

    About

    • 企鹅号码:848408012
    • 企鹅群号:465073050
    • 私人邮箱:du.chao.qun@163.com
    • 备注说明:欢迎联系交流,共同学习进步,转载请注明出处,谢谢。
  • 相关阅读:
    LUOGU P1654 OSU! (概率期望)
    poj 3682 King Arthur's Birthday Celebration (期望dp)
    CF148D Bag of mice (期望dp)
    LUOGU P1514 引水入城 (bfs)
    LUOGU P4281 [AHOI2008]紧急集合 / 聚会 (lca)
    LUOGU P1313 计算系数 (组合数学)
    LUOGU P2949 [USACO09OPEN]工作调度Work Scheduling (贪心)
    LUOGU P1613 跑路 (倍增floyd)
    LUOGU P1291 [SHOI2002]百事世界杯之旅 (期望dp)
    poj 3208--Apocalypse Someday(数位dp)
  • 原文地址:https://www.cnblogs.com/duchaoqun/p/12611408.html
Copyright © 2011-2022 走看看