

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

# 針對 Athena 使用 CalledVia 內容索引鍵
<a name="security-iam-athena-calledvia"></a>

當[委託](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)人向 提出[請求](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request)時 AWS， 會將請求資訊 AWS 收集到評估和授權請求的*請求內容*中。您可以使用 JSON 政策的 `Condition` 元素，來比較請求內容中的鍵和您在政策中指定的鍵值。*全域條件內容索引鍵*為帶有 `aws:` 字首的條件索引鍵。

## 關於 aws:CalledVia 內容索引鍵
<a name="security-iam-athena-calledvia-the-awscalledvia-context-key"></a>

您可以使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-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 函式
<a name="security-iam-athena-calledvia-example-policy-to-add-an-optional-calledvia-context-key-for-fine-grained-access-to-a-lambda-function"></a>

Athena 要求呼叫者需具有 `lambda:InvokeFunction` 許可，以呼叫與查詢相關聯的 Lambda 函數。下列陳述式指定使用者只能從 Athena 調用 Lambda 函式。

------
#### [ JSON ]

****  

```
{
    "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 函數。

------
#### [ JSON ]

****  

```
{
    "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 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。