Terraformのトラブルシューティング記録

今日、Terraformの簡単な演習を作成しました。内容は非常に単純です。リソースを介してVPCを作成します。パブリックネットワークはスプリングボードであり、プライベートネットワークは内部サーバーです。設定後、スプリングボードを介して内部ネットワークサーバーにアクセスできます。 。

書かれた内容はこちらです。
https://github.com/beanxyz/task1

このコンテンツは比較的基本的なものなので、繰り返しません。この過程で、2つの興味深い問題が発生したので、それらを記録してください。

最初の問題は、terraform applyを実行すると、彼がEC2の作成を開始すると、エラーが報告されることです。

一見、このエラーはパーミッションの問題のように見えますが、私のterraformサーバーはEC2であり、操作を実行するのに十分なパーミッションをこのロールに与えました。

Error: Error launching source instance: UnauthorizedOperation: You are not authorized to perform this operation. Encoded authorization failure message: Fk7fH_uPkzcuml_wTj_44DZEfv_-c9Tu_4gEvk0dL5JfHDbDKTt0aTGoN2TWBfybTlWgHfv2CQODgLgdFjJZPbGJ6Sad-b7imYvdtCki-Bze_zg2KfoV3d25R0q1Oqg0Vxsol6w7bXW9hTw7w9A0sbXu7EH89mQb3eXBaV_s4qPbNMCJVZyba7fNjl6VYhznldORjAv8QGppk1WgXcO94vI6NVs_rfz99vuj48pVP0shVllHtiVUQFCMn_dPepk85dmBWFqfHUpRx10UaDm-IiqihGKEVKuSIVqpJCzLwbLl4VpTyX3MnnNtITBhyCsos7KTmHDqvEusvtjCwuw-jnKr9c_4uV9jI1muhWTooSa8EzUvXFaJe5UOfbYgXN898ykC7MEvqF9TUDyTH-YReWVeeAW6C7BI9xrZc50hydYABYoGOJUeUNPffuby2bvVdsoDA-4p2D4tmnld0CTiubUlLAsR2w3SP1au_96Fyypelmxu0PStdg7w2XG01YHrAgWhUg4lX5YFR_bl7YESNxOLYlTNJcHSvgZi-1vN_dMhSB7wKrihdFOS_SrK_lWzOIwJogYMTfJyxaUnzHt485OZHEIu1NKeyftFRv6C8Op1LcbM4Vv1KVx-BMgAShn2HK8rbdT4G4cqv7dMgw39YX4x27ZYOqH6b_b4s9ok_9IVvCt5r5KtGwbB7bgtE4y-WERCVDtc25L88INGqfkIG2K_Tl9SCp5OSDDaDXU0LypEzZsgr9dLuY2AYjo7kapbWXFAk-IIc4Q5MH6hx9M694gjaZRkZEZl9mbXJJ0_VgLtdxE6fzqNcfYKZsEbDvXjts-VTWKZHxo4owaWO9WZw-AMDfDz9PyiPMq2AXG2ioTkiTJeS9KDOjBNSj4cJNdVhs5ic5paQ5eiKo7rxl3QDeDRfJzPZCAlnbB32iCnGa6MadwDzb8Jo9U92GVh-LHfr7PXyjLn2KFWJ3RlqOu-tXFi_HBKCc8NR0za0SIfHzTI9NkfrB3laUfAl7X2rh-0ZOrEcoi1Wa2YWtukYQ
        status code: 403, request id: 05662e9a-893b-43d0-89d7-e0b97d4df0e3

調べてみると、AWSCLIがこのエラーメッセージをデコードするコマンドを提供していることがわかりました
https://aws.amazon.com/premiumsupport/knowledge-center/ec2-not-auth-launch/

実行後、結果は得られたものの、読みやすさは極めて悪かった。

{
    "DecodedMessage": "{\"allowed\":false,\"explicitDeny\":true,\"matchedStatements\":{\"items\":[{\"statementId\":\"\",\"effect\":\"DENY\",\"principals\":{\"items\":[{\"value\":\"AIDA2JFFJMJ7RKEOWPORC\"}]},\"principalGroups\":{\"items\":[]},\"actions\":{\"items\":[{\"value\":\"iam:AttachGroupPolicy\"},{\"value\":\"iam:AttachRolePolicy\"},{\"value\":\"iam:AttachUserPolicy\"},{\"value\":\"iam:ChangePassword\"},{\"value\":\"iam:CreateAccessKey\"},{\"value\":\"iam:CreateInstanceProfile\"},{\"value\":\"iam:CreateLoginProfile\"},{\"value\":\"iam:CreateRole\"},{\"value\":\"iam:CreateUser\"},{\"value\":\"iam:DetachUserPolicy\"},{\"value\":\"iam:PutUserPermissionsBoundary\"},{\"value\":\"iam:PutUserPolicy\"},{\"value\":\"iam:UpdateAccessKey\"},{\"value\":\"iam:UpdateAccountPasswordPolicy\"},{\"value\":\"iam:UpdateUser\"},{\"value\":\"ec2:RequestSpotInstances\"},{\"value\":\"ec2:RunInstances\"},{\"value\":\"ec2:StartInstances\"},{\"value\":\"organizations:CreateAccount\"},{\"value\":\"organizations:CreateOrganization\"},{\"value\":\"organizations:InviteAccountToOrganization\"},{\"value\":\"lambda:CreateFunction\"},{\"value\":\"lightsail:Create*\"},{\"value\":\"lightsail:Start*\"},{\"value\":\"lightsail:Delete*\"},{\"value\":\"lightsail:Update*\"},{\"value\":\"lightsail:GetInstanceAccessDetails\"},{\"value\":\"lightsail:DownloadDefaultKeyPair\"}]},\"resources\":{\"items\":[{\"value\":\"*\"}]},\"conditions\":{\"items\":[]}}]},\"failures\":{\"items\":[]},\"context\":{\"principal\":{\"id\":\"AIDA2JFFJMJ7RKEOWPORC\",\"name\":\"terraform\",\"arn\":\"arn:aws:iam::706868765311:user/terraform\"},\"action\":\"ec2:RunInstances\",\"resource\":\"arn:aws:ec2:ap-southeast-2:706868765311:instance/*\",\"conditions\":{\"items\":[{\"key\":\"ec2:InstanceMarketType\",\"values\":{\"items\":[{\"value\":\"on-demand\"}]}},{\"key\":\"aws:Resource\",\"values\":{\"items\":[{\"value\":\"instance/*\"}]}},{\"key\":\"aws:Account\",\"values\":{\"items\":[{\"value\":\"706868765311\"}]}},{\"key\":\"ec2:AvailabilityZone\",\"values\":{\"items\":[{\"value\":\"ap-southeast-2a\"}]}},{\"key\":\"ec2:ebsOptimized\",\"values\":{\"items\":[{\"value\":\"false\"}]}},{\"key\":\"ec2:IsLaunchTemplateResource\",\"values\":{\"items\":[{\"value\":\"false\"}]}},{\"key\":\"ec2:InstanceType\",\"values\":{\"items\":[{\"value\":\"t2.micro\"}]}},{\"key\":\"ec2:RootDeviceType\",\"values\":{\"items\":[{\"value\":\"ebs\"}]}},{\"key\":\"aws:Region\",\"values\":{\"items\":[{\"value\":\"ap-southeast-2\"}]}},{\"key\":\"aws:Service\",\"values\":{\"items\":[{\"value\":\"ec2\"}]}},{\"key\":\"ec2:InstanceID\",\"values\":{\"items\":[{\"value\":\"*\"}]}},{\"key\":\"aws:Type\",\"values\":{\"items\":[{\"value\":\"instance\"}]}},{\"key\":\"ec2:Tenancy\",\"values\":{\"items\":[{\"value\":\"default\"}]}},{\"key\":\"ec2:Region\",\"values\":{\"items\":[{\"value\":\"ap-southeast-2\"}]}},{\"key\":\"aws:ARN\",\"values\":{\"items\":[{\"value\":\"arn:aws:ec2:ap-southeast-2:706868765311:instance/*\"}]}}]}}}"
}

jqとsedを介して再編成

cat output.json | jq -r '.["DecodedMessage"]' |sed 's/\\"/"/g' |jq .

最終結果

Terraformのトラブルシューティング記録

よく調べた後、彼は特定のIAMアカウントを使用してアクセスしましたが、このアカウントにはEC2を作成する権限がありませんでした。これは、私がずっと前にテストを行っていたときのaws構成の手動構成であることが判明したため、彼が使用したアカウントは、私のロール権限ではなく、常にIAMユーザーです。

2番目の興味深い問題は、スプリングボードとイントラネットサーバーの両方が実行されていることです。したがって、通常の状況では、スプリングボードにSSHで接続してから、サーバーにSSHで接続する必要があります。ローカルに秘密鍵を持っています。SpringboardにSSHで接続しても問題ありません。問題は、イントラネットサーバーにSSHで接続できるように、Springboardに秘密鍵を配置する方法です。

最初は、terraformのlocal-execを使用してscpを実行し、秘密鍵をコピーすることを考えました。その後、SSHProxycommandを使用するより良い方法を見つけました。

〜/ .ssh / configをローカルで設定するだけです。

構成ファイルは次のとおりです。

[ec2-user@ip-172-31-9-120 task1]$ cat ~/.ssh/config
Host jumpbox
 Hostname 3.24.55.177
 ForwardAgent yes
 User ec2-user
Host App
 Hostname 10.0.2.53
 User ec2-user
 ProxyCommand ssh -W %h:%p jumpbox

次に、ec2-user @ Appを直接sshして、スプリングボードを介してイントラネットサーバーに接続できます。

おすすめ

転載: blog.51cto.com/beanxyz/2668521