Exemplo de políticas de permissões do IAM para permitir funções definidas pelo usuário (UDF) do Amazon Athena - Amazon Athena

Exemplo de políticas de permissões do IAM para permitir funções definidas pelo usuário (UDF) do Amazon Athena

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.

exemplo
: 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
"athena:StartQueryExecution", "athena:GetQueryResults", "athena:GetWorkGroup", "athena:StopQueryExecution", "athena:GetQueryExecution",

Permissões do Athena necessárias para executar consultas no grupo de trabalho MyAthenaWorkGroup.

"s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload"

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 ter mais informações, consulte Trabalhar com resultados de consultas e consultas recentes.

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 ter mais informações, consulte Trabalhar com resultados de consultas e consultas recentes.

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).

"lambda:InvokeFunction"
Permite que as consultas chamem as funções do AWS Lambda especificadas no bloco Resource. Por exemplo, arn:aws:lambda:*: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.
exemplo
: 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/*" } ] }
Explicação de permissões
Ações permitidas Explicação
"lambda:CreateFunction", "lambda:ListVersionsByFunction", "lambda:GetFunctionConfiguration", "lambda:PutFunctionConcurrency", "lambda:ListTags", "lambda:DeleteFunction", "lambda:GetAlias", "lambda:InvokeFunction", "lambda:GetFunction", "lambda:ListAliases", "lambda:UpdateFunctionConfiguration", "lambda:UpdateFunctionCode", "lambda:AddPermission", "lambda:DeleteFunctionConcurrency", "lambda:RemovePermission", "lambda:GetPolicy" "lambda:GetAccountSettings", "lambda:ListFunctions", "lambda:ListEventSourceMappings",

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.

"s3:GetObject"
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/*.
"cloudformation:*"

Permite a criação e o gerenciamento de pilhas especificadas do AWS CloudFormation pelo recurso MyCFStackPrefix. Essas pilhas e conjuntos de pilhas são como o AWS Serverless Application Repository implanta conectores e UDFs.

"serverlessrepo:*"
Permite pesquisar, exibir, publicar e atualizar aplicativos no AWS Serverless Application Repository, especificados pelo identificador de recurso arn:aws:serverlessrepo:*:*:applications/*.