注意

本文档适用于 Ceph 开发版本。

Role

角色类似于用户。它附加了权限策略,这些策略决定了它可以做什么和不能做什么。任何需要它的身份都可以假设角色。当用户假设角色时,会向用户提供一组动态创建的临时凭证。角色可用于将访问权限委托给用户、应用程序和服务,这些服务没有权限访问某些 S3 资源。

以下radosgw-admin命令可用于创建、删除或更新角色及其相关的权限。

创建角色

要创建角色,运行以下形式的命令:

radosgw-admin role create --role-name={role-name} [--path=="{path to the role}"] [--assume-role-policy-doc={trust-policy-document}]

请求参数

role-name

描述:

角色的名称。

类型:

字符串

path

描述:

角色的路径。默认值为一个斜杠(/).

类型:

字符串

assume-role-policy-doc

描述:

授予实体假设角色的信任关系策略文档。

类型:

字符串

例如:

radosgw-admin role create --role-name=S3Access1 --path=/application_abc/component_xyz/ --assume-role-policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}
{
  "id": "ca43045c-082c-491a-8af1-2eebca13deec",
  "name": "S3Access1",
  "path": "/application_abc/component_xyz/",
  "arn": "arn:aws:iam:::role/application_abc/component_xyz/S3Access1",
  "create_date": "2018-10-17T10:18:29.116Z",
  "max_session_duration": 3600,
  "assume_role_policy_document": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER\"]},\"Action\":[\"sts:AssumeRole\"]}]}"
}

删除角色

要删除角色,运行以下形式的命令:

radosgw-admin role delete --role-name={role-name}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

例如:

radosgw-admin role delete --role-name=S3Access1

注意:只有当角色没有附加任何权限策略时,才能删除角色。

获取角色

要获取有关角色的信息,运行以下形式的命令:

radosgw-admin role get --role-name={role-name}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

例如:

radosgw-admin role get --role-name=S3Access1
{
  "id": "ca43045c-082c-491a-8af1-2eebca13deec",
  "name": "S3Access1",
  "path": "/application_abc/component_xyz/",
  "arn": "arn:aws:iam:::role/application_abc/component_xyz/S3Access1",
  "create_date": "2018-10-17T10:18:29.116Z",
  "max_session_duration": 3600,
  "assume_role_policy_document": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER\"]},\"Action\":[\"sts:AssumeRole\"]}]}"
}

列出角色

要列出具有指定路径前缀的角色,运行以下形式的命令:

radosgw-admin role list [--path-prefix ={path prefix}]

请求参数

path-prefix

描述:

用于过滤角色的路径前缀。如果未指定,则列出所有角色。

类型:

字符串

例如:

radosgw-admin role list --path-prefix="/application"
[
  {
      "id": "3e1c0ff7-8f2b-456c-8fdf-20f428ba6a7f",
      "name": "S3Access1",
      "path": "/application_abc/component_xyz/",
      "arn": "arn:aws:iam:::role/application_abc/component_xyz/S3Access1",
      "create_date": "2018-10-17T10:32:01.881Z",
      "max_session_duration": 3600,
      "assume_role_policy_document": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER\"]},\"Action\":[\"sts:AssumeRole\"]}]}"
  }
]

更新角色的 Assume Role 策略文档

要修改角色的 Assume Role 策略文档,执行以下操作:

radosgw-admin role-trust-policy modify --role-name={role-name} --assume-role-policy-doc={trust-policy-document}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

assume-role-policy-doc

描述:

授予实体假设角色的信任关系策略文档。

类型:

字符串

例如:

radosgw-admin role-trust-policy modify --role-name=S3Access1 --assume-role-policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER2\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}
{
  "id": "ca43045c-082c-491a-8af1-2eebca13deec",
  "name": "S3Access1",
  "path": "/application_abc/component_xyz/",
  "arn": "arn:aws:iam:::role/application_abc/component_xyz/S3Access1",
  "create_date": "2018-10-17T10:18:29.116Z",
  "max_session_duration": 3600,
  "assume_role_policy_document": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam:::user/TESTER2\"]},\"Action\":[\"sts:AssumeRole\"]}]}"
}

在上面的示例中,我们正在修改其 Assume Role 策略文档中的 Principal 从 TESTER 到 TESTER2。

添加/更新附加到角色的策略

要添加或更新附加到角色的内联策略,执行以下操作:

radosgw-admin role policy put --role-name={role-name} --policy-name={policy-name} --policy-doc={permission-policy-doc}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

policy-name

描述:

策略的名称。

类型:

字符串

policy-doc

描述:

