はじめに
前回に引き続き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