

# 列出调用方的访问授权
<a name="access-grants-list-grants"></a>

S3 数据拥有者可以使用 S3 访问权限管控为 AWS Identity and Access Management（IAM）身份或 AWS IAM Identity Center 公司目录身份创建访问授权。IAM 身份和 IAM Identity Center 目录身份反过来可以使用 `ListCallerAccessGrants` API 列出这些身份可以访问的所有 Amazon S3 存储桶、前缀和对象，如其 S3 访问权限管控所定义的那样。使用此 API 可以发现 IAM 身份或目录身份可以通过 S3 访问权限管控来访问的所有 S3 数据。

可以使用此功能来构建应用程序，以显示特定最终用户可以访问的数据。例如，适用于 S3 的 AWS Storage Browser（客户用来访问 S3 存储桶的开源 UI 组件）使用此功能根据最终用户的 S3 访问权限管控，向最终用户提供他们有权在 Amazon S3 中访问的数据。另一个示例是，当构建用于在 Amazon S3 中浏览、上传或下载数据的应用程序时，可以使用此功能在应用程序中构建最终用户可以浏览的树结构。

**注意**  
对于公司目录身份，在列出调用方的访问权限管控时，S3 访问权限管控将返回用于身份感知会话的 IAM 身份的授权。有关身份感知会话的更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[授予使用身份感知控制台会话的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_sts-setcontext.html)。

无论是 IAM 身份还是公司目录身份，被授权者都可以使用 AWS Command Line Interface（AWS CLI）、Amazon S3 REST API 和 AWS SDK 获取其访问授权的列表。

## 使用 AWS CLI
<a name="access-grants-list-grants-cli"></a>

要安装 AWS CLI，请参阅 *AWS Command Line Interface 用户指南*中的[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

要使用以下示例命令，请将 `user input placeholders` 替换为您自己的信息。

**Example 列出调用方的访问授权**  
请求:  

```
aws s3control list-caller-access-grants \
--account-id 111122223333 \
--region us-east-2
--max-results 5
```
响应:  

```
{
	"NextToken": "6J9S...",
	"CallerAccessGrantsList": [
		{
			"Permission": "READWRITE",
			"GrantScope": "s3://amzn-s3-demo-bucket/prefix1/sub-prefix1/*",
			"ApplicationArn": "NA"
		},
		{
			"Permission": "READWRITE",
			"GrantScope": "s3://amzn-s3-demo-bucket/prefix1/sub-prefix2/*",
			"ApplicationArn": "ALL"
		},
		{
			"Permission": "READWRITE",
			"GrantScope": "s3://amzn-s3-demo-bucket/prefix1/sub-prefix3/*",
			"ApplicationArn": "arn:aws:sso::111122223333:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d"
		}
	]
}
```

**Example 列出调用方对存储桶的访问授权**  
可以使用 `grantscope` 参数缩小结果的范围。  
请求:  

```
aws s3control list-caller-access-grants \
--account-id 111122223333 \
--region us-east-2
--grant-scope "s3://amzn-s3-demo-bucket""
--max-results 1000
```
响应:  

```
{
	"NextToken": "6J9S...",
	"CallerAccessGrantsList": [
		{
			"Permission": "READ",
			"GrantScope": "s3://amzn-s3-demo-bucket*",
			"ApplicationArn": "ALL"
		},
		{
			"Permission": "READ",
			"GrantScope": "s3://amzn-s3-demo-bucket/prefix1/*",
			"ApplicationArn": "arn:aws:sso::111122223333:application/ssoins-ssoins-1234567890abcdef/apl-abcd1234a1b2c3d"
		}
	]
}
```

## 使用 REST API
<a name="access-grants-list-grants-rest-api"></a>

有关 Amazon S3 REST API 支持获取 API 调用方的访问授权列表的信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [ListCallerAccessGrants](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListCallerAccessGrants.html)。

## 使用 AWS SDK
<a name="access-grants-list-grants-using-sdk"></a>

此部分中的示例说明被授权者如何使用 AWS SDK 从 S3 Access Grants 请求临时凭证。

------
#### [ Java ]

以下代码示例返回 API 调用方对特定 AWS 账户的 S3 数据的访问授权。要使用此代码示例，请将 `user input placeholders` 替换为您自己的信息。

**Example 列出调用方的访问授权**  
请求:  

```
Public void ListCallerAccessGrants() {
	ListCallerAccessGrantsRequest listRequest = ListCallerAccessGrantsRequest.builder()
				.withMaxResults(1000)
				.withGrantScope("s3://")
				.accountId("111122223333");
	ListCallerAccessGrantsResponse listResponse = s3control.listCallerAccessGrants(listRequest);
	LOGGER.info("ListCallerAccessGrantsResponse: " + listResponse);
	}
```
响应:  

```
ListCallerAccessGrantsResponse(
CallerAccessGrantsList=[
	ListCallerAccessGrantsEntry(
		S3Prefix=s3://amzn-s3-demo-bucket/prefix1/,
		Permission=READ,
		ApplicationArn=ALL
	)
])
```

------