

# Athena UDF에 대한 액세스 허용: 정책 예제
<a name="udf-iam-access"></a>

이 주제의 권한 정책 예제에서는 필요한 허용된 작업과 해당 작업이 허용되는 리소스를 보여줍니다. IAM 자격 증명에 유사한 권한 정책을 연결하기 전에 이러한 정책을 신중하게 검토하고 요구 사항에 따라 수정합니다.
+  [Example Policy to Allow an IAM Principal to Run and Return Queries that Contain an Athena UDF Statement](#udf-using-iam) 
+  [Example Policy to Allow an IAM Principal to Create an Athena UDF](#udf-creating-iam) 

**Example - IAM 보안 주체가 Athena UDF 문을 포함한 쿼리를 실행하고 결과를 반환하도록 허용합니다.**  
다음 자격 증명 기반 권한 정책은 사용자 또는 다른 IAM 보안 주체가 Athena UDF 문을 사용하는 쿼리를 실행하는 데 필요한 작업을 허용합니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "lambda:InvokeFunction",
                "athena:GetQueryResults",
                "s3:ListMultipartUploadParts",
                "athena:GetWorkGroup",
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload",
                "athena:StopQueryExecution",
                "athena:GetQueryExecution",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:athena:*:MyAWSAcctId:workgroup/MyAthenaWorkGroup",
                "arn:aws:s3:::MyQueryResultsBucket/*",
                "arn:aws:lambda:*:MyAWSAcctId:function:OneAthenaLambdaFunction",
                "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "athena:ListWorkGroups",
            "Resource": "*"
        }
    ]
}
```


**권한에 대한 설명**  

| 허용된 작업 | 설명 | 
| --- | --- | 
|  <pre>"athena:StartQueryExecution",<br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StopQueryExecution",<br /> "athena:GetQueryExecution",<br /></pre>  |  `MyAthenaWorkGroup` 작업 그룹에서 쿼리를 실행하는 데 필요한 Athena 권한입니다.  | 
|  <pre>"s3:PutObject",<br />"s3:GetObject",<br />"s3:AbortMultipartUpload"</pre>  |  `s3:PutObject` 및 `s3:AbortMultipartUpload`는 `arn:aws:s3:::MyQueryResultsBucket/*` 리소스 식별자에 지정된 대로 쿼리 결과 버킷의 모든 하위 폴더에 쿼리 결과를 작성하도록 허용합니다. 여기서 *MyQueryResultsBucket*은 Athena 쿼리 결과 버킷입니다. 자세한 내용은 [쿼리 결과 및 최근 쿼리 작업](querying.md) 단원을 참조하세요. `s3:GetObject`는 `arn:aws:s3:::MyQueryResultsBucket`으로 지정된 리소스에 대한 쿼리 결과 및 쿼리 기록을 읽을 수 있도록 허용합니다. 여기서 *MyQueryResultsBucket*은 Athena 쿼리 결과 버킷입니다. 자세한 내용은 [쿼리 결과 및 최근 쿼리 작업](querying.md) 단원을 참조하세요. 또한 `s3:GetObject`는 `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"`로 지정된 리소스에서 읽을 수 있도록 허용합니다. 여기서 *MyLambdaSpillPrefix*는 호출되는 Lambda 함수의 구성에서 지정됩니다.  | 
|  <pre>"lambda:InvokeFunction"</pre>  | 쿼리가 Resource 블록에 지정된 AWS Lambda 함수를 호출할 수 있습니다. arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction을 예로 들 수 있습니다. 여기서 MyAthenaLambdaFunction은 호출할 Lambda 함수의 이름을 지정합니다. 예제와 같이 여러 함수를 지정할 수 있습니다. | 

**Example - IAM 보안 주체가 Athena UDF를 생성할 수 있도록 허용합니다.**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:ListVersionsByFunction",
                "iam:CreateRole",
                "lambda:GetFunctionConfiguration",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "lambda:PutFunctionConcurrency",
                "iam:PassRole",
                "iam:DetachRolePolicy",
                "lambda:ListTags",
                "iam:ListAttachedRolePolicies",
                "iam:DeleteRolePolicy",
                "lambda:DeleteFunction",
                "lambda:GetAlias",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:GetPolicy",
                "lambda:InvokeFunction",
                "lambda:GetFunction",
                "lambda:ListAliases",
                "lambda:UpdateFunctionConfiguration",
                "iam:DeleteRole",
                "lambda:UpdateFunctionCode",
                "s3:GetObject",
                "lambda:AddPermission",
                "iam:UpdateRole",
                "lambda:DeleteFunctionConcurrency",
                "lambda:RemovePermission",
                "iam:GetRolePolicy",
                "lambda:GetPolicy"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:MyAthenaLambdaFunctionsPrefix*",
                "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*",
                "arn:aws:iam::*:role/RoleName",
                "arn:aws:iam::111122223333:policy/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateUploadBucket",
                "cloudformation:DescribeStackDriftDetectionStatus",
                "cloudformation:ListExports",
                "cloudformation:ListStacks",
                "cloudformation:ListImports",
                "lambda:ListFunctions",
                "iam:ListRoles",
                "lambda:GetAccountSettings",
                "ec2:DescribeSecurityGroups",
                "cloudformation:EstimateTemplateCost",
                "ec2:DescribeVpcs",
                "lambda:ListEventSourceMappings",
                "cloudformation:DescribeAccountLimits",
                "ec2:DescribeSubnets",
                "cloudformation:CreateStackSet",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "cloudformation:*",
            "Resource": [
                "arn:aws:cloudformation:*:111122223333:stack/aws-serverless-repository-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:111122223333:stack/serverlessrepo-MyCFStackPrefix*/*",
                "arn:aws:cloudformation:*:*:transform/Serverless-*",
                "arn:aws:cloudformation:*:111122223333:stackset/aws-serverless-repository-MyCFStackPrefix*:*",
                "arn:aws:cloudformation:*:111122223333:stackset/serverlessrepo-MyCFStackPrefix*:*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "serverlessrepo:*",
            "Resource": "arn:aws:serverlessrepo:*:*:applications/*"
        },
        {
            "Sid": "ECR",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/*"
        }
    ]
}
```


**권한에 대한 설명**  

| 허용된 작업 | 설명 | 
| --- | --- | 
|  <pre>"lambda:CreateFunction",<br />"lambda:ListVersionsByFunction",<br />"lambda:GetFunctionConfiguration",<br />"lambda:PutFunctionConcurrency",<br />"lambda:ListTags",<br />"lambda:DeleteFunction",<br />"lambda:GetAlias",<br />"lambda:InvokeFunction",<br />"lambda:GetFunction",<br />"lambda:ListAliases",<br />"lambda:UpdateFunctionConfiguration",<br />"lambda:UpdateFunctionCode",<br />"lambda:AddPermission",<br />"lambda:DeleteFunctionConcurrency",<br />"lambda:RemovePermission",<br />"lambda:GetPolicy"<br />"lambda:GetAccountSettings",<br />"lambda:ListFunctions",<br />"lambda:ListEventSourceMappings",<br /></pre>  |  리소스로 나열된 Lambda 함수의 생성 및 관리를 허용합니다. 이 예제에서는 이름 접두사가 리소스 식별자 `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*`에 사용됩니다. 여기서 *MyAthenaLambdaFunctionsPrefix*는 Lambda 함수 그룹의 이름에 사용되는 공유 접두사이므로 리소스로 개별적으로 지정할 필요가 없습니다. 하나 이상의 Lambda 함수 리소스를 지정할 수 있습니다.  | 
|  <pre>"s3:GetObject"</pre>  | 리소스 식별자 arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/\$1에 지정된 대로 AWS Serverless Application Repository이 요구하는 버킷을 읽을 수 있습니다. | 
|  <pre>"cloudformation:*"</pre>  |  *MyCFStackPrefix* 리소스에 의해 지정된 CloudFormation 스택의 생성 및 관리를 허용합니다. 이러한 스택 및 스택 세트는 AWS Serverless Application Repository이 커넥터와 UDF를 배포하는 방법입니다.  | 
|  <pre>"serverlessrepo:*"</pre>  | AWS Serverless Application Repository에서 리소스 식별자 arn:aws:serverlessrepo:\$1:\$1:applications/\$1로 지정된 애플리케이션을 검색하고 보고 게시 및 업데이트할 수 있습니다. | 