我要我的 AWS Lambda 函數存取我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。
簡短說明
若要讓 Lambda 函數存取同一個 AWS 帳戶中的 Amazon S3 儲存貯體,請完成下列步驟:
- 為同時授予 S3 儲存貯體存取權的 Lambda 函數建立 AWS Identity and Access Management (IAM) 角色。
- 將 IAM 角色設定為 Lambda 函數執行角色。
- 確認 S3 儲存貯體政策未明確拒絕對 Lambda 函數或其執行角色的存取權。
**重要事項:**如果您的 S3 儲存貯體和功能 IAM 角色位於不同的帳戶中,則您還必須授予 S3 儲存貯體政策所需的許可。如需詳細資訊,請參閱我如何提供對 Amazon S3 儲存貯體中物件的跨帳戶存取權?
解決方法
為同時授予 S3 儲存貯體存取權的 Lambda 函數建立 IAM 角色
若要為同時授予 S3 儲存貯體存取權的 Lambda 函數建立 IAM 角色,請完成下列步驟:
-
在 IAM 主控台中建立執行角色。
-
從 IAM 角色清單中,選擇您建立的角色。
-
對於允許 Lambda 擔任執行角色的信任政策,請將 lambda.amazonaws.com 新增為授信服務。選擇信任關係索引標籤,然後選擇編輯信任政策。
-
將政策中的變數取代為下列變數:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
選擇更新政策。
-
在許可索引標籤中,選擇新增內嵌政策。
-
選擇 JSON 索引標籤。
-
輸入以資源為基礎的 IAM 政策,以授予 S3 儲存貯體的存取權。如需詳細資訊,請參閱為 Lambda 使用以資源為基礎的政策。下列 IAM 政策範例授予對具有 Get 許可的特定 Amazon S3 儲存貯體的存取權。若要存取 Amazon S3 儲存貯體內的物件、指定正確的路徑,或使用萬用字元 (「*」)。如需詳細資訊,請參閱撰寫 IAM 政策:如何授予 Amazon S3 儲存貯體存取權。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::EXAMPLE-BUCKET/*"
]
}
]
}
**注意:**將 "arn:aws:s3:::EXAMPLE-BUCKET" 取代為 S3 儲存貯體的 ARN。如果物件使用 AWS Key Management Service (AWS KMS) 金鑰加密,則您必須提供其他許可。如需詳細資訊,請參閱我的 Amazon S3 儲存貯體具備使用自訂 AWS KMS 金鑰的預設加密。如何允許使用者從儲存貯體下載及上傳?
-
選擇檢閱政策。
-
對於名稱,請輸入政策名稱。
-
選擇建立政策。
將 IAM 角色設定為 Lambda 函數執行角色
若要將 IAM 角色設定為 Lambda 函數執行角色,請完成下列步驟:
- 開啟 Lambda 主控台。
- 選擇您的 Lambda 函數。
- 在執行角色下,針對現有角色選取您建立的 IAM 角色。
- 選擇儲存。
確認 S3 儲存貯體政策未明確拒絕對 Lambda 函數或其執行角色的存取權
若要檢閱或編輯 S3 儲存貯體政策,請遵循使用 Amazon S3 主控台新增儲存貯體政策中的指示。
下列 IAM 政策範例會將 Lambda 執行角色跨帳戶存取權授予 S3 儲存貯體:
{
"Id": "ExamplePolicy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::EXAMPLE-BUCKET/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
]
}
}
]
}
**注意:**將 "arn:aws:s3:::EXAMPLE-BUCKET" 取代為 S3 儲存貯體的 ARN,並且將 "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" 取代為 Lambda 執行角色的 ARN。
相關資訊
AWS 政策產生器