本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定對 Amazon DynamoDB 的跨帳戶存取權
創建者沙希達爾米亞 (AWS), 埃斯特萬塞爾納·帕拉 (), 和伊霍爾塔·奧吉爾 (AWS) AWS
環境:生產 | 技術:資料庫;安全性、身分識別、合規性 | AWS服務:Amazon DynamoDB 支援;AWSIdentity and Access Management;Lambda AWS |
Summary
此模式說明使用以資源為基礎的政策設定跨帳戶存取 Amazon DynamoDB 的步驟。對於使用 DynamoDB 的工作負載而言,使用工作負載隔離策略
DynamoDB 的資源型原則可大幅簡化跨帳戶工作負載的安全狀態。此模式提供步驟和範例程式碼,以示範如何將 AWS Lambda 函數設定 AWS 帳戶 為將資料寫入不同帳戶中的 DynamoDB 資料庫表格。
先決條件和限制
先決條件
限制
有些 AWS 服務 並不是在所有可用 AWS 區域。如需區域可用性資訊,請參閱AWS 服務 依區域
。對於特定端點,請參閱服務端點和配額頁面,然後選擇服務的連結。
架構
下圖顯示單一帳戶架構。 AWS Lambda、Amazon 彈性運算雲端 (AmazonEC2) 和 DynamoDB 都在同一個帳戶中。在這個案例中,Lambda 函數和 Amazon EC2 執行個體可以存取 DynamoDB。若要授與 DynamoDB 表的存取權,您可以在中建立以身分識別為基礎的原則IAM,也可以在 DynamoDB 中建立以資源為基礎的原則。
下圖顯示了多帳戶架構。如果其中一個資源 AWS 帳戶 需要存取不同帳戶中的 DynamoDB 表,您需要在 DynamoDB 中設定以資源為基礎的政策,以授予所需的存取權。例如,在下圖中,帳戶 A 中 DynamoDB 表的存取權會授與帳戶 B 中的 Lambda 函數,方法是使用以資源為基礎的政策。
此模式描述 Lambda 和 DynamoDB 之間的跨帳戶存取。 AWS 服務 如果兩個帳戶都設定了適當的權限,您可以對其他使用類似的步驟。例如,如果您想要在帳戶 A 中提供對 Amazon Simple Storage Service (Amazon S3) 貯體的 Lambda 函數存取權,則可以在 Amazon S3 中建立以資源為基礎的政策,並將許可新增至帳戶 B 中的 Lambda 執行角色。
工具
AWS 服務
Amazon DynamoDB 是全受管的無SQL資料庫服務,可提供快速、可預測且可擴展的效能。
AWS Identity and Access Management (IAM) 透過控制經驗證和授權使用資AWS源的人員,協助您安全地管理對資源的存取。
AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。
Code
此模式包含「其他資訊」一節中的範例程式碼,以顯示如何在帳戶 B 中設定 Lambda 函數,以寫入帳戶 A 中的 DynamoDB 表格。此程式碼僅供說明和測試用途使用。如果您要在生產環境中實作此模式,請使用程式碼做為參考,並針對您自己的環境進行自訂。
最佳實務
請遵循 DynamoDB 文件中針對以資源為基礎的原則的最佳做法。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
在帳戶 B 中建立策略。 | 此IAM原則允許對帳戶 A 中的 DynamoDB 表PutItem執行動作。
| 一般 AWS |
在帳戶 B 中建立角色。 | 帳戶 B 中的 Lambda 函數使用此IAM角色存取帳戶 A 中的 DynamoDB 表格。
如需有關建立角色的詳細資訊,請參閱IAM文件集。 | 一般 AWS |
請注意角色ARN。 |
| 一般 AWS |
任務 | 描述 | 所需技能 |
---|---|---|
建立 DynamoDB 資料表。 | 使用下列 AWS CLI 命令建立 DynamoDB 表格。
取代此程式碼範例中的下列項目:
備註:您可以使用 如需有關建立資料表的詳細資訊,請參閱 DynamoDB 文件。 | 一般 AWS |
任務 | 描述 | 所需技能 |
---|---|---|
建立 Lambda 函數以將資料寫入 DynamoDB 資料。 |
如需建立 Lambda 函數的詳細資訊,請參閱 Lambda 文件。 | 一般 AWS |
任務 | 描述 | 所需技能 |
---|---|---|
刪除資源。 | 若要避免產生與此模式中建立的資源相關聯的成本,請執行下列動作以刪除這些資源: | 一般 AWS |
故障診斷
問題 | 解決方案 |
---|---|
建立 Lambda 函數時,您會收到 | 確認您已正確輸入帳戶 A 的 AWS 區域 和識別碼。這些是 DynamoDB 表ARN的一部分。 |
相關資源
開始使用 Dynamo DB 文件
開始使用 Lambda (Lambda 文件)
針對 DynamoDB 使用以資源為基礎的政策 (DynamoDB 文件)
建立IAM原則 (IAM說明文件)
跨帳戶政策評估邏輯 (IAM文件)
IAMJSON策略元素參考 (IAM文件)
其他資訊
範例程式碼
import boto3 from datetime import datetime dynamodb_client = boto3.client('dynamodb') def lambda_handler(event, context): now = datetime.now().isoformat() data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}}) return data
附註:當 DynamoDB 用戶端具現化時,會提供 DynamoDB 表格ARN的資料表,而不是資料表名稱。這是必要的,以便 Lambda 函數在執行時連接到正確的 DynamoDB 表。