

# Athena UDF へのアクセスを許可する: ポリシーの例
<a name="udf-iam-access"></a>

このトピックのアクセス許可ポリシーの例は、使用可能な必須アクションとそれらのアクションが許可されるリソースを示しています。同様のアクセス許可ポリシーを IAM ID にアタッチする前に、これらのポリシーを慎重に検討し、要件に従って変更してください。
+  [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)」を参照してください。<br />`s3:GetObject` は、`arn:aws:s3:::{{MyQueryResultsBucket}}` として指定されたリソースのクエリ結果とクエリ履歴の読み取りを許可します。ここでの {{MyQueryResultsBucket}} は、Athena クエリ結果バケットです。詳細については、「[クエリ結果と最近のクエリを操作する](querying.md)」を参照してください。<br />`s3:GetObject` も、`"arn:aws:s3:::{{MyLambdaSpillBucket}}/{{MyLambdaSpillPrefix}}*"` として指定されたリソースからの読み取りを許可します。ここでの {{MyLambdaSpillPrefix}} は、呼び出される Lambda 関数の設定で指定されます。 | 
|  <pre>"lambda:InvokeFunction"</pre>  | クエリが Resource ブロックで指定された AWS Lambda 関数を呼び出すことを許可します。例えば、{{MyAthenaLambdaFunction}} が呼び出される Lambda 関数の名前を指定する arn:aws:lambda:\*:{{MyAWSAcctId}}:function:{{MyAthenaLambdaFunction}} などです。例に示すように、複数の関数を指定できます。 | 

**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 関数をリソースとして個別に指定する必要がなくなります。1 つ、または複数の Lambda 関数リソースを指定できます。 | 
|  <pre>"s3:GetObject"</pre>  | リソース識別子 AWS Serverless Application Repository で指定された、arn:aws:s3:::awsserverlessrepo-changesets-{{1iiv3xa62ln3m}}/\* が必要なバケットの読み取りを許可します。 | 
|  <pre>"cloudformation:*"</pre>  | リソース {{MyCFStackPrefix}} によって指定されている CloudFormation スタックの作成と管理を許可します。これらのスタックおよびスタックセットは、AWS Serverless Application Repository がコネクタと UDF をデプロイする方法です。 | 
|  <pre>"serverlessrepo:*"</pre>  | リソース ID AWS Serverless Application Repository によって指定された arn:aws:serverlessrepo:\*:\*:applications/\* でアプリケーションの検索、表示、公開、および更新を許可します。 | 