

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

# 資源型政策
<a name="auth-and-access_resource-policies"></a>

在資源型政策中，您可以指定能夠存取秘密的人員，以及他們可以對秘密執行的動作。您可以使用資源型政策：
+ 將單一秘密的存取權授予多個使用者和角色。
+ 將存取權授予其他 AWS 帳戶中的使用者或角色。

在將資源型政策連接至主控台中的秘密時，Secrets Manager 會使用自動推理引擎 [Zelkova](https://aws.amazon.com/blogs/security/protect-sensitive-data-in-the-cloud-with-automated-reasoning-zelkova/) 和 API `ValidateResourcePolicy`，防止您將秘密的存取權授予各種 IAM 委託人。您也可以透過 CLI 或開發套件呼叫帶有 `BlockPublicPolicy` 參數的 `PutResourcePolicy` API。

**重要**  
資源政策驗證和 `BlockPublicPolicy` 參數可防止透過直接連接到秘密的資源政策授予公開存取，以協助保護您的資源。除了使用這些功能之外，請仔細檢查下列政策，以確認它們未授予公有存取權：  
連接到相關聯 AWS 主體的身分型政策 （例如 IAM 角色） 
連接至相關聯 AWS 資源的資源型政策 （例如， AWS Key Management Service (AWS KMS) 金鑰） 
若要檢閱秘密的許可，請參閱 [判斷誰有存取 秘密的許可](determine-acccess_examine-iam-policies.md)。

**若要檢視、變更或刪除秘密的資源政策 (主控台)**

1. 於 [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) 開啟 Secrets Manager 主控台。

1. 從秘密清單中選擇秘密。

1. 在秘密詳細資訊頁面的**概觀**分頁上，在**資源許可**區段中，選擇**編輯許可**。

1. 在程式碼欄位中，執行以下其中一項作業，然後選擇 **Save** (儲存)：
   + 若要連接或修改資源政策，請輸入該政策。
   + 若要刪除政策，請清除程式碼欄位。

## AWS CLI
<a name="auth-and-access_resource_cli"></a>

**Example 擷取資源政策**  
下列 [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-resource-policy.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-resource-policy.html) 範例會擷取連接至機密的以資源為基礎的政策。  

```
aws secretsmanager get-resource-policy \
    --secret-id MyTestSecret
```

**Example 刪除資源政策**  
下列 [https://docs.aws.amazon.com//cli/latest/reference/secretsmanager/delete-resource-policy.html](https://docs.aws.amazon.com//cli/latest/reference/secretsmanager/delete-resource-policy.html) 範例會刪除連接至機密的以資源為基礎的政策。  

```
aws secretsmanager delete-resource-policy \
    --secret-id MyTestSecret
```

**Example 新增資源政策**  
下列 [https://docs.aws.amazon.com//cli/latest/reference/secretsmanager/put-resource-policy.html](https://docs.aws.amazon.com//cli/latest/reference/secretsmanager/put-resource-policy.html) 範例會將許可政策新增至機密，首先檢查政策是否不提供機密的廣泛存取權限。系統會從檔案讀取政策。如需詳細資訊，請參閱 AWS CLI 《 使用者指南》中的[從檔案載入 AWS CLI 參數](https://docs.aws.amazon.com//cli/latest/userguide/cli-usage-parameters-file.html)。  

```
aws secretsmanager put-resource-policy \
    --secret-id MyTestSecret \
    --resource-policy file://mypolicy.json \
    --block-public-policy
```
`mypolicy.json` 的內容：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/MyRole"
            },
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "*"
        }
    ]
}
```

## AWS 開發套件
<a name="auth-and-access_resource_sdk"></a>

若要擷取與秘密相連的政策，請使用 [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetResourcePolicy.html](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetResourcePolicy.html)。

若要刪除與秘密相連的政策，請使用 [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DeleteResourcePolicy.html](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DeleteResourcePolicy.html)。

若要將政策連接至秘密，請使用 [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutResourcePolicy.html](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutResourcePolicy.html)。如果原本就已連接政策，命令會以新政策取而代之。政策必須格式化為 JSON 結構化文字。請參閱 [JSON 政策文件結構](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies-introduction)。

如需詳細資訊，請參閱[AWS SDKs](asm_access.md#asm-sdks)。

## 範例
<a name="auth-and-access_resource-policy-examples"></a>

**Topics**
+ [範例：擷取每個秘密值的許可](#auth-and-access_examples_read)
+ [範例：許可和 VPC](#auth-and-access_examples_vpc)
+ [範例：服務委託人](#auth-and-access_service)

### 範例：擷取每個秘密值的許可
<a name="auth-and-access_examples_read"></a>

若要授予擷取秘密值的許可，您可以將政策連接至秘密或身分。如需判斷要使用哪種政策的說明，請參閱[身分型政策和資源型政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。如需連接政策的相關資訊，請參閱 [資源型政策](#auth-and-access_resource-policies) 和 [身分型政策](auth-and-access_iam-policies.md)。

如果想要將對單一秘密的存取權授予多個使用者或角色，此範例非常有用。若要授與批次 API 呼叫中擷取一組秘密的權限，請參閱[範例：擷取批次中一組秘密值的許可](auth-and-access_iam-policies.md#auth-and-access_examples_batch)。

**Example 讀取一個秘密**  
您可以透過將下列政策連接至秘密，授予對秘密的存取權。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/EC2RoleToAccessSecrets"
            },
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "*"
        }
    ]
}
```

### 範例：許可和 VPC
<a name="auth-and-access_examples_vpc"></a>

如果您需要從 VPC 中存取 Secrets Manager，則可以透過在許可政策中包含條件，來確保對 Secrets Manager 的請求都來自 VPC。如需詳細資訊，請參閱[限制具有 VPC 端點條件的請求](best-practices.md#iam-contextkeys-vpcendpoint)及[使用 AWS Secrets Manager VPC 端點](vpc-endpoint-overview.md)。

請確定從其他 AWS 服務存取秘密的請求也來自 VPC，否則此政策會拒絕他們存取。

**Example 需要請求才能透過 VPC 端點**  
例如，以下政策允許使用者執行 Secrets Manager 操作，但僅限請求是透過 VPC 端點 *`vpce-1234a5678b9012c`* 提出的情況。    
****  

```
{
"Id": "example-policy-1",
"Version":"2012-10-17",		 	 	 
"Statement": [
{
  "Sid": "RestrictGetSecretValueoperation",
  "Effect": "Deny",
  "Principal": "*",
  "Action": "secretsmanager:GetSecretValue",
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "aws:sourceVpce": "vpce-12345678"
    }
  }
}
]
}
```

**Example 需要來自 VPC 的請求**  
以下政策只在命令來自 *`vpc-12345678`* 時，才允許這些命令建立和管理秘密。此外，此政策只在請求來自 `vpc-2b2b2b2b` 時，才允許存取秘密加密值的操作。如果您在某個 VPC 中執行應用程式，但您使用第二個隔離的 VPC 來執行管理功能，您可能會使用如下的政策。    
****  

```
{
"Id": "example-policy-2",
"Version":"2012-10-17",		 	 	 
"Statement": [
{
  "Sid": "AllowAdministrativeActionsfromONLYvpc-12345678",
  "Effect": "Deny",
  "Principal": "*",
  "Action": [
    "secretsmanager:Create*",
    "secretsmanager:Put*",
    "secretsmanager:Update*",
    "secretsmanager:Delete*",
    "secretsmanager:Restore*",
    "secretsmanager:RotateSecret",
    "secretsmanager:CancelRotate*",
    "secretsmanager:TagResource",
    "secretsmanager:UntagResource"
  ],
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "aws:sourceVpc": "vpc-12345678"
    }
  }
},
{
  "Sid": "AllowSecretValueAccessfromONLYvpc-2b2b2b2b",
  "Effect": "Deny",
  "Principal": "*",
  "Action": [
    "secretsmanager:GetSecretValue"
  ],
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "aws:sourceVpc": "vpc-2b2b2b2b"
    }
  }
}
]
}
```

### 範例：服務委託人
<a name="auth-and-access_service"></a>

如果秘密中連接的資源政策包含 [AWS 服務委託人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)，建議您使用 [aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [aws:SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件金鑰。ARN 和帳戶值只會在請求從另一個 AWS 服務來到 Secrets Manager 中時，包含在授權內容中。此條件組合會避免潛在的[混淆代理人案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

若資源 ARN 包含資源政策中不允許的字元，則您便不能將該資源 ARN 用於 `aws:SourceArn` 條件金鑰的值中。請改用 `aws:SourceAccount` 條件金鑰。如需更多資訊，請參閱《[IAM 需求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)》。

服務主體通常不會用作附加至秘密的政策中的主體，但有些 AWS 服務需要它。如需服務要求您連接至秘密之資源政策的相關資訊，請參閱服務的說明文件。

**Example 允許服務使用服務主體存取秘密**    
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
{
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "s3.amazonaws.com"
    ]
  },
  "Action": "secretsmanager:GetSecretValue",
  "Resource": "*",
  "Condition": {
    "ArnLike": {
      "aws:sourceArn": "arn:aws:s3::123456789012:*"
    },
    "StringEquals": {
      "aws:sourceAccount": "123456789012"
    }
  }

}
]
}
```