授權 Amazon Redshift 資料 API 的存取 - Amazon Redshift

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

授權 Amazon Redshift 資料 API 的存取

若要存取資料 API,使用者必須獲得授權。您可以透過將受管政策 (即預先定義的 AWS Identity and Access Management (IAM) 政策) 新增至該使用者,來授權其存取資料 API。我們建議的最佳實務是,將許可政策附加到 IAM 角色,然後根據需要將其指派給使用者和群組。如需詳細資訊,請參閱 Amazon Redshift 中的身分和存取管理。若要查看受管政策允許和拒絕的許可,請參閱 IAM 主控台 (https://console.aws.amazon.com/iam/)。

Amazon Redshift 會提供 AmazonRedshiftDataFullAccess 受管政策。此政策可提供 Amazon Redshift 資料 API 操作的完整存取權。此政策還允許範圍存取特定的 Amazon Redshift 和 IAM API 操作 AWS Secrets Manager,以驗證和存取 Amazon Redshift 叢集或 Redshift 無伺服器工作群組所需的 IAM API 操作。

您也可以建立自己的 IAM 政策,以允許存取特定資源。若要建立您的政策,請使用 AmazonRedshiftDataFullAccess 政策作為起始範本。建立政策後,將它新增給每一位需要資料 API 存取的使用者。

請考量與使用者相關聯之 IAM 政策的下列要求:

  • 如果您使 AWS Secrets Manager 用驗證,請確認政策允許使用secretsmanager:GetSecretValue動作擷取標記為金鑰的密碼RedshiftDataFullAccess

  • 如果您使用暫時憑證對叢集進行身分驗證,請確認政策允許對叢集中任何資料庫的資料庫使用者名稱 redshift_data_api_user 使用 redshift:GetClusterCredentials 動作。此使用者名稱必須已建立在資料庫中。

  • 如果您使用暫時憑證向無伺服器工作群組進行身分驗證,請確認政策允許使用 redshift-serverless:GetCredentials 動作來擷取以索引鍵 RedshiftDataFullAccess 標記的工作群組。資料庫使用者會將 1:1 對應至來源 AWS Identity and Access Management (IAM) 身分識別。例如,使用者 sample_user 會映射至資料庫使用者 IAM:sample_user,而 IAM 角色 sample_role 會映射至 IAMR:sample_role。如需 IAM 身分的相關資訊,請參閱《IAM 使用者指南》中的 IAM 身分 (使用者、使用者群組和角色)

若要在另一個帳戶擁有的叢集上執行查詢,擁有端帳戶必須提供資料 API 可在呼叫端帳戶中擔任的 IAM 角色。例如,假設帳戶 B 擁有帳戶 A 需要存取的叢集。帳戶 B 可將受 AWS管政策附加AmazonRedshiftDataFullAccess到帳戶 B 的 IAM 角色。然後,帳戶 B 會使用信任政策來信任帳戶 A,如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::accountID-of-account-A:role/someRoleA" ] }, "Action": "sts:AssumeRole" } ] }

最後,帳戶 A 的 IAM 角色必須能夠擔任帳戶 B 的 IAM 角色。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::accountID-of-account-B:role/someRoleB" } }

以下連結提供 IAM 使用者指南 AWS Identity and Access Management 中的詳細資訊。

將資料庫認證儲存於 AWS Secrets Manager

當您呼叫資料 API 時,您可以透過在 AWS Secrets Manager中使用機密來傳遞叢集或無伺服器工作群組的憑證。若要這樣傳遞登入資料,請指定秘密的名稱或秘密的 Amazon Resource Name (ARN)。

若要使用 Secrets Manager 來儲存憑證,您需要 SecretManagerReadWrite 受管政策許可。如需有關最低權限的詳細資訊,請參閱AWS Secrets Manager 使用指南中的使用 AWS Secrets Manager 建立和管理密碼。

將憑證儲存在 Amazon Redshift 叢集的機密中
  1. 使用 AWS Secrets Manager 主控台建立包含叢集認證的密碼:

    • 當您選擇儲存新的機密時,請選擇 Redshift 叢集的憑證

    • 使用者名稱 (資料庫使用者)、密碼資料庫叢集 (叢集識別碼) 的值儲存在機密中。

    • 使用索引鍵 RedshiftDataFullAccess 標記機密。 AWS受管政策 AmazonRedshiftDataFullAccess 只允許針對使用索引鍵 RedshiftDataFullAccess 標記的機密執行動作 secretsmanager:GetSecretValue

    如需說明,請參閱《AWS Secrets Manager 使用者指南》中的建立基本秘密

  2. 使用主 AWS Secrets Manager 控台檢視您建立之密碼的詳細資料,或執行aws secretsmanager describe-secret AWS CLI 命令。

    記下秘密的名稱和 ARN。您可以在呼叫資料 API 時使用這些資料。

將憑證儲存在無伺服器工作群組的機密中
  1. 使用 AWS Secrets Manager AWS CLI 命令儲存包含無伺服器工作群組認證的密碼:

    • 在檔案中建立您的秘密,例如名為 mycreds.json 的 JSON 檔案。在檔案中提供使用者名稱 (資料庫使用者) 和密碼的值。

      { "username": "myusername", "password": "mypassword" }
    • 將值儲存在機密中,並使用索引鍵 RedshiftDataFullAccess 標記機密。

      aws secretsmanager create-secret --name MyRedshiftSecret --tags Key="RedshiftDataFullAccess",Value="serverless" --secret-string file://mycreds.json

      以下將顯示輸出。

      { "ARN": "arn:aws:secretsmanager:region:accountId:secret:MyRedshiftSecret-mvLHxf", "Name": "MyRedshiftSecret", "VersionId": "a1603925-e8ea-4739-9ae9-e509eEXAMPLE" }

    如需詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的使用 AWS CLI建立基本機密

  2. 使用主 AWS Secrets Manager 控台檢視您建立之密碼的詳細資料,或執行aws secretsmanager describe-secret AWS CLI 命令。

    記下秘密的名稱和 ARN。您可以在呼叫資料 API 時使用這些資料。

建立資料 API 的 Amazon VPC 端點 (AWS PrivateLink)

Amazon Virtual Private Cloud (Amazon VPC) 可讓您將 AWS 資源 (例如 Amazon Redshift 叢集和應用程式) 啟動到虛擬私有雲端 (VPC) 中。 AWS PrivateLink 在 Amazon 網路上安全地在虛擬私有雲 (VPC) 和 AWS 服務之間提供私有連線。您可以使用 AWS PrivateLink建立 VPC 端點,這能讓您根據 Amazon VPC 連線至不同帳戶與 VPC 的服務。如需有關的詳細資訊 AWS PrivateLink,請參閱 Amazon Virtual Private Cloud 使用者指南中的 VPC 端點服務 (AWS PrivateLink)

您可以使用 Amazon VPC 端點呼叫資料 API。使用 Amazon VPC 端點可保留 Amazon VPC 中的應用程式與 AWS 網路中的資料 API 之間的流量,而無需使用公有 IP 地址。Amazon VPC 端點能協助您符合與限制公有網際網路連線相關的合規和法律需求。舉例來說,若使用 Amazon VPC 端點,就能讓在 Amazon EC2 執行個體上執行之應用程式和資料 API 的流量,只在包含兩者的 VPC 中傳送。

建立 Amazon VPC 端點之後就能開始使用,而不需要在應用程式中進行任何程式碼或組態變更。

建立資料 API 的 Amazon VPC 端點
  1. 登入 AWS Management Console 並開啟 Amazon VPC 主控台,網址為 https://console.aws.amazon.com/vpc/

  2. 選擇 Endpoints (端點),然後選擇 Create Endpoint (建立端點)

  3. Create Endpoint (建立端點) 頁面上,針對 Service category (服務類別) 選擇 AWS services ( 服務)。針對服務名稱,選擇 redshift-data (com.amazonaws.region.redshift-data)。

  4. 針對 VPC,選擇要在其中建立端點的 VPC。

    選擇包含進行資料 API 呼叫之應用程式的 VPC。

  5. 對於子網路,請為執行應用程式的 AWS 服務所使用的每個可用區域 (AZ) 選擇子網路。

    若要建立 Amazon VPC 端點,請指定可存取端點的私有 IP 地址範圍。若要執行此作業,請選擇每個可用區域的子網路。這麼做會將 VPC 端點限制為每個可用區域專屬的私有 IP 地址範圍,並且也會在每個可用區域中建立 Amazon VPC 端點。

  6. 針對 Enable DNS name (啟用 DNS 名稱),選取 Enable for this endpoint (為此端點啟用)

    私有 DNS 會將標準資料 API DNS 主機名稱 (https://redshift-data.region.amazonaws.com) 解析為與您 Amazon VPC 端點專用 DNS 主機名稱相關的私有 IP 地址。因此,您可以使用 AWS CLI 或 AWS SDK 存取資料 API VPC 人雲端節點,而無需進行任何程式碼或組態變更以更新資料 API 端點 URL。

  7. 針對 Security group (安全群組),選擇要與 Amazon VPC 端點建立關聯的安全群組。

    選擇允許存取執行應用程式之 AWS 服務的安全性群組。舉例來說,若有 Amazon EC2 執行個體在執行您的應用程式,請選擇要允許存取 Amazon EC2 執行個體的安全群組。安全群組能讓您控制 VPC 中,資源流向 Amazon VPC 端點的流量。

  8. 選擇建立端點

建立端點後,選擇中的連結 AWS Management Console 以檢視端點詳細資訊。

端點 Details (詳細資訊) 標籤會顯示建立 Amazon VPC 端點時產生的 DNS 主機名稱。

您可以使用標準端點 (redshift-data.region.amazonaws.com) 或其中一個 VPC 專用端點,來在 Amazon VPC 中呼叫資料 API。標準資料 API 端點會自動路由至 Amazon VPC 端點。因為私有 DNS 主機名稱在 Amazon VPC 端點建立時已啟用,所以會發生此路由。

當您在資料 API 呼叫中使用 Amazon VPC 端點時,應用程式與資料 API 間的所有流量都會維持在包含兩者的 Amazon VPC 中。您可以使用 Amazon VPC 端點進行任何類型的資料 API 呼叫。如需呼叫資料 API 的詳細資訊,請參閱呼叫 Amazon Redshift 資料 API 時的考量

連線到叢集時加入資料庫群組

資料庫群組是資料庫使用者的集合。您可以向群組授予資料庫權限。管理員可以設定 IAM 角色,以便在使用資料 API 執行 SQL 時將這些資料庫群組納入考量。如需資料庫群組的相關資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的群組

您可以設定資料 API 呼叫者的 IAM 角色,以便在資料 API 連線到叢集時,呼叫中指定的資料庫使用者會加入資料庫群組。只有在連線至已佈建的叢集時才支援此功能。連線至 Redshift Serverless 工作群組時則不支援。資料 API 呼叫者的 IAM 角色也必須允許 redshift:JoinGroup 動作。

請透過向 IAM 角色新增標籤來進行此設定。呼叫者 IAM 角色的管理員會新增標籤,標籤中包含資料庫群組清單的索引鍵 RedshiftDbGroups 和索引鍵值。此值是以冒號 (:) 分隔的資料庫群組名稱清單,總長度最多可有 256 個字元。您必須之前就已在連線的資料庫中定義好資料庫群組。如果在資料庫中找不到任何指定的群組,則會忽略該群組。例如,對於資料庫群組 accountingretail,索引鍵-值為 accounting:retail。資料 API 會使用標籤索引鍵-值組 {"Key":"RedshiftDbGroups","Value":"accounting:retail"} 來判斷在呼叫資料 API 時,哪些資料庫群組會與所提供的資料庫使用者相關聯。

以標籤的形式將資料庫群組新增至 IAM 角色
  1. 登入 AWS Management Console 並開啟 IAM 主控台,網址為 https://console.aws.amazon.com/iam/

  2. 在主控台導覽窗格中,選擇 Roles (角色),然後選擇您要編輯的角色名稱。

  3. 選擇標籤索引標籤,然後選擇管理標籤

  4. 選擇「新增標籤」,然後新增金鑰RedshiftDbGroups與清單的值database-groups-colon-separated

  5. 選擇儲存變更

    現在,當 IAM 主體 (附加了此 IAM 角色) 呼叫資料 API 時,指定的資料庫使用者便會加入 IAM 角色中指定的資料庫群組。

如需如何將標籤附加到主體 (包括 IAM 角色和 IAM 使用者) 的相關資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源