Check! AWS Lambda - Execution Role についてまず読んでみた

こんにちは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
======================================================

[AWS Lambda][] のドキュメンテーション「[How it Works][aws-lambda-docs]」を読んでいて、[Execution Role][aws-lambda-execution-role] に関しての項がぱっと読解できなかったので、いったん訳だけして、落とし込んでみることにしました。

[AWS Lambda]:http://aws.amazon.com/jp/lambda/ "AWS Lambda (AWS クラウドでアプリケーションをビルドして実行するプラットフォーム) | アマゾン ウェブ サービス（AWS 日本語）"
[aws-lambda-docs]:http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html "AWS Lambda: How it Works - AWS Lambda"
[aws-lambda-execution-role]:http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html#lambda-intro-execution-role "Execution Role - AWS Lambda: How it Works - AWS Lambda"
[aws-lambda-event-source]:http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html#lambda-intro-event-source "Event Source - AWS Lambda: How it Works - AWS Lambda"
[aws-lambda-invocation-role]:http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html#lambda-intro-invocation-role "Execution Role - AWS Lambda: How it Works - AWS Lambda"

AWS Lambda の仕組み - 実行ロール
======================================================

さて、[Component:Execution Role][aws-lambda-execution-role] を読みます。

> The "execution" role refers to an IAM role that grants your custom code permissions to access AWS resources it needs. AWS Lambda assumes this role while executing Lambda functions on your behalf.

&quot;この &#39;実行&#39; ロールは、あなたが作成したコードにパーミッションを与えるIAMロールを参照します。AWS Lambda が、あなたに代わり、このロールを元にLambdaファンクション(関数)を実行します。&quot;

> Each IAM role you create has two policies attached.

&quot;あなたが作るそれぞれの IAM ロールは、2つのポリシーをアタッチすることになります。&quot;

アクセスポリシー
-----------------------------------------------
> Access policy—This policy grants your function the resource permissions it needs. AWS Lambda writes logs for your function to Amazon CloudWatch, provided you give the permissions as shown in the following example policy. The policy allows permission for all log actions (logs:*) on CloudWatch logs.

&quot;アクセスポリシー - このポリシーは、あなたのファンクション(関数)に必要なリソースへのパーミッションを与えます。AWS Lambda は、あなたのファンクション(関数)のために、後述のサンプルのポリシーで示されるパーミッションを与えた[Amazon CloudWatch][]にログを出力します。このポリシーは、CloudWatch logs 上のすべてのログに関するアクション (logs:*) を許可しています。&quot;

[Amazon CloudWatch]:http://aws.amazon.com/jp/cloudwatch/ "AWS CloudWatch （クラウドおよびネットワークモニタリングサービス）| アマゾン ウェブ サービス（AWS 日本語）"

```json
{
    "Statement": [
        {
            "Action": [
                "logs:*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}
```

> You add other permissions as needed by your Lambda function. So if your function uploads an object to an Amazon S3 bucket, you grant permission for relevant actions in this policy. For a list of Amazon S3 actions, go to Specifying Permissions in a Policy in Amazon Simple Storage Service Developer Guide.

&quot;あなたは、Lambda ファンクション(関数) が必要とするほかのパーミッションを与えます。それで、もしあなたのファンクション(関数)がAmazon S3バケットにオブジェクトを格納する場合、このポリシーの中に関連するアクションのパーミッションを与えます。Amazon S3のアクションの一覧については、Amazon S3のディベロッパーガイドにある「<a href="http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html" title="Specifying Permissions in a Policy" target="_blank">Specifying Permissions in a Policy</a>」を参照してください。&quot;

トラストポリシー
-------------------------------------------------
> Trust policy—A trust policy identifies who can assume the role. The following trust policy grants AWS Lambda the permission to assume the role.

&quot;トラストポリシー - トラストポリシーは誰がそのロールを利用できるのかを識別します。後述のトラストポリシーは、AWS Lambda にそのロールを利用するためのパーミッションを与えます。&quot;

### 重要
> Important
> The user who is creating the role is passing permission to Lambda to assume this role. The user must have permission for the `iam:PassRole` action to be able to grant this permission. If an administrator user is creating this role, the user has full permissions including the `iam:PassRole`.

&quot;ロールを作ったユーザーは、このロールを利用するパーミッションをパスすることができます。このユーザは、このパーミッションを与えることができるように `iam:PassRole` というアクションのパーミッションを持っています。もし管理者ユーザーがこのロールを作った場合、そのユーザは `iam:PassRole` を含む全権限を持つことになります。&quot;

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

> For more information about IAM roles, go to [Roles (Delegation and Federation)][] in *Using IAM*.

&quot;IAMロールに関する詳細情報は、*Using IAM* の「[Roles (Delegation and Federation)][]」を参照してください。&quot;

[Roles (Delegation and Federation)]:http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html "Roles (Delegation and Federation) - AWS Identity and Access Management"


Epilogue - おわりに
======================================================
机上ではやはりしっくりこず…。理解が難しいのは、どうやら IAMロールについての知識が乏しいからのような気がしてきました…orz
このまま、対になる [Invocation Role][aws-lambda-invocation-role] も読んで、実践にて必要になる情報を確かめていこうと考えています。


----

最近の記事
=====================================================

## Check! AWS Lambda を理解しようシリーズ

- <a title="Check! AWS Lambda を理解しよう ～ ２つの動作モデル (pushモデル/pullモデル)" href="http://blog.cloudpack.jp/2014/11/29/check-aws-lambda-models-push-and-pull/" target="_blank">Check! AWS Lambda を理解しよう ～ ２つの動作モデル (pushモデル/pullモデル)</a>
- <a title="Check! AWS Lambda を理解しよう(2) ～ Lambdaファンクションとコンソール" href="http://blog.cloudpack.jp/2014/11/30/check-aws-lambda-vol002-lambda-function-console/" target="_blank">Check! AWS Lambda を理解しよう(2) ～ Lambdaファンクションとコンソール</a>

その他の記事一覧はこちらです。

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank">大平 かづみ の記事一覧</a>


[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"