You need to enable JavaScript to run this app.
导航
身份与权限配置
最近更新时间:2025.01.20 17:41:20首次发布时间:2025.01.20 17:41:20

当使用Proton操作对象存储时,需要配置执行操作的IAM身份信息,以及确保执行的用户或者角色具备相应的权限,否则会遇到权限不足等问题。Proton支持多种方式配置身份信息,下面进行简单说明。

IAM身份信息配置

Proton支持通过环境变量,配置文件,EMR ECS内部服务等方式设置操作对象存储的IAM身份信息。用户可以根据自己的业务场景从下面几个选项中选择适合自己业务场景的方式。

TOS场景

环境变量

core-site.xml文件配置以下参数

<configuraiton>
    <property>
        <name>fs.tos.credentials.provider</name>
        <value>io.proton.common.object.tos.auth.EnvironmentCredentialsProvider</value>
    </property>
</configuraiton>

环境变量

是否必须

TOS_ACCESS_KEY_ID

TOS_SECRET_ACCESS_KEY

TOS_SESSION_TOKEN

core-site.xml配置文件

core-site.xml文件配置以下参数,该模式下,支持为不同的Bucket配置专属的身份信息,Proton在读取身份信息时,会优先检查对应Bucket是否存在对应的身份信息,其次再检查全局配置信息。

<configuraiton>
    <property>
        <name>fs.tos.credentials.provider</name>
        <value>io.proton.common.object.tos.auth.SimpleCredentialsProvider</value>
    </property>
    <!--全局配置 -->
    <property>
        <name>fs.tos.access-key-id</name>
        <value>xxxxxxxxxxxxxx</value>
    </property>
    <property>
        <name>fs.tos.secret-access-key</name>
        <value>xxxxx</value>
    </property>
    
    <!-- 可选项 -->
    <property>
        <name>fs.tos.session-token</name>
        <value>xxxxx</value>
    </property>
    
    <!-- Bucket级别的配置 -->
    <property>
        <name>fs.tos.bucket.bucketA.access-key-id</name>
        <value>xxxxxxxxxxxxxx</value>
    </property>
    <property>
        <name>fs.tos.bucket.bucketA.secret-access-key</name>
        <value>xxxxx</value>
    </property>
    <property>
        <name>fs.tos.bucket.bucketA.session-token</name>
        <value>xxxxx</value>
    </property>
</configuraiton>

自定义XML配置文件

core-site.xml文件配置以下参数。该模式下,支持为不同的Bucket配置专属的身份信息,Proton在读取身份信息时,会优先检查对应Bucket是否存在对应的身份信息,其次再检查全局配置信息。

<configuraiton>
    <property>
        <name>fs.tos.credentials.provider</name>
        <value>io.proton.common.object.tos.auth.FileCredentialsProvider</value>
    </property>
    <property>
        <name>fs.tos.credentials.file.path</name>
        <value>/xxxxxxx/xxx.xml</value>
    </property>
    <!-- 文件内容刷新时间 -->
    <property>
        <name>fs.tos.credentials.file.refresh.interval</name>
        <value>5000</value>
    </property>
</configuraiton>

自定义XML文件的内容

<configuraiton>
    <property>
        <name>fs.tos.access-key-id</name>
        <value>xxxxxxxxxxxxxx</value>
    </property>
    <property>
        <name>fs.tos.secret-access-key</name>
        <value>xxxxx</value>
    </property>
    
    <!-- 可选项 -->
    <property>
        <name>fs.tos.session-token</name>
        <value>xxxxx</value>
    </property>
    
    <!-- Bucket级别的配置 -->
    <property>
        <name>fs.tos.bucket.您的bucket.access-key-id</name>
        <value>xxxxxxxxxxxxxx</value>
    </property>
    <property>
        <name>fs.tos.bucket.您的bucket.secret-access-key</name>
        <value>xxxxx</value>
    </property>
    <property>
        <name>fs.tos.bucket.您的bucket.session-token</name>
        <value>xxxxx</value>
    </property>
</configuraiton>

EMR集群ECS内部服务

当运行环境为火山EMR时,可以在core-site.xml文件中配置以下参数,EMR集群会使用ECS角色(比如VEECSforEMRRole)访问TOS。EMR开箱模式下,使用该认证方式,需要保证对应的ECS角色具备操作TOS数据的权限。

<configuraiton>
    <property>
        <name>fs.tos.credentials.provider</name>
        <value>io.proton.common.object.tos.auth.IAMInstanceCredentialsProvider</value>
    </property>
</configuraiton>

IAM身份权限配置

Proton在操作TOS时,会涉及到以下Action,使用时需要根据业务情况对执行的IAM身份进行授权,具体内容可以参考TOS IAM策略概述

Action

HDFS使用场景

是否必须

HeadBucket

获取Bucket信息,比如Bucket类型

ListBucket

list目录/文件

GetObjectTagging

设置Attribute相关信息

PutObjectTagging

DeleteObjectTagging

GetFileStatus

GetFileStatus场景

HeadObject

GetSymlink

GetSymlink

GetObject

读取文件内容

PutObject

写文件,创建目录

AppendObject

CreateMultipartUpload

UploadPart

CompleteMultipartUpload

AbortMultipartUpload

ListMultipartUploadParts

RenameObject

Rename目录,Rename文件

CopyObject

UploadPartCopy

DeleteObject

删除目录,删除文件

DeleteObjects

SetObjectMeta

设置目录/文件元数据,比如ACL,group,owner,time等

RestoreObject

Proton CLI恢复冷存数据

授权样例

授权IAM用户某个存储桶test的所有权限

{ 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "tos:*"
            ],
            "Resource": [
                "trn:tos:::test",
                "trn:tos:::test/*"
            ]
        }
    ]
 }

授予IAM用户某个存储桶test的只读权限

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "tos:Head*",
        "tos:List*",
        "tos:Get*",
      ],
      "Resource": [
        "trn:tos:::test",
        "trn:tos:::test/*"
      ]
    }
  ]
}

授予IAM用户存储桶testabc目录及其子目录的所有权限

{ 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "tos:*"
            ],
            "Resource": [
                "trn:tos:::test/abc",
                "trn:tos:::test/abc/*"
            ]
        }
    ]
 }

授予IAM用户存储桶test内除了abc目录以外的所有权限

{ 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "tos:*"
            ],
            "Resource": [
                "trn:tos:::test",
                "trn:tos:::test/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "tos:*"
            ],
            "Resource": [
                "trn:tos:::test/abc",
                "trn:tos:::test/abc/*"
            ]
        }
    ]
 }