View a markdown version of this page

访问控制策略 - Amazon SDK for Java 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SDK for Java 1.x于2025年12月31日达到支撑终止状态。我们建议您迁移到 Amazon SDK for Java 2.x 以继续获得新功能、可用性改进和安全更新。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

访问控制策略

Amazon 访问控制策略使您能够对资源指定精细的访问控制。 Amazon 访问控制策略包含一组语句,其形式如下:

条件 D 适用的情况下,账户 A 有权对资源 C 执行操作 B

其中:

  • A委托人 Amazon Web Services 账户 ,即请求访问或修改您的某个 Amazon 资源。

  • B操作-访问或修改 Amazon 资源的方式,例如向 Amazon SQS 队列发送消息或将对象存储在存储 Amazon S3 桶中。

  • C资源-委托人想要访问的 Amazon 实体,例如 Amazon SQS 队列或存储在中的对象 Amazon S3。

  • D一组条件 – 指定何时允许或拒绝主体访问资源的可选约束。有许多富有表现力的条件,还有一些特定于每项服务的条件。例如,您可以使用日期条件以仅允许在特定时间之后或之前访问资源。

Amazon S3 示例

以下示例演示了一项策略,该策略允许任何人访问存储桶中的所有对象,但将向该存储桶上传对象的访问权限限制为两个特定 Amazon Web Services 账户的(存储桶拥有者的账户除外)。

Statement allowPublicReadStatement = new Statement(Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(S3Actions.GetObject) .withResources(new S3ObjectResource(myBucketName, "*")); Statement allowRestrictedWriteStatement = new Statement(Effect.Allow) .withPrincipals(new Principal("123456789"), new Principal("876543210")) .withActions(S3Actions.PutObject) .withResources(new S3ObjectResource(myBucketName, "*")); Policy policy = new Policy() .withStatements(allowPublicReadStatement, allowRestrictedWriteStatement); AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); s3.setBucketPolicy(myBucketName, policy.toJson());

Amazon SQS 示例

策略的一个常见用途是授权 Amazon SQS 队列接收来自 Amazon SNS 主题的消息。

Policy policy = new Policy().withStatements( new Statement(Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(SQSActions.SendMessage) .withConditions(ConditionFactory.newSourceArnCondition(myTopicArn))); Map queueAttributes = new HashMap(); queueAttributes.put(QueueAttributeName.Policy.toString(), policy.toJson()); AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); sqs.setQueueAttributes(new SetQueueAttributesRequest(myQueueUrl, queueAttributes));

Amazon SNS 示例

一些服务提供可用于策略的其他条件。Amazon SNS 根据订阅主题请求的协议(例如电子邮件、HTTP、HTTPS Amazon SQS)和终端节点(例如电子邮件地址、URL、 Amazon SQS ARN),提供了允许或拒绝订阅 SNS 主题的条件。

Condition endpointCondition = SNSConditionFactory.newEndpointCondition("*@mycompany.com"); Policy policy = new Policy().withStatements( new Statement(Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(SNSActions.Subscribe) .withConditions(endpointCondition)); AmazonSNS sns = AmazonSNSClientBuilder.defaultClient(); sns.setTopicAttributes( new SetTopicAttributesRequest(myTopicArn, "Policy", policy.toJson()));