AWS-assumeRole.控制不同token访问不同目录

简介: 应用程序需要做sessionToken,提供给用户访问S3的存储资源,但是需要做用户隔离(只能访问自己应用内的资源,不能访问别的用户的资源)

aws


问题背景


应用程序需要做sessionToken,提供给用户访问S3的存储资源,但是需要做用户隔离(只能访问自己应用内的资源,不能访问别的用户的资源)


思路:


基本条件 S3资源库都设为私有


  1. 方案一,每次获取资源前都来server接口获取临时下载token
  2. 方案二,生成短时间内有效的(比如1个小时)token,针对目录设置访问权限


方案一很简单,使用的是AWS的“预签名”GetObject即可


主要记录一下在实践方案二的过程


基本知识储备


  • policy 权限
  • IMA(Identiy and Acess Management) 理解为访问控制 角色权限控制


  • 用户
  • 权限策略 —— 用N个小权限组成一个小的策略 帮助快速配置
  • 角色
  • 组


角色、组、用户都是很基本的概念了 ,这里就不做解释


对于小公司来说,可能我们只有一个用户账号,开通了所有AWS产品的权限 比如S3 OSS存储,CDN管理,日志管理


如果在大一点规模的公司,你所在部门/产品线,只有一小部分权限


所有的API和后台操作都需要管理员向你的用户账号授权才可以操作。


assumeRole


它的翻译为承担角色/假设角色。我的理解它可能翻译为虚拟生成角色下的用户账号更实在。


毫无疑问,我们虚拟生成这个动作,也是调用API,需要权限授权。所以请管理员在你的用户账号上赋予这个权限吧


创建角色


wait!!等等


我们的API名字叫什么? 假设 + 角色


角色呢?


在这个API中,我们想生成一个虚拟用户,是依赖“角色”作为权限模板的。所以我们还需要创建一个角色


同时我们在生成用户账号的时候也可以自定义policy权限


自定义权限与角色权限的关系是 【交集】 赋予虚拟用户


在我们这个例子中,


  • 角色的权限我们可以设置为读取整个S3桶、上传资源
  • 自定义权限可以指定不同的目录的读取权限


那么产生的结果就是以我们自定义权限为准(因为它比较小,交集后等于自己)


授权高级账号 生成虚拟用户的权限


以JSON为例


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::用户id:role/角色名"
        }
    ]
}


ok ,现在我们可以使用这个高级账号来生成虚拟用户了


PHP-SDK 生成虚拟用户


注意 在以下代码中使用[]包起来的就是需要替换成你自己的参数


use Aws\Sts\StsClient;
$stsClient = new StsClient([
    'version' => 'latest',
    'region' => "ap-northeast-1",
    'credentials' => [
        'key' => "[高级账号的key]",
        'secret' => "[高级账号的secret]",
    ],
]);
// 定义一下虚拟用户的权限,这里限制了只能访问1开头的目录资源
$policy = <<<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "[arn:aws:s3:::siam/1/]",
                "[arn:aws:s3:::siam/1/*]"
            ]
        }
    ]
}
EOF;
// 生成虚拟用户(返回的是token)
$result = $stsClient->assumeRole([
    'RoleArn' => 'arn:aws:iam::[用户arn]:role/[read-only]',// 这里是基于什么角色来生成 总得有个模板吧
    'RoleSessionName' => '[newsession]',// 直接叫newsession也可以
    'Policy' => $policy
]);
$credentials = $result['Credentials'];


总结


没啥说的,一开始我测试的时候,是创建了俩个用户账号,然后A用B当模板去创建,一直报错没权限


后面想清楚了,名字就叫Role 所以我需要创建一个Role


  • 一个高级账号
  • 一个Role当模板
  • 高级账号操作API,使用Role + Policy 生成虚拟用户token
目录
相关文章
|
C++ Windows
VS Code 切换中英文
VS Code 切换中英文
3179 0
VS Code 切换中英文
|
开发工具 git
Git出现MERGING状态
Git合并时有冲突,出现MERGING状态
8669 0
Debian 官方源换为国内的源的操作方法
apt-get update 报错,采用更换源的方式解决问题。
60691 0
|
负载均衡 算法 Java
【SpringCloud(5)】Hystrix断路器:服务雪崩概念;服务降级、服务熔断和服务限流概念;使用Hystrix完成服务降级与服务熔断
多个微服务之间的调用,结社微服务A调用微服务B和微服务C,微服务B和微服务C有调用其他的微服务,这就是所谓的“扇出”如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所以的 “雪崩效应”
1021 139
免费证书certbot-aliyun
免费证书certbot-aliyun
2620 1
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
1910 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
传感器 5G 人机交互
基于51单片机的简易电子秤
基于51单片机的简易电子秤
|
消息中间件 Java API
一文带你速通Sentinel限流规则(流控)解读
一文带你速通Sentinel限流规则(流控)解读
|
人工智能 供应链 Oracle
从概念到颠覆:ERP系统的历史演变与发展
从概念到颠覆:ERP系统的历史演变与发展
2413 0
|
Java 应用服务中间件 Maven
【问题篇】IDEA运行war包项目
【问题篇】IDEA运行war包项目
2335 0