0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

APIGatewayでCloudwatchログを有効化した時の権限エラー解消方法

Posted at

1. 概要

TerraformでAPIGatewayを実装していましたが、Cloudwatchログを有効化したら、権限エラーが発生して、ちょっと躓きました。

Error: updating API Gateway Stage failed: BadRequestException: CloudWatch Logs role ARN must be set in account settings to enable logging

上記のエラーを解消する設定を記載していきます。

2. 権限設定

やることは単純でCloudwatchアクセス用のIAMポリシーとロール作成と作成したロールをAPI Gatewayに適用します。あとはログ設定時の依存関係を設定すれば、エラーが解決します。

Cloudwatchへのログ出力するためのIAMロールとポリシーを作成します。

main.tf
#API Gateway用ロールに設定する信頼されたエンティティ
data "aws_iam_policy_document" "apigateway_iam_policy_dc"{
    statement {
        effect = "Allow"
        principals {
            type = "Service"
            identifiers = ["apigateway.amazonaws.com"]
        }
        actions = ["sts:AssumeRole"]
    }
}

#API Gateway用のロール作成
resource "aws_iam_role" "apigateway_iam_role"{
    name = "apigateway_iam_role"
    assume_role_policy = data.aws_iam_policy_document.apigateway_iam_policy_dc.json
}

#Cloudwatchアクセス用の許可権限作成
data "aws_iam_policy_document" "cw_apigateway_policy_dc"{
    statement{
        effect = "Allow"
        actions=[
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams",
            "logs:PutLogEvents",
            "logs:GetLogEvents",
            "logs:FilterLogEvents"
        ]
        resources = ["*"]
    }
}

#Cloudwatchアクセス用の許可権限ポリシー作成
resource "aws_iam_policy" "cw_apigateway_policy"{
    name = "cw_apigateway_policy"
    path = "/"
    policy = data.aws_iam_policy_document.cw_apigateway_policy_dc.json
}

#Cloudwatchアクセス用の許可権限ポリシーをロールにアタッチ
resource "aws_iam_policy_attachment" "cw_apigateway_policy_attach"{
    name = "cw_apigateway_policy_attach"
    policy_arn = aws_iam_policy.cw_apigateway_policy.arn
    roles = [
        aws_iam_role.apigateway_iam_role.name
    ]
}

次に、作成したロールをAPIGatewayに適用します。

main.tf
resource "aws_api_gateway_account" "apigateway_account"{
        #上記で作成した、ロールを指定
        cloudwatch_role_arn = aws_iam_role.apigateway_iam_role.arn
}

最後にAPI Gatewayのログ出力設定をします。

main.tf
resource "aws_api_gateway_method_settings" "apigateway_setting" {
    #あらかじめ作成しておいたREST APIを指定
    rest_api_id = aws_api_gateway_rest_api.apigateway.id
    #あらかじめ作成しておいたステージを指定
    stage_name = aws_api_gateway_stage.apigateway_stage.stage_name
    method_path = "*/*"
    #ログ設定
    settings {
        metrics_enabled = true
        logging_level   = "ERROR"
    }
    #依存関係
    depends_on = [
        aws_api_gateway_account.apigateway_account
    ]
}

depends_onは依存関係を示し、指定されたリソース作成後に作成することが出来ます。アカウント設定が先にしないと、権限不足ではじかれるため、依存関係設定を入れておきます。

3. まとめ

権限設定後、何故か権限不足エラーが発生して、躓いていましたが、依存関係入れたら解決しました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?