本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 S3 儲存瀏覽器
若要將最終使用者與 Amazon S3「位置」連線,您必須先設定身分驗證和授權方法。您可以透過三種方法來設定儲存瀏覽器的身分驗證和授權方法:
方法 1:管理客戶和第三方合作夥伴的資料存取
透過此方法,您可以使用 AWS Amplify
Auth
您可以使用 Auth 搭配設定為使用 Amplify Storage 的 S3 儲存貯體,將 IAM 登入資料提供給最終使用者和第三方合作夥伴 AWS Amplify 。 AWS Amplify Auth 建立在 Amazon Cognito 上,這是一種全受管的客戶身分和存取管理服務,您可以在其中從內建的使用者目錄或企業目錄,或從消費者身分提供者驗證和授權使用者。Amplify 授權模型會定義目前已驗證的使用者可以存取的字首。如需如何為 AWS Amplify設定授權的詳細資訊,請參閱設定儲存體
若要使用 Amplify 身分驗證和儲存方法來初始化元件,請將下列程式碼片段新增至您的 Web 應用程式:
import { createAmplifyAuthAdapter, createStorageBrowser, } from '@aws-amplify/ui-react-storage/browser'; import "@aws-amplify/ui-react-storage/styles.css"; import config from './amplify_outputs.json'; Amplify.configure(config); export const { StorageBrowser } = createStorageBrowser({ config: createAmplifyAuthAdapter(), });
方法 2:管理 AWS 您帳戶的 IAM 主體的資料存取
如果您想要 AWS 帳戶 直接管理 IAM 主體或 的存取權,您可以建立具有叫用 GetDataAccess S3 API 操作許可的 IAM 角色。若要設定此項目,您必須建立 S3 Access Grants 執行個體,將 S3 一般用途儲存貯體和字首的許可映射至指定的 IAM 身分。Storage Browser 元件 (必須在取得 IAM 登入資料後於用戶端呼叫) 接著會叫用 ListCallerAccessGrants S3 API 操作,以擷取可用的授予給身分請求者,並填入元件中的位置。在您取得 s3:GetDataAccess
許可之後,儲存瀏覽器元件會接著使用這些憑證來請求對 S3 進行資料存取。
import { createManagedAuthAdapter, createStorageBrowser, } from '@aws-amplify/ui-react-storage/browser'; import "@aws-amplify/ui-react-storage/styles.css"; export const { StorageBrowser } = createStorageBrowser({ config: createManagedAuthAdapter({ credentialsProvider: async (options?: { forceRefresh?: boolean }) => { // return your credentials object return { credentials: { accessKeyId: 'my-access-key-id', secretAccessKey: 'my-secret-access-key', sessionToken: 'my-session-token', expiration: new Date() }, } }, // AWS `region` and `accountId` region: '', accountId: '', // call `onAuthStateChange` when end user auth state changes // to clear sensitive data from the `StorageBrowser` state registerAuthListener: (onAuthStateChange) => {}, }) });
方法 3:大規模管理資料存取
如果您想要將 S3 存取授權執行個體與 IAM Identity Center 建立關聯,以獲得更具可擴展性的解決方案 (例如為整個公司提供資料存取),您可以代表目前已驗證的使用者向 Amazon S3 請求資料。例如,您可以授權公司目錄中的使用者群組存取 S3 中的資料。此方法可讓您集中管理使用者和群組的 S3 存取授權許可,包括在外部提供者託管的服務,例如 Microsoft Entra、Okta 等。
使用此方法時,與 IAM Identity Center 的整合可讓您使用現有的使用者目錄。IAM Identity Center 受信任身分傳播的另一個好處是,Amazon S3 的每個AWS CloudTrail 資料事件都會直接參照存取 S3 資料的最終使用者身分。
如果您有支援 OAuth 2.0 的應用程式,且您的使用者需要從這些應用程式存取 AWS 服務,我們建議您使用信任的身分傳播。透過信任的身分傳播,使用者可以登入應用程式,而該應用程式可以在存取 AWS 服務中資料的任何請求中傳遞使用者的身分。此應用程式會代表任何已驗證的使用者與 IAM Identity Center 互動。如需詳細資訊,請參閱搭配客戶管理應用程式使用受信任的身分傳播。
設定
若要 AWS Management Console 使用 S3 Access Grants 和 IAM Identity Center 受信任身分傳播在 中設定儲存瀏覽器身分驗證,您的應用程式必須代表目前驗證的使用者向 Amazon S3 請求資料。透過此方法,您可以讓公司目錄中的使用者或使用者群組,直接存取您的 S3 儲存貯體、字首或物件。這表示您的應用程式不需要將任何使用者映射至 IAM 主體。
下列工作流程概述使用 IAM Identity Center 和 S3 存取授權設定 S3 儲存瀏覽器的步驟:
步驟 | 描述 |
---|---|
1 | 為您的 AWS Organizations啟用 IAM Identity Center |
2 | 設定 AWS Identity and Access Management Identity Center 聯合 |
3 | 在 AWS Identity and Access Management
Identity Center 主控台中新增信任的權杖發行者
信任的權杖發行者會代表 IAM Identity Center 中的外部身分提供者 (IdP),使其能夠識別您應用程式已驗證使用者的身分權杖。 |
4 | 為 bootstrap 應用程式和 identity bearer 建立 IAM 角色 |
5 | 在 IAM Identity Center 中建立和設定應用程式
此應用程式會代表已驗證的使用者與 IAM Identity Center 互動。 |
6 | 新增 S3 存取授權作為信任的身分傳播應用程式
此步驟會將您的應用程式連線到 S3 存取授權,以便代表已驗證的使用者向 S3 存取授權提出請求。 |
7 | 建立使用者或群組授權
此步驟會將來自 AWS Identity and Access Management Identity Center 的使用者與跨網域身分管理 (SCIM) 系統同步。SCIM 讓您的 IAM Identity Center 身分與身分提供者 (IdP) 的身分保持同步。 |
8 | 建立 S3 儲存瀏覽器元件 |
為您的 AWS Organizations啟用 IAM Identity Center
若要為您的 啟用 IAM Identity Center AWS Organizations,請執行下列步驟:
-
AWS Management Console使用下列其中一種方法登入 :
-
新使用者 AWS (根使用者) – 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者的身分登入。在下一頁中,輸入您的密碼。
-
已使用 AWS (IAM 登入資料) – 使用具有管理許可的 IAM 登入資料登入。
-
-
在啟用 IAM Identity Center 下,選擇啟用。
注意
IAM Identity Center 需要設定 AWS Organizations。如果您尚未設定組織,您可以選擇讓 為您 AWS 建立一個組織。選擇建立 AWS 組織以完成此程序。
-
選擇使用 啟用 AWS Organizations。
-
選擇繼續。
-
(選用) 新增要與此組織執行個體建立關聯的任何標籤。
-
(選用) 設定委派管理。
注意
如果您使用多帳戶環境,建議您設定委派的管理。透過委派的管理,您可以限制需要在 AWS Organizations中存取管理帳戶的人數。如需詳細資訊,請參閱委派的管理。
-
選擇儲存。
AWS Organizations 會自動傳送驗證電子郵件到與您管理帳戶相關聯的地址。在您收到驗證電子郵件之前,可能會有一些延遲的時間。請務必在 24 小時內驗證您的電子郵件地址,之後驗證電子郵件會過期。
設定 AWS Identity and Access Management Identity Center 聯合
若要搭配公司目錄使用者使用 S3 儲存瀏覽器,您必須設定 IAM Identity Center 使用外部身分提供者 (IdP)。您可以使用自選的偏好身分提供者。不過,請注意,每個身分提供者都會使用不同的組態設定。如需使用不同外部身分提供者的教學課程,請參閱 IAM Identity Center 來源教學課程。
注意
請務必記錄您已設定之身分提供者的發行者 URL 和對象屬性,因為後續步驟中需要參考。如果您沒有設定 IdP 所需的存取權或許可,您可能需要聯絡外部 IdP 的管理員以取得存取權或許可。
在 AWS Identity and Access Management Identity Center 主控台中新增信任的權杖發行者
信任的權杖發行者會代表 AWS Identity and Access Management Identity Center 中的外部身分提供者,並識別您應用程式已驗證使用者的權杖。中 IAM Identity Center 執行個體的帳戶擁有者 AWS Organizations 必須執行這些步驟。這些步驟可以在 IAM Identity Center 主控台中完成,也可以透過程式設計方式完成。
若要在 AWS Identity and Access Management Identity Center 主控台中新增信任的字符發行者,請執行下列步驟:
-
選擇設定。
-
選擇身分驗證索引標籤。
-
導覽至信任的權杖發行者區段,並填寫下列詳細資訊:
-
在發行者 URL 下,輸入外部 IdP 的 URL 作為信任的權杖發行者。您可能需要聯絡外部 IdP 的管理員以取得此資訊。如需詳細資訊,請參閱使用信任權杖發行者的應用程式。
-
在信任的權杖發行者名稱下,輸入信任的權杖發行者名稱。若已設定應用程式資源進行身分傳播,此名稱會出現在信任的權杖發行者清單中,供您在「步驟 8」中選取。
-
-
將映射屬性更新為您偏好的應用程式屬性,其中每個身分提供者屬性都會映射至 IAM Identity Center 屬性。例如,您可能想要將應用程式屬性
email
映射至 IAM Identity Center 使用者屬性email
。若要查看 IAM Identity Center 中允許的使用者屬性清單,請參閱 AWS Managed Microsoft AD 目錄屬性映射中的表格。 -
(選用) 如果您想要新增資源標籤,請輸入成對的金鑰和值。若要新增多個資源標籤,請選擇新增標籤以產生新的項目,然後輸入成對的金鑰和值。
-
選擇建立信任的權杖發行者。
-
完成建立信任的權杖發行者之後,請聯絡應用程式管理員,讓他們知道信任的權杖發行者名稱,以便確認信任的權杖發行者顯示在適當的主控台中。
-
確定應用程式管理員在適當的主控台中選取此信任的權杖發行者,讓使用者能夠從專為受信任身分傳播設定的應用程式存取應用程式。
為 bootstrap
應用程式和 identity bearer
建立 IAM 角色
為了確保 bootstrap
應用程式和 identity bearer
使用者可以正常運作,請務必建立兩個 IAM 角色。bootstrap
應用程式需要一個 IAM 角色,而身分持有人 (或存取 Web 應用程式以透過 S3 存取授權請求存取的最終使用者) 則必須使用另一個 IAM 角色。bootstrap
應用程式會收到身分提供者發行的權杖,並調用 CreateTokenWithIAM
API,以 Identity Center 發行的權杖交換此權杖。
建立具有下列許可的 IAM 角色,例如 bootstrap-role
。下列範例 IAM 政策會授予 bootstrap-role
執行權杖交換的許可:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "sso-oauth:CreateTokenWithIAM", ], "Resource": "arn:${
Partition
}:sso::${AccountId
}:application/${InstanceId
}/${ApplicationId
}", "Effect": "Allow" }, { "Action": [ "sts:AssumeRole", "sts:SetContext" ], "Resource": "arn:aws:iam::${AccountId
}:role/identity-bearer-role
", "Effect": "Allow" }] }
然後,建立第二個 IAM 角色 (例如 identity-bearer-role
),身分經紀人會使用這個角色來產生 IAM 憑證。身分經紀人將 IAM 憑證傳回至 Web 應用程式,然後 S3 儲存瀏覽器元件會使用這些憑證來允許存取 S3 資料:
{ "Action": [ "s3:GetDataAccess", "s3:ListCallerAccessGrants", ], "Resource": "arn:${
Partition
}:s3:${Region
}:${Account
}:access-grants/default", "Effect": "Allow" }
此 IAM 角色 (identity-bearer-role
) 必須透過下列陳述式使用信任政策:
{ "Effect": "Allow", "Principal": { "AWS": "arn:${
Partition
}:iam::${Account
}:role/${RoleNameWithPath
}" }, "Action": [ "sts:AssumeRole", "sts:SetContext" ] }
在 IAM Identity Center 中建立和設定應用程式
注意
開始之前,請確定您已在上一個步驟中建立必要的 IAM 角色。在此步驟中,您將需要指定其中一個 IAM 角色。
若要在 IAM Identity Center AWS 中建立和設定客戶受管應用程式,請執行下列步驟:
-
選擇 Applications (應用程式)。
-
選擇客戶管理索引標籤。
-
選擇新增應用程式。
-
在選取應用程式類型頁面的設定偏好下,選擇我有想要設定的應用程式。
-
在應用程式類型下,選擇 OAuth 2.0。
-
選擇下一步。指定應用程式頁面隨即顯示。
-
在應用程式名稱和描述區段下,輸入應用程式的顯示名稱,例如
storage-browser-oauth
。 -
輸入 Description (描述)。應用程式描述會顯示在 IAM Identity Center 主控台和 API 請求中,但不會出現在 AWS 存取入口網站中。
-
在使用者和群組指派方法下,選擇不需要指派。這個選項可讓所有已授權的 IAM Identity Center 使用者和群組存取此應用程式。
-
在 AWS 存取入口網站下,輸入使用者可以在其中存取應用程式的應用程式 URL。
-
(選用) 如果您想要新增資源標籤,請輸入成對的金鑰和值。若要新增多個資源標籤,請選擇新增標籤以產生新的項目,然後輸入成對的金鑰和值。
-
選擇下一步。指定身分驗證頁面隨即顯示。
-
在向信任的權杖發行者進行身分驗證下,使用核取方塊來選取您先前建立的信任權杖發行者。
-
在設定選取的信任權杖發行者下,輸入 aud 宣告。aud 宣告會識別 JSON Web 權杖 (JWT) 的對象,這會是信任權杖發行者用來識別此應用程式的名稱。
注意
您可能需要聯絡外部 IdP 的管理員以取得此資訊。
-
選擇下一步。指定身分驗證憑證頁面隨即顯示。
-
在組態方法下,選擇輸入一或多個 IAM 角色。
-
在 輸入 IAM 角色 下,為身分持有人權杖新增 IAM 角色或 Amazon Resource Name (ARN)。您必須輸入在上一個步驟中為身分經紀人應用程式建立的 IAM 角色 (例如
bootstrap-role
)。 -
選擇下一步。
-
在檢閱和設定頁面上,檢閱應用程式組態的詳細資訊。如果您需要修改任何設定,請針對要編輯的區段選擇編輯,然後進行變更。
-
選擇提交。您剛新增之應用程式的詳細資訊頁面隨即顯示。
設定應用程式之後,您的使用者可以根據已建立的許可集和您指派的使用者存取權,從其 AWS 存取入口網站存取您的應用程式。
新增 S3 存取授權作為信任的身分傳播應用程式
設定客戶管理應用程式之後,您必須指定 S3 存取授權以進行身分傳播。S3 存取授權為使用者提供憑證,以存取 Amazon S3 資料。當您登入客戶管理應用程式時,S3 存取授權會將您的使用者身分傳遞給信任的應用程式。
先決條件:請確定您已設定 S3 存取授權 (例如建立 S3 存取授權執行個體並註冊位置),再執行下列步驟。如需詳細資訊,請參閱開始使用 S3 存取授權。
若要將用於身分傳播的 S3 存取授權新增至您的客戶管理應用程式,請執行下列步驟:
-
選擇 Applications (應用程式)。
-
選擇客戶管理索引標籤。
-
在客戶管理應用程式清單中,選取您要為其啟動存取請求的 OAuth 2.0 應用程式。這是您的使用者將登入的應用程式。
-
在詳細資訊頁面的用於身分傳播的可信應用程式下,選擇指定信任的應用程式。
-
在設定類型下,選取個別應用程式並指定存取權,然後選擇下一步。
-
在選取服務頁面上,選擇 S3 存取授權。S3 存取授權具有應用程式,您可以用來定義自己的 Web 應用程式,以進行受信任的身分傳播。
-
選擇下一步。您將在下一個步驟中選取應用程式。
-
在選取應用程式頁面上,選擇個別應用程式,選取每個可接收存取請求之應用程式的核取方塊,然後選擇下一步。
-
在設定存取頁面的組態方法下,選擇下列任一項:
-
選取每個應用程式的存取權 – 選取此選項,為每個應用程式設定不同的存取層級。選擇您要為其設定存取層級的應用程式,然後選擇編輯存取權。在要套用的存取層級中,視需要變更存取層級,然後選擇儲存變更。
-
對所有應用程式套用相同的存取層級 – 如果您不需要設定個別應用程式的存取層級,請選取此選項。
-
-
選擇下一步。
-
在檢閱組態頁面上,檢閱您所做的選擇。
注意
您想要確保已為使用者授予
s3:access_grants:read_write
許可。此許可允許您的使用者擷取憑證以存取 Amazon S3。請務必使用您先前建立的 IAM 政策或 S3 存取授權來限制對寫入操作的存取。 -
若要進行變更,請針對您要進行變更的組態區段選擇編輯。然後,進行必要的變更並選擇儲存變更。
-
選擇信任應用程式,以新增用於身分傳播的可信應用程式。
建立使用者或群組授權
在此步驟中,您會使用 IAM Identity Center 佈建使用者。您可以使用 SCIM 自動或手動佈建使用者和群組。SCIM 讓您的 IAM Identity Center 身分與身分提供者 (IdP) 的身分保持同步。這包括在您的 IdP 與 IAM Identity Center 之間佈建、更新和取消佈建使用者。
注意
這是必要步驟,因為當 S3 存取授權與 IAM Identity Center 搭配使用時,不會使用本機 IAM Identity Center 使用者。反之,必須將身分提供者的使用者與 IAM Identity Center 同步。
若要將身分提供者的使用者與 IAM Identity Center 同步,請執行下列步驟:
如需如何為特定使用案例使用 IAM Identity Center 設定身分提供者的範例,請參閱 IAM Identity Center Identity 來源教學課程。
建立 S3 儲存瀏覽器元件
在您設定 IAM Identity Center 執行個體並在 S3 存取授權中建立授權之後,請開啟您的 React 應用程式。在 React 應用程式中,使用 createManagedAuthAdapter
設定授權規則。您必須提供憑證提供者,才能傳回從 IAM Identity Center 取得的憑證。您可以接著呼叫 createStorageBrowser
來初始化 S3 儲存瀏覽器元件:
import { createManagedAuthAdapter, createStorageBrowser, } from '@aws-amplify/ui-react-storage/browser'; import '@aws-amplify/ui-react-storage/styles.css'; export const { StorageBrowser } = createStorageBrowser({ config: createManagedAuthAdapter({ credentialsProvider: async (options?: { forceRefresh?: boolean }) => { // return your credentials object return { credentials: { accessKeyId: '
my-access-key-id
', secretAccessKey: 'my-secret-access-key
', sessionToken: 'my-session-token
', expiration: new Date(), }, } }, // AWS `region` and `accountId` of the S3 Access Grants Instance. region: '', accountId: '', // call `onAuthStateChange` when end user auth state changes // to clear sensitive data from the `StorageBrowser` state registerAuthListener: (onAuthStateChange) => {}, }) });
然後,請建立機制,將來自 Web 應用程式的 JSON Web 權杖 (JWT) 與來自 IAM Identity Center 的 IAM 憑證交換。如需如何交換 JWT 的詳細資訊,請參閱下列資源:
-
AWS 儲存部落格中的如何使用 IAM Identity Center 和 S3 存取授權開發使用者面向的資料應用程式
文章 -
AWS 儲存部落格中的使用 S3 存取授權擴展資料存取
文章 -
AWS 工作坊工作室上的 S3 存取授權工作坊
-
GitHub 上的 S3 存取授權工作坊
然後,設定 API 端點來處理擷取憑證的請求。若要驗證 JSON Web 權杖 (JWT) 交換,請執行下列步驟:
-
從傳入請求的授權標頭擷取 JSON Web 權杖。
-
使用來自指定 JSON Web 金鑰集 (JWKS) URL 的公有金鑰驗證權杖。
-
驗證權杖的過期、發行者、主體和對象宣告。
若要將身分提供者的 JSON Web 字符與 IAM AWS 憑證交換,請執行下列步驟:
提示
請務必避免記錄任何敏感資訊。建議您針對缺少授權、過期的權杖和其他例外狀況使用錯誤處理控制。如需詳細資訊,請參閱AWS 運算部落格中的實作 AWS Lambda 錯誤處理模式
-
確認在請求中提供所需的許可和範圍參數。
-
使用 CreateTokenWithIAM API 將 JSON Web 權杖換成 IAM Identity Center 權杖。
注意
使用 IdP JSON Web 權杖之後,就無法再次使用。必須使用新的權杖來與 IAM Identity Center 交換。
-
執行 AssumeRole API 操作,使用 IAM Identity Center 權杖擔任暫時性角色。身分持有人角色也稱為持有身分內容的角色 (例如
identity-bearer-role
),請務必使用該角色來請求憑證。 -
將 IAM 憑證傳回至 Web 應用程式。
注意
請確定您已設定適當的記錄機制。回應會以標準化的 JSON 格式傳回,並具有適當的 HTTP 狀態碼。