8538


Cloudformationを使ってリソースの作成を行っています。  
ここで作成したリソースをIAM Roleの`Resource`に指定したいのですが、どのように指定すれば良いのでしょうか？

[code]

    "Stream": {
       "Type" : "AWS::Kinesis::Stream",
       "Properties" : {
          "ShardCount" : "1"
       }
    },
    "Queue": {
       "Type": "AWS::SQS::Queue"
    },
    "IAMRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [{
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
              "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }]
        },
        "Path": "/",
        "Policies": [{
          "PolicyName": "lambda_exec_role",
          "PolicyDocument": {
            "Version":"2012-10-17",
            "Statement":[
              {
                "Effect": "Allow",
                "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:*"
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kinesis:Get*",
                  "kinesis:List*",
                  "kinesis:Describe*"
                ],
                "Resource": "*" // <- 作成したKinesisのStreamを指定したい
              },
              {
                "Action": [
                  "sqs:GetQueueAttributes",
                  "sqs:ListQueues"
                ],
                "Effect": "Allow",
                "Resource": "*" // <- 作成したSQSのQueueを指定したい
              }
            ]
          }
        }]
      }
    }
    
[/code]

どうぞ、よろしくお願いします。


CC BY-SA 3.0
2015-03-25T14:20:08.010
8388
2018-07-08T08:23:29.447
2018-07-08T08:23:29.447
754
7737
question
aws aws-cloudformation
Cloudformationで作成したリソースを指定したIAM Roleの作成の仕方について


自己解決しました。  
KinesisのようにArnのサポートがない場合は下記のように`Fn::Join`でArnの文字列を生成することでResourceの指定ができました。

[code]

    "Resource":[{
      "Fn::Join": [":", [
        "arn:aws:kinesis",
        { "Ref" : "AWS::Region" },
        { "Ref" : "AWS::AccountId" },
        { "Fn::Join": [ "/", ["stream", { "Ref": "LambdaSqsConsumerStream" } ] ] } 
      ]]
    }]
    
[/code]

SQSのようにArnのサポートがある場合は下記のように`Fn::GetAtt`でResourceに指定ができます。

[code]

    "Resource": [
      { "Fn::GetAtt": ["LambdaSqsConsumerQueue", "Arn"] }
    ]
    
[/code]

`Fn::Join`で作成した場合はArnの文字列構成が変わった場合に対応できなさそうですが、そうそう変わることはない気がするので、これで良さそうです。


CC BY-SA 3.0
2015-03-29T14:22:23.467
8538
2015-03-29T14:22:23.467
7737
8388
answer