LoginSignup
1
1

More than 3 years have passed since last update.

DynamoDBのチュートリアルを読み解く【2: Lambda 実行ロールを作成する】

Posted at

はじめに

前回に引き続きDynamoDBのチュートリアルを実施しました。
今日はIAM関連になります。

2.1 IAMポリシー作成(Lambda用)

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

Effect

  • 書式 : "Effect": "Allow|Deny"

ステートメントの内容を許可するか拒否するかを設定。

Principal

  • 書式 :

    • AWS アカウント : "Principal": {"AWS": "arn:aws:iam::(aws-account-id):root"} (※{"(aws-account-id)" も可)
    • IAM ユーザー : "Principal": { "AWS": "arn:aws:iam::(aws-account-id):user/(user-name)" }
    • IAM ロール : "Principal": { "AWS": "arn:aws:iam::(aws-account-id):role/(role-name)" }
    • AWS サービス : "Principal": { "Service": "(service-name).amazonaws.com" }

ポリシーの適用先を設定。
(指定できるプリンシパルは他にもたくさんあるものの、差し当たりよく使いそうなものをピックアップ)

Action

  • 書式 : "Action": "(action)" }

許可または拒否される特定のアクション(操作)。
"sts:AssumeRole"は一時的に(本来持っていない)権限を要求するアクションで、今回の場合Lambdaが一時的な権限を要求することを許可する設定になります。

2.2 IAMロール作成

aws iam create-role --role-name WooferLambdaRole \
    --path "/service-role/" \
    --assume-role-policy-document file://trust-relationship.json

--role-name

  • 書式 : --role-name (value)

ロールの名前を指定。ちなみに大文字と小文字は区別されない。

--path

  • 書式 : --path (path)

ロールへのパスを指定。例えば会社の組織構造などをディレクトリパスの形式(/aaa/bbb/cccのように)記載しておくことで、パスの値を基にアクセス許可(または拒否)のポリシーを作成したりできる。(デフォルトは"/")
あくまでユーザ側がIAMユーザの権限管理をしやすくするためのもので、AWS側では特に使用しない。
(例えばIAMグループのパス配下にIAMユーザを作成したからと言って、自動的にグループの配下になるわけではない)

--assume-role-policy-document

  • 書式 : --assume-role-policy-document file://(filepath)

エンティティに役割を引き受ける許可を与える信頼関係ポリシードキュメント。

公式リファレンスの文言を翻訳しただけだと「何のこっちゃ」となりますが、要はこのロールはjsonファイルの内容と信頼関係、つまり利用を許可しているわけです。
つまり、これによりLambdaはWooferLambdaRoleの権限も(利用の度に)取得できるようになりました。

2.3 IAMポリシー作成(WooferLambdaRole用)

オプションは2.1と(ほぼ)同じなので割愛。regionとaccountIDはそれぞれ自分の環境に置き換えています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:region:accountID:function:publishNewBark*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:region:accountID:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:ListStreams"
            ],
            "Resource": "arn:aws:dynamodb:region:accountID:table/BarkTable/stream/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

IAMポリシーをロールにアタッチ

aws iam put-role-policy --role-name WooferLambdaRole \
    --policy-name WooferLambdaRolePolicy \
    --policy-document file://role-policy.json

(ほとんどそのままですが、一応引数についても記載)

--role-name

  • 書式 : --role-name (value)

ポリシーをアタッチするIAMロール名を指定。

--policy-name

  • 書式 : --policy-name (value)

アタッチするIAMポリシー名を指定。

--policy-document

  • 書式 : --policy-document file://(filepath)

ポリシーの内容を記載したファイルを指定。

参考URL

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1