

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

# 授權 Amazon RDS 資料 API 的存取
<a name="data-api.access"></a>

使用者獲得授權後才能調用 Amazon RDS 資料 API (資料 API) 作業。您可以連接定義其權限的 AWS Identity and Access Management (IAM) 政策，授予使用者使用資料 API 的許可。如果您使用的是 IAM 角色，也可以將政策連接至角色。 AWS 受管政策 `AmazonRDSDataFullAccess`包含資料 API 的許可。

 此`AmazonRDSDataFullAccess`政策也包含使用者從中取得秘密值的許可 AWS Secrets Manager。使用者需要使用 Secrets Manager 來儲存可在呼叫資料 API 時使用的秘密。使用秘密表示使用者不需要在呼叫資料 API 時包含其目標資源的資料庫登入資料。資料 API 會透明地呼叫 Secrets Manager，以允許 (或拒絕) 使用者對秘密的請求。如需設定秘密以搭配資料 API 使用的相關資訊，請參閱[在 中存放資料庫登入資料 AWS Secrets Manager](#data-api.secrets)。

 `AmazonRDSDataFullAccess` 政策提供資源的完整存取 (透過資料 API)。您可以透過定義自己的政策來指定資源的 Amazon Resource Name (ARN)，藉以縮小範圍。

例如，下列政策顯示使用者存取其 ARN 所識別之資料庫叢集之資料 API 的最低所需許可範例。該政策包括存取 Secrets Manager 和取得使用者資料庫執行個體授權所需的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SecretsManagerDbCredentialsAccess",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:rds-db-credentials/*"
        },
        {
            "Sid": "RDSDataServiceAccess",
            "Effect": "Allow",
            "Action": [
                "rds-data:BatchExecuteStatement",
                "rds-data:BeginTransaction",
                "rds-data:CommitTransaction",
                "rds-data:ExecuteStatement",
                "rds-data:RollbackTransaction"
            ],
            "Resource": "arn:aws:rds:us-east-2:111122223333:cluster:prod"
        }
    ]
}
```

------

我們建議您針對政策陳述式中的「資源」元素使用特定 ARN (如範例所示)，而不是萬用字元 (\$1)。

## 使用標籤型授權
<a name="data-api.access.tag-based-access"></a>

RDS 資料 API (資料 API) 和 Secrets Manager 都支援標籤型授權。*標籤*是用來標示資源 (例如 RDS 叢集) 的索引鍵值配對，並具有額外的字串值，例如：
+ `environment:production`
+ `environment:development`

您可以將標籤套用至資源，以進行成本配置、作業支援、存取控制和許多其他原因。(如果您的資源上還沒有標籤，而您想要套用標籤，您可至[標記 Amazon RDS 資源](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html)中進一步了解。) 您可以在政策陳述式中使用標籤來限制對以這些標籤標示之 RDS 叢集的存取。舉例來說，Aurora 資料庫叢集可能具有用來將其環境標識為生產或開發的標籤。

下列範例顯示如何在政策陳述式中使用標籤。此陳述式要求叢集和資料 API 要求中傳遞的秘密都有一個 `environment:production` 標籤。

以下是套用政策的方式：當使用者使用資料 API 進行呼叫時，會將要求傳送至服務。資料 API 首先驗證在請求中傳遞的叢集 ARN 是否標記了 `environment:production`。然後，它會呼叫 Secrets Manager 擷取請求中的使用者秘密值。Secrets Manager 還會驗證使用者的秘密是否被標記為 `environment:production`。如果有，資料 API 接著會使用使用者資料庫密碼的擷取值。最後，如果這也是正確的，則會為使用者成功地呼叫資料 API 請求。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SecretsManagerDbCredentialsAccess",
            "Effect": "Allow",
            "Action": [
                 "secretsmanager:GetSecretValue"
               ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:rds-db-credentials/*",
            "Condition": {
                    "StringEquals": {
                        "aws:ResourceTag/environment": [
                                         "production"
                                        ]
                     }
             }
        },
        {
            "Sid": "RDSDataServiceAccess",
            "Effect": "Allow",
            "Action": [
                  "rds-data:*"
               ],
            "Resource": "arn:aws:rds:us-east-2:111122223333:cluster:*",
            "Condition": {
                    "StringEquals": {
                        "aws:ResourceTag/environment": [
                                         "production"
                                        ]
                     }
             }
         }
     ]
}
```

------

此範例顯示適用於資料 API 和 Secrets Manager 之 `rds-data` 和 `secretsmanager` 的個別動作。但是，您可以合併動作並以許多不同的方式定義標籤條件，以支援您的特定使用案例。如需詳細資訊，請參閱[針對 Secrets Manager 使用以身分為基礎的政策 (IAM 政策)](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_identity-based-policies.html#permissions_grant-limited-condition)。

 在政策的「條件」元素中，您可以從以下選項中選擇標籤鍵：
+  `aws:TagKeys` 
+  `aws:ResourceTag/${TagKey}` 

若要進一步了解資源標籤和如何使用 `aws:TagKeys`，請參閱[使用 AWS 資源標籤控制對資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

**注意**  
 資料 API 和 都會 AWS Secrets Manager 授權使用者。如果您沒有政策中定義之所有動作的許可，您會收到 `AccessDeniedException` 錯誤訊息。

## 在 中存放資料庫登入資料 AWS Secrets Manager
<a name="data-api.secrets"></a>

當您呼叫 Amazon RDS 資料 API (資料 API) 時，您可以在 Secrets Manager 中使用秘密來傳遞Aurora 資料庫叢集的憑證。若要這樣傳遞登入資料，請指定秘密的名稱或秘密的 Amazon Resource Name (ARN)。

**在秘密中存放資料庫叢集登入資料**

1. 使用 Secrets Manager 建立秘密，其中含有 Aurora 資料庫叢集的登入資料。

   如需說明，請參閱《*AWS Secrets Manager 使用者指南*》中的[建立資料庫機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)。

1. 使用 Secrets Manager 主控台來檢視您建立之秘密的詳細資訊，或執行 `aws secretsmanager describe-secret` AWS CLI 命令。

   記下秘密的名稱和 ARN。在呼叫資料 API 時即可派上用場。

如需使用 Secrets Manager 的詳細資訊，請參閱 [AWS Secrets Manager 使用者指南](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。

若要了解 Amazon Aurora 如何管理身分識別和存取管理，請參閱 [Amazon Aurora 如何搭配 IAM使用](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/security_iam_service-with-iam.html)。

如需有關建立 IAM 政策的詳細資訊，請參閱*IAM 使用者指南*中的[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。如需有關將 IAM 政策新增給使用者的資訊，請參閱 *IAM 使用者指南*中的[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。