LoginSignup
10
1

More than 3 years have passed since last update.

Lambdaポリシーが変わった部分を見てみる

Posted at

はじめに

下記のようにLambdaに関するポリシーが変更されるとのことで、どう変わるのか見てみました
名前としては _ が追加されているみたいで、頑張ってるなぁって思いますね

  • Before
    • AWSLambdaFullAccess
    • AWSLambdaReadOnlyAccess
  • After
    • AWSLambda_FullAccess
    • AWSLambda_ReadOnlyAccess

ポリシーの確認

とりあえずCLIから落としてみたかったので下記で叩いてテキストまで落としました

#!/bin/bash

function get_policy_statement () {
  POLICY_NAME=$1
  POLICY_ARN=arn:aws:iam::aws:policy/${POLICY_NAME}
  POLICY_VERSION=$(aws iam get-policy --policy-arn ${POLICY_ARN} \
                    --query 'Policy.DefaultVersionId' \
                    --output text)
  aws iam get-policy-version --policy-arn ${POLICY_ARN} \
    --version-id "${POLICY_VERSION}" \
    | jq .PolicyVersion.Document.Statement[0].Action > ${POLICY_NAME}.txt
}

get_policy_statement AWSLambdaFullAccess
get_policy_statement AWSLambdaReadOnlyAccess
get_policy_statement AWSLambda_FullAccess
get_policy_statement AWSLambda_ReadOnlyAccess

jq .PolicyVersion.Document.Statement[0].Action
の部分だけ注意が必要で、もともとステートメントが1個だけだったのが、2−3個になってました
ただ、リソースでフィルタしてないものは最初にあって差分が見たいのはそこだけだったので、絞りました

ポリシー変更の意図

基本的に、Lambdaにつけるポリシーと他のサービスのポリシーでつけるもので分離してほしいという意図が感じ取れました
Lambdaから他サービスを触りたいときは、このポリシーで補うのではなく、例えばSNSを利用したい場合はSNSのポリシーをロールに付与してから使うというようになるのかなと思いました
また、Lambda自身の身の回りの世話もある程度はやらせたいので、ログに対するものや他サービスへのパスなどが追加されたみたいでした

ポリシーの差分

元々あったリソースの絞ってない部分のメイン部分と、それ以外の部分とで分けて見てみます

メイン部分

AWSLambdaFullAccess vs AWSLambda_FullAccess

削除された部分

cloudformation:DescribeChangeSet
cloudformation:DescribeStackResources
cloudformation:GetTemplate
cloudwatch:Describe*
cognito-identity:ListIdentityPools
cognito-sync:GetCognitoEvents
dynamodb:BatchGetItem
dynamodb:DescribeStream
dynamodb:DescribeTable
dynamodb:GetItem
dynamodb:ListStreams
dynamodb:ListTables
dynamodb:Query
dynamodb:Scan
events:Describe*
events:List*
iot:DescribeEndpoint
iot:GetTopicRule
iot:ListPolicies
iot:ListThings
iot:ListTopicRules
kinesis:DescribeStream
kinesis:ListStreams
kms:ListAliases
logs:DescribeLogGroups
logs:DescribeLogStreams
logs:DescribeMetricFilters
logs:GetLogEvents
s3:Get*
s3:List*
sns:ListSubscriptions
sns:ListSubscriptionsByTopic
sns:ListTopics
sqs:ListQueues

追加されたもの

kms:ListAliases
states:DescribeStateMachine
states:ListStateMachines
xray:GetTraceSummaries
xray:BatchGetTraces

権限が絞られたもの

cloudwatch:Get* → cloudwatch:GetMetricData
cloudwatch:List* → cloudwatch:ListMetrics

AWSLambdaReadOnlyAccess vs AWSLambda_ReadOnlyAccess

削除されたもの

cloudformation:DescribeChangeSet
cloudformation:DescribeStackResources
cloudformation:GetTemplate
cognito-identity:ListIdentityPools
cognito-sync:GetCognitoEvents
cognito-sync:SetCognitoEvents
dynamodb:*
events:*
iam:PassRole
iot:AttachPrincipalPolicy
iot:AttachThingPrincipal
iot:CreateKeysAndCertificate
iot:CreatePolicy
iot:CreateThing
iot:CreateTopicRule
iot:DescribeEndpoint
iot:GetTopicRule
iot:ListPolicies
iot:ListThings
iot:ListTopicRules
iot:ReplaceTopicRule
kinesis:DescribeStream
kinesis:ListStreams
kinesis:PutRecord
kms:ListAliases
s3:*
sns:ListSubscriptions
sns:ListSubscriptionsByTopic
sns:ListTopics
sns:Publish
sns:Subscribe
sns:Unsubscribe
sqs:ListQueues
sqs:SendMessage

追加されたもの

kms:ListAliases
states:DescribeStateMachine
states:ListStateMachines

権限が絞られたもの

cloudwatch:* → cloudwatch:GetMetricData "cloudwatch:ListMetrics
logs:*     →  logs:DescribeLogGroups
xray:PutTelemetryRecords/xray:PutTraceSegments → xray:GetTraceSummaries/xray:BatchGetTraces (Put->Get)

リソースで絞ってる部分

AWSLambda_FullAccess

{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "lambda.amazonaws.com"
        }
    }
},
{
    "Effect": "Allow",
    "Action": [
        "logs:DescribeLogStreams",
        "logs:GetLogEvents",
        "logs:FilterLogEvents"
    ],
    "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/*"
}

AWSLambda_ReadOnlyAccess

{
    "Effect": "Allow",
    "Action": [
        "logs:DescribeLogStreams",
        "logs:GetLogEvents",
        "logs:FilterLogEvents"
    ],
    "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/*"
}

あとから修正された匂いのするポリシー

最初の方に言いましたが、名前に _ が入ってる
苦肉の策で修正してるんだなぁという感じがあったので、どれだけあるのか数えてみました

> aws iam list-policies | jq .Policies[].PolicyName | wc -l
     809
> aws iam list-policies | jq .Policies[].PolicyName | grep "_" | wc -l
      24

24/809でした。意外と3%ほどありました
24/ ってくると365がきそうで嫌な言葉ですね
現場からは以上です

10
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
10
1