权限策略文档。

类型:

字符串

例如:

radosgw-admin role-policy put --role-name=S3Access1 --policy-name=Policy1 --policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Action\":\[\"s3:*\"\],\"Resource\":\"arn:aws:s3:::example_bucket\"\}\]\}

用于传递policy-doc作为文件:

radosgw-admin role-policy put --role-name=S3Access1 --policy-name=Policy1 --infile policy-document.json

在上面的示例中,我们将策略“Policy1”附加到角色“S3Access1”,允许对所有“example_bucket”执行所有 s3 操作。

列出附加到角色的权限策略名称

要列出附加到角色的权限策略的名称,执行以下操作:

radosgw-admin role policy get --role-name={role-name}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

例如:

radosgw-admin role-policy list --role-name=S3Access1
[
  "Policy1"
]

获取附加到角色的权限策略

要获取附加到角色的特定权限策略,执行以下操作:

radosgw-admin role policy get --role-name={role-name} --policy-name={policy-name}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

policy-name

描述:

策略的名称。

类型:

字符串

例如:

radosgw-admin role-policy get --role-name=S3Access1 --policy-name=Policy1
{
  "Permission policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"s3:*\"],\"Resource\":\"arn:aws:s3:::example_bucket\"}]}"
}

删除附加到角色的策略

要删除附加到角色的权限策略,执行以下操作:

radosgw-admin role policy delete --role-name={role-name} --policy-name={policy-name}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

policy-name

描述:

策略的名称。

类型:

字符串

例如:

radosgw-admin role-policy delete --role-name=S3Access1 --policy-name=Policy1

更新角色

要更新角色的 max-session-duration,执行以下操作:

radosgw-admin role update --role-name={role-name} --max-session-duration={max-session-duration}

请求参数

role-name

描述:

角色的名称。

类型:

字符串

max-session-duration

描述:

角色的最大会话持续时间。

类型:

字符串

例如:

radosgw-admin role update --role-name=S3Access1 --max-session-duration=43200

注意:此命令目前只能用于更新 max-session-duration。

操作角色的 REST API

除了上述 radosgw-admin 命令外,还可以使用以下 REST API 来操作角色。有关请求参数及其解释,请参阅上一节。

为了调用 REST 管理 API,需要创建一个具有管理员权限的用户。

radosgw-admin --uid TESTER --display-name "TestUser" --access_key TESTER --secret test123 user create
radosgw-admin caps add --uid="TESTER" --caps="roles=*"

创建角色

Example:

POST "<hostname>?Action=CreateRole&RoleName=S3Access&Path=/application_abc/component_xyz/&AssumeRolePolicyDocument=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}"
<role>
  <id>8f41f4e0-7094-4dc0-ac20-074a881ccbc5</id>
  <name>S3Access</name>
  <path>/application_abc/component_xyz/</path>
  <arn>arn:aws:iam:::role/application_abc/component_xyz/S3Access</arn>
  <create_date>2018-10-23T07:43:42.811Z</create_date>
  <max_session_duration>3600</max_session_duration>
  <assume_role_policy_document>{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}</assume_role_policy_document>
</role>

删除角色

Example:

POST "<hostname>?Action=DeleteRole&RoleName=S3Access"

注意:只有当角色没有附加任何权限策略时,才能删除角色。如果您打算删除角色,必须首先删除附加到它的任何策略。

获取角色

Example:

POST "<hostname>?Action=GetRole&RoleName=S3Access"
<role>
  <id>8f41f4e0-7094-4dc0-ac20-074a881ccbc5</id>
  <name>S3Access</name>
  <path>/application_abc/component_xyz/</path>
  <arn>arn:aws:iam:::role/application_abc/component_xyz/S3Access</arn>
  <create_date>2018-10-23T07:43:42.811Z</create_date>
  <max_session_duration>3600</max_session_duration>
  <assume_role_policy_document>{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}</assume_role_policy_document>
</role>

列出角色

Example:

POST "<hostname>?Action=ListRoles&RoleName=S3Access&PathPrefix=/application"
<role>
  <id>8f41f4e0-7094-4dc0-ac20-074a881ccbc5</id>
  <name>S3Access</name>
  <path>/application_abc/component_xyz/</path>
  <arn>arn:aws:iam:::role/application_abc/component_xyz/S3Access</arn>
  <create_date>2018-10-23T07:43:42.811Z</create_date>
  <max_session_duration>3600</max_session_duration>
  <assume_role_policy_document>{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["arn:aws:iam:::user/TESTER"]},"Action":["sts:AssumeRole"]}]}</assume_role_policy_document>
</role>

更新 Assume Role 策略文档

Example:

POST "<hostname>?Action=UpdateAssumeRolePolicy&RoleName=S3Access&PolicyDocument=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER2\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}"

添加/更新附加到角色的策略

Example:

POST "<hostname>?Action=PutRolePolicy&RoleName=S3Access&PolicyName=Policy1&PolicyDocument=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Action\":\[\"s3:CreateBucket\"\],\"Resource\":\"arn:aws:s3:::example_bucket\"\}\]\}"

列出附加到角色的权限策略名称

Example:

POST "<hostname>?Action=ListRolePolicies&RoleName=S3Access"
<PolicyNames>
  <member>Policy1</member>
</PolicyNames>

获取附加到角色的权限策略

Example:

POST "<hostname>?Action=GetRolePolicy&RoleName=S3Access&PolicyName=Policy1"
<GetRolePolicyResult>
  <PolicyName>Policy1</PolicyName>
  <RoleName>S3Access</RoleName>
  <Permission_policy>{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:CreateBucket"],"Resource":"arn:aws:s3:::example_bucket"}]}</Permission_policy>
</GetRolePolicyResult>

删除附加到角色的策略

Example:

POST "<hostname>?Action=DeleteRolePolicy&RoleName=S3Access&PolicyName=Policy1"

标记角色

角色可以附加多值标签。这些标签也可以作为 CreateRole REST API 的一部分传递。

Example:

POST "<hostname>?Action=TagRole&RoleName=S3Access&Tags.member.1.Key=Department&Tags.member.1.Value=Engineering"
<TagRoleResponse>
  <ResponseMetadata>
    <RequestId>tx000000000000000000004-00611f337e-1027-default</RequestId>
  </ResponseMetadata>
</TagRoleResponse>

列出角色标签

列出附加到角色的标签。

Example:

POST "<hostname>?Action=ListRoleTags&RoleName=S3Access"
<ListRoleTagsResponse>
  <ListRoleTagsResult>
    <Tags>
      <member>
        <Key>Department</Key>
        <Value>Engineering</Value>
      </member>
    </Tags>
  </ListRoleTagsResult>
  <ResponseMetadata>
    <RequestId>tx000000000000000000005-00611f337e-1027-default</RequestId>
  </ResponseMetadata>
</ListRoleTagsResponse>

删除角色标签

删除附加到角色的标签/标签。

Example:

POST "<hostname>?Action=UntagRoles&RoleName=S3Access&TagKeys.member.1=Department"
<UntagRoleResponse>
  <ResponseMetadata>
    <RequestId>tx000000000000000000007-00611f337e-1027-default</RequestId>
  </ResponseMetadata>
</UntagRoleResponse>

更新角色

Example:

POST "<hostname>?Action=UpdateRole&RoleName=S3Access&MaxSessionDuration=43200"
<UpdateRoleResponse>
  <UpdateRoleResult>
    <ResponseMetadata>
      <RequestId>tx000000000000000000007-00611f337e-1027-default</RequestId>
    </ResponseMetadata>
    </UpdateRoleResult>
</UpdateRoleResponse>

注意:此 API 目前只能用于更新 max-session-duration。

标记、列出标签和取消标记角色的示例代码

以下是使用 boto3 为角色添加标签、列出标签和取消标记标签的示例代码。

import boto3

access_key = 'TESTER'
secret_key = 'test123'

iam_client = boto3.client('iam',
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
endpoint_url='http://s3.us-east.localhost:8000',
region_name=''
)

policy_document = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Federated\":[\"arn:aws:iam:::oidc-provider/localhost:8080/auth/realms/quickstart\"]},\"Action\":[\"sts:AssumeRoleWithWebIdentity\"],\"Condition\":{\"StringEquals\":{\"localhost:8080/auth/realms/quickstart:sub\":\"user1\"}}}]}"

print ("\n Creating Role with tags\n")
tags_list = [
    {'Key':'Department','Value':'Engineering'}
]
role_response = iam_client.create_role(
    AssumeRolePolicyDocument=policy_document,
    Path='/',
    RoleName='S3Access',
    Tags=tags_list,
)

print ("Adding tags to role\n")
response = iam_client.tag_role(
            RoleName='S3Access',
            Tags= [
                    {'Key':'CostCenter','Value':'123456'}
                ]
            )
print ("Listing role tags\n")
response = iam_client.list_role_tags(
            RoleName='S3Access'
            )
print (response)
print ("Untagging role\n")
response = iam_client.untag_role(
    RoleName='S3Access',
    TagKeys=[
        'Department',
    ]
)

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.