

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

# 身分型政策
<a name="auth-and-access_iam-policies"></a>

將許可政策連接到 [IAM 身分：使用者、使用者群組和角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。在身分型政策中，您指定該身分可以存取哪些秘密以及該身分可以對該秘密執行哪些動作。如需更多資訊，請參閱《[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)》。

您可以向代表其他服務中應用程式或使用者的角色授予許可。例如，在 Amazon EC2 執行個體上執行的應用程式可能需要存取資料庫。您可以建立與 EC2 執行個體設定檔相連的 IAM 角色，然後使用許可政策授予角色存取含有資料庫憑證的機密。如需相關資訊，請參閱《[利用 IAM 角色來授予許可給 Amazon EC2 執行個體上執行的應用程式](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)》。其他您可以附加角色以加入 [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum.html)、[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html)，和 [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) 的服務。

您也可以將許可授予經過 IAM 以外的身分系統驗證的使用者。例如，您可將 IAM 角色與使用 Amazon Cognito 登入的行動應用程式使用者建立關聯。角色將利用角色許可政策中的許可來授予應用程式暫時登入資料。然後，您可以使用許可政策將對秘密的存取權授予角色。如需相關資訊，請參閱《[身分提供者和聯合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)》。

您可以使用身分型政策：
+ 授予身分對多個秘密的存取權。
+ 控制誰可以建立新秘密，以及誰可以存取尚未建立的秘密。
+ 授予 IAM 群組對秘密的存取權。

**Topics**
+ [範例：擷取每個秘密值的許可](#auth-and-access_examples_identity_read)
+ [範例：讀取和描述個別秘密的許可](#auth-and-access_examples-read-and-describe)
+ [範例：擷取批次中一組秘密值的許可](#auth-and-access_examples_batch)
+ [範例：萬用字元](#auth-and-access_examples_wildcard)
+ [範例：建立秘密的許可](#auth-and-access_examples_create)
+ [範例：拒絕加密秘密的特定 AWS KMS 金鑰](#auth-and-access_examples_kmskey)

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

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

如果想要將存取權授予 IAM 群組，此範例很有用。若要授與批次 API 呼叫中擷取一組秘密的權限，請參閱[範例：擷取批次中一組秘密值的許可](#auth-and-access_examples_batch)。

**Example 讀取使用客戶受管金鑰加密的秘密**  
如果秘密是使用客戶受管金鑰加密，您可以透過將下列政策連接到身分來授予讀取秘密的存取權。 \\    
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
{
  "Effect": "Allow",
  "Action": "secretsmanager:GetSecretValue",
  "Resource": "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{secretName-AbCdEf}}"
},
{
  "Effect": "Allow",
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{key-id}}"
}
]
}
```

## 範例：讀取和描述個別秘密的許可
<a name="auth-and-access_examples-read-and-describe"></a>

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

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
  {
    "Effect": "Allow",
    "Action": [
      "secretsmanager:GetSecretValue",
      "secretsmanager:DescribeSecret"
      ],
      "Resource": "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{secretName-AbCdEf}}"
    }
]
}
```

## 範例：擷取批次中一組秘密值的許可
<a name="auth-and-access_examples_batch"></a>

**Example 讀取批次中的一組秘密**  
您可以透過將下列政策連接至身分，授予在 API 呼叫擷取一組秘密的存取權。此原則會限制呼叫者，以便他們只能擷取 {{SecretARN1}}、{{SecretARN2}} 和 {{SecretARN3}} 所指定的密碼，即使批次呼叫包含其他機密也是如此。如果呼叫者也要求批次 API 呼叫中的其他秘密，秘密管理員將不會傳回它們。如需詳細資訊，請參閱 [`BatchGetSecretValue`。](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_BatchGetSecretValue.html)    
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
{
  "Effect": "Allow",
  "Action": [
    "secretsmanager:BatchGetSecretValue",
    "secretsmanager:ListSecrets"
  ],
  "Resource": "*"
},
{
  "Effect": "Allow",
  "Action": [
    "secretsmanager:GetSecretValue"
  ],
  "Resource": [
    "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{secretName1-AbCdEf}}",
    "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{secretName2-AbCdEf}}",
    "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{secretName3-AbCdEf}}"
    ]
}
]
}
```

## 範例：萬用字元
<a name="auth-and-access_examples_wildcard"></a>

您可以使用萬用字元在政策元素中包含一組值。

**Example 存取路徑中的所有秘密**  
下列政策會授予存取權來擷取名稱開頭為 "{{TestEnv/}}" 的所有秘密。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{TestEnv/}}*"
    }
}
```

**Example 存取所有秘密上的中繼資料**  
下列政策授予 `DescribeSecret` 和開頭為 `List` (`ListSecrets` 及 `ListSecretVersionIds`) 的許可。    
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": {
"Effect": "Allow",
"Action": [
  "secretsmanager:DescribeSecret",
  "secretsmanager:List*"
],
"Resource": "*"
}
}
```

**Example 比對秘密名稱**  
下列政策會依名稱授予秘密的所有 Secrets Manager 許可。若要使用此政策，請參閱 [身分型政策](#auth-and-access_iam-policies)。  
若要比對秘密名稱，您可以將區域、帳戶 ID、秘密名稱和萬用字元 (`?`) 放在一起，以此比對單個隨機字元，從而建立秘密的 ARN。Secrets Manager 會將六個隨機字元連接到秘密名稱作為其 ARN 的一部分，因此您可以使用此萬用字元來比對那些字元。如果您使用的是語法 `"another_secret_name-*"`，則 Secrets Manager 不僅會比對含有 6 個隨機字元的所需秘密，還會比對 `"another_secret_name-<anything-here>a1b2c3"`。  
您可以預測 ARN 除了 6 個隨機字元以外的所有部分，因此使用萬元字元 `'??????'` 語法可讓您安全地將許可授予尚不存在的秘密。不過，請注意，如果您刪除秘密，然後以相同名稱將其重建，使用者會自動收到新秘密的許可，即使那 6 個字元已變更。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": [
                "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{a_specific_secret_name-a1b2c3}}",
                "arn:aws:secretsmanager:{{us-east-1}}:{{123456789012}}:secret:{{another_secret_name-??????}}"
            ]
        }
    ]
}
```

## 範例：建立秘密的許可
<a name="auth-and-access_examples_create"></a>

若要將建立秘密的許可授予使用者，建議您將許可政策連接至使用者所屬的 IAM 群組。請參閱 [IAM 使用者群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)。

**Example 建立秘密**  
下列政策會授予建立秘密和檢視秘密清單的許可。若要使用此政策，請參閱 [身分型政策](#auth-and-access_iam-policies)。    
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
{
  "Effect": "Allow",
  "Action": [
    "secretsmanager:CreateSecret",
    "secretsmanager:ListSecrets"
  ],
  "Resource": "*"
}
]
}
```

## 範例：拒絕加密秘密的特定 AWS KMS 金鑰
<a name="auth-and-access_examples_kmskey"></a>

**重要**  
若要拒絕客戶受管金鑰，建議您使用金鑰政策或金鑰授予來限制存取。如需更多資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的 [AWS KMS驗證與存取控制](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

**Example 拒絕 AWS 受管金鑰 `aws/secretsmanager`**  
下列政策拒絕使用 AWS 受管金鑰 `aws/secretsmanager`來建立或更新秘密。此政策要求使用客戶受管金鑰加密秘密。政策包含兩個陳述式：  

1. 第一個陳述式 `Sid: "RequireCustomerManagedKeysOnSecrets"`拒絕使用 建立或更新秘密的請求 AWS 受管金鑰 `aws/secretsmanager`。

1. 第二個陳述式 `Sid: "RequireKmsKeyIdParameterOnCreate"`拒絕建立不包含 KMS 金鑰之秘密的請求，因為 Secrets Manager 會預設為使用 AWS 受管金鑰 `aws/secretsmanager`。  
****  

```
{
"Version":"2012-10-17",		 	 	 
"Statement": [
  {
      "Sid": "RequireCustomerManagedKeysOnSecrets",
      "Effect": "Deny",
      "Action": [
          "secretsmanager:CreateSecret",
          "secretsmanager:UpdateSecret"
      ],
      "Resource": "*",
      "Condition": {
          "StringLikeIfExists": {
              "secretsmanager:KmsKeyArn": "<key_ARN_of_the_AWS_managed_key>"
          }
      }
  },
  {
      "Sid": "RequireKmsKeyIdParameterOnCreate",
      "Effect": "Deny",
      "Action": "secretsmanager:CreateSecret",
      "Resource": "*",
      "Condition": {
          "Null": {
              "secretsmanager:KmsKeyArn": "true"
          }
      }
  }
]
}
```