【最佳实践】如何授权子账号查看某一个Bucket的运维监控数据?

一、如何在控制台上查看Bucket的运维监控信息?

  1. 方式一:通过根账号登录OSS控制台进行访问

    1. 通过阿里云根账号登录OSS控制台能够查看到所有Bucket的运维监控信息。但是在企业的实际运行过程中,直接使用根账号进行操作,安全风险极大。并且该方式查看到的是所有Bucket的信息,无法精确到指定的Bucket信息;
  2. 方式二:通过RAM 授权子账号在控制台查看

    1. 由于查看OSS的监控信息,需要获取云监控相关的授权。我们采用RAM提供的默认授权。给针对的子账号授予如下RAM默认授权:

      1. “只读访问云监控的权限”;
      2. AliyunOSSFullAccess;
    2. 使用该方式授权后,可以允许子账号登录控制台查看Bucket的授权信息,而且避免了使用根账号授权过大的风险。但是该授权方式也存在漏洞,就是该子账号能够查看所有Bucket的监控信息。

那么如何授权子账号在控制台上查看指定Bucket的监控信息(包括概览、基础数据、热点统计、API统计、文件访问统计)?
由于当前云监控(CloudMonitor)不支持细颗粒度资源描述,只支持*通配。因此我们要针对RAM提供的默认“只读访问云监控的授权”进行改造。想起RAM policy配置操作如下:

二、RAM Policy配置操作

2.1前提准备

  • 创建1个子账号;
  • 创建对应的Bucket;

2.2通过RAM policy授权步骤如下:

  • 创建1个查看Bucket概要信息的RAM Policy:授权子账号能够查看Bucket的概要信息;
  • 创建1个云监控的RAM Policy:使之能够查看某个指定的Bucket监控信息;

2.3创建查看Bucket 的RAM Policy:

查看Bucket的概要信息以及监控信息需要获取“GetBucketInfo”的授权。此外登录控制台访问额外还需要'GetBucketACL'的授权。因此,我们创建1个RAM Policy(例如,名称为 GetBucketInfoPolicy)。如下示例中Bucket名称是“test-beijing-2019”:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetBucketAcl",
        "oss:GetBucketinfo"
      ],
      "Resource": [
        "acs:oss:*:*:test-beijing-2019"
      ],
      "Condition": {}
    }
  ]
}

2.4创建云监控的RAM Policy:

在控制台查看Bucket的监控信息(包括概览、基础数据、热点统计、API统计、文件访问统计),需要云监控相关授权。但是由于云监控需要ListBuckets权限,该授权能够允许查看所有的Bucket信息。因此,我们针对RAM 提供的默认云监控Policy进行改造。相关RAM Policy 如下:

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "cms:Get*",
        "cms:List*",
        "cms:Query*",
        "cms:BatchQuery*"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ecs:DescribeInstances",
        "rds:DescribeDBInstances",
        "slb:DescribeLoadBalancer*",
        "vpc:DescribeEipAddresses",
        "vpc:DescribeRouterInterfaces",
        "vpc:DescribeGlobalAccelerationInstances",
        "vpc:DescribeVpnGateways",
        "vpc:DescribeNatGateways",
        "vpc:DescribeBandwidthPackages",
        "vpc:DescribeCommonBandwidthPackages",   
        "log:ListProject",
        "cdn:DescribeUserDomains",
        "mns:ListQueue",
        "mns:ListTopic",
        "ess:DescribeScalingGroups",
        "ocs:DescribeInstances",
        "kvstore:DescribeInstances",
        "hbase:DescribeClusterList",
        "hitsdb:DescribeHiTSDBInstanceList",
        "dds:DescribeDBInstances",
        "petadata:DescribeInstances",
        "petadata:DescribeDatabases",
        "gpdb:DescribeDBInstances",
        "emr:ListClusters",
        "opensearch:ListApps",
        "elasticsearch:ListInstance"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}

如上RAM Policy,相比于RAM 提供的默认Policy: “AliyunCloudMonitorReadOnlyAccess”。我们取消了"oss:ListBuckets"授权操作。
PS:取消"oss:ListBuckets"的目的就是禁止云监控默认列出所有Bucket的监控信息。

2.5控制台查看效果

  1. 我们将如上2个RAM Policy授权给新建的子账号;
  2. 使用子账号登录控制台后,由于没有ListBuckets权限,所以控制台不会展示Bucket列表信息。因此需要我们在控制台的左上角“我的访问路径”中手工添加对应的Bucket名称。
  3. 添加Bucket名称后,刷新控制台后,我们就能够在控制台查看到指定Bucket的监控信息了;

【最佳实践】如何授权子账号查看某一个Bucket的运维监控数据?

图1:授权子账号登录控制台查看指定Bucket监控信息

【补充说明】:由于是修改了默认的云监控授权,因此子账号无法在“云监控”页面查看指定bucket的监控信息。
【最佳实践】如何授权子账号查看某一个Bucket的运维监控数据?

上一篇:MFC程序执行顺序 .


下一篇:ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)(4)