搭配 CalledVia 內容金鑰使用 Athena - Amazon Athena

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

搭配 CalledVia 內容金鑰使用 Athena

體向其提出要求時 AWS,會將請求資訊 AWS 收集到要求前後關聯中,以評估並授權請求。您可以使用 JSON 政策的 Condition 元素,來比較請求內容中的鍵和您在政策中指定的鍵值。全域條件內容索引鍵為帶有 aws: 字首的條件索引鍵。

aws:CalledVia 內容索引鍵

您可以使用 aws:CalledVia 全域條件內容索引鍵,以將政策中的服務與代表 IAM 主體 (使用者或角色) 提出請求的服務進行比較。當主體向某個服務發出要求時 AWS 服務,該服務可能會使用主體的認證向其他服務發出後續要求。aws:CalledVia 鍵包含代表主體提出請求的鏈結中,每個服務的排序清單。

藉由指定aws:CalledVia前後關聯索引鍵的服務主要名稱,您可以將前後關聯索引鍵設為 AWS 服務特定的。例如,您可以使用 aws:CalledVia 條件索引鍵來限制僅能有從 Athena 進行的請求。若要搭配 Athena 使用政策中的 aws:CalledVia 條件索引鍵,您需指定 Athena 服務主體名稱 athena.amazonaws.com,如下列範例所示。

... "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } ...

您可以使用 aws:CalledVia 內容索引鍵,以確保如果呼叫者從 Athena 呼叫資源,則其僅能存取一項資源 (如 Lambda 函數)。

注意

aws:CalledVia 內容索引鍵與受信任的身分傳播功能不相容。

新增選用的 CalledVia 內容金鑰,以精細存取 Lambda 函數

Athena 要求呼叫者需具有 lambda:InvokeFunction 許可,以呼叫與查詢相關聯的 Lambda 函數。以下陳述式允許對 Lambda 函數進行精細存取,讓使用者僅能使用 Athena 呼叫 Lambda 函數。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:OneAthenaLambdaFunction", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } } ] }

以下範例會說明如何在政策中加入先前的陳述式,以允許使用者執行並讀取聯合查詢。獲准執行這些動作的主體在其執行的查詢中,可以指定與聯合資料來源相關聯的 Athena 目錄。不過,除非透過 Athena 呼叫函數,否則主體無法存取相關聯的 Lambda 函數。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "athena:GetWorkGroup", "s3:PutObject", "s3:GetObject", "athena:StartQueryExecution", "s3:AbortMultipartUpload", "athena:StopQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:athena:*:111122223333:workgroup/WorkGroupName", "arn:aws:s3:::MyQueryResultsBucket/*", "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "athena:ListWorkGroups", "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::MyLambdaSpillBucket" }, { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:*:111122223333:function:OneAthenaLambdaFunction", "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction" ], "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } } ] }

如需有關 CalledVia 條件索引鍵的詳細資訊,請參閱《IAM 使用者指南》中的 AWS 全域條件內容索引鍵