

 適用於 Java 的 AWS SDK 1.x 已於 2025 年 12 月 31 日end-of-support。我們建議您遷移至 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)，以繼續接收新功能、可用性改善和安全性更新。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 存取控制政策
<a name="java-dg-access-control"></a>

 AWS *存取控制政策*可讓您在 AWS 資源上指定精細存取控制。存取控制政策包含陳述*式*的集合，其格式如下：

 *帳戶 A* 具有許可，可在*條件 D* 適用的*資源 C* 上執行*動作 B*。

其中：
+  是*委託人* **- 正在請求存取或修改其中一個 AWS 資源 AWS 帳戶 的 。
+  *B* 是*動作* - 存取或修改 AWS 資源的方式，例如傳送訊息至 Amazon SQS 佇列，或將物件存放在 Amazon S3 儲存貯體中。
+  *C* 是*資源* - 委託人想要存取的 AWS 實體，例如 Amazon SQS 佇列或存放於其中的物件 Amazon S3。
+  *D* 是*一組條件* - 選擇性限制，指定何時允許或拒絕委託人存取您的資源。有許多表達式條件可供使用，有些是針對每個服務。例如，您可以使用日期條件，僅允許在特定時間之後或之前存取您的資源。

## Amazon S3 範例
<a name="s3-example"></a>

下列範例示範一個政策，允許任何人讀取儲存貯體中的所有物件，但限制將物件上傳至該儲存貯體的存取權為兩個特定的 AWS 帳戶（除了儲存貯體擁有者的帳戶之外）。

```
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 範例
<a name="sqs-example"></a>

政策的一個常見用途是授權 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 範例
<a name="sns-example"></a>

有些 服務提供額外的條件，可用於 政策。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()));
```