Athena와 CalledVia 컨텍스트 키 사용 - Amazon Athena

Athena와 CalledVia 컨텍스트 키 사용

보안 주체가 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 컨텍스트 키는 신뢰할 수 있는 ID 전파 기능과 호환되지 않습니다.

Lambda 함수에 대한 세분화된 액세스를 위해 CalledVia 컨텍스트 키 추가(선택 사항)

Athena에서는 쿼리와 연결된 Lambda 함수를 호출하려면 발신자에게 lambda:InvokeFunction 권한이 있어야 합니다. 다음 문을 사용하면 사용자가 Athena만을 사용하여 Lambda 함수를 호출할 수 있도록 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 글로벌 조건 컨텍스트 키를 참조하세요.