

# Permitir acesso a UDFs do Athena: exemplos de políticas
<a name="udf-iam-access"></a>

Os exemplos de política de permissão neste tópico demonstram as ações permitidas necessárias e os recursos para os quais são permitidas. Examine essas políticas com atenção e modifique-as de acordo com seus requisitos antes de anexar políticas de permissões semelhantes às identidades do 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 : permitir que uma entidade principal do IAM execute e retorne consultas com uma instrução de UDF do Athena**  
A seguinte política de permissões baseada em identidade permite ações que um usuário ou outro principal do IAM precisa para executar consultas que usam instruções de UDF do Athena.  

```
{
    "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": "*"
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <pre>"athena:StartQueryExecution",<br /> "athena:GetQueryResults",<br /> "athena:GetWorkGroup",<br /> "athena:StopQueryExecution",<br /> "athena:GetQueryExecution",<br /></pre>  |  Permissões do Athena necessárias para executar consultas no grupo de trabalho `MyAthenaWorkGroup`.  | 
|  <pre>"s3:PutObject",<br />"s3:GetObject",<br />"s3:AbortMultipartUpload"</pre>  |  `s3:PutObject` e `s3:AbortMultipartUpload` permitem gravar os resultados de consultas em todas as subpastas do bucket de resultados de consultas, conforme especificado pelo identificador do recurso `arn:aws:s3:::MyQueryResultsBucket/*`, em que *MyQueryResultsBucket* é o bucket de resultados de consultas do Athena. Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md). `s3:GetObject` permite ler os resultados e o histórico de consultas para o recurso especificado como `arn:aws:s3:::MyQueryResultsBucket`, em que *MyQueryResultsBucket* é o bucket de resultados de consultas do Athena. Para obter mais informações, consulte [Trabalhar com resultados de consultas e consultas recentes](querying.md). `s3:GetObject` também permite ler o recurso especificado como `"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"`, em que *MyLambdaSpillPrefix* foi especificado na configuração da(s) função(ões) do Lambda invocada(s).  | 
|  <pre>"lambda:InvokeFunction"</pre>  | Permite que as consultas chamem as funções do AWS Lambda especificadas no bloco Resource. Por exemplo, arn:aws:lambda:\$1:MyAWSAcctId:function:MyAthenaLambdaFunction, em que MyAthenaLambdaFunction especifica o nome da função do Lambda que será invocada. Várias funções podem ser especificadas conforme mostrado no exemplo. | 

**Example : permitir que uma entidade principal do IAM crie uma UDF do Athena**  

```
{
    "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/*"
        }
    ]
}
```


**Explicação de permissões**  

| Ações permitidas | Explicação | 
| --- | --- | 
|  <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>  |  Permita a criação e gerenciamento de funções do Lambda listadas como recursos. No exemplo, um prefixo de nome foi usado no identificador do recurso `arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*`, em que *MyAthenaLambdaFunctionsPrefix* é um prefixo compartilhado usado no nome do grupo de funções do Lambda de modo que elas não tenham de ser especificadas individualmente como recursos. É possível especificar um ou mais recursos de função do Lambda.  | 
|  <pre>"s3:GetObject"</pre>  | Permite a leitura de um bucket de que o AWS Serverless Application Repository precisa conforme especificado pelo identificador de recurso arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/\$1. | 
|  <pre>"cloudformation:*"</pre>  |  Permite a criação e o gerenciamento de pilhas especificadas do CloudFormation pelo recurso *MyCFStackPrefix*. Essas pilhas e conjuntos de pilhas são como o AWS Serverless Application Repository implanta conectores e UDFs.  | 
|  <pre>"serverlessrepo:*"</pre>  | Permite pesquisar, exibir, publicar e atualizar aplicativos no AWS Serverless Application Repository, especificados pelo identificador de recurso arn:aws:serverlessrepo:\$1:\$1:applications/\$1. | 