Linuxインスタンス上のApacheに,awsコマンドを実行するexec()を書いたPHPファイルを置き,そこへHTTPアクセスしてawsコマンドを実行したいのですが出来ません.
awsコマンドをsshで入力した場合は成功します.
PHPのコーテーションについて理解が出来ていないかもしれないです.
インスタンスにはコマンドの実行を許可するポリシーを持ったロールを割当てています.
PHP
1<?php 2 3//SGのルールを削除. 4$cmd="aws ec2 revoke-security-group-ingress --group-id sg-xxxxxxx --ip-permissions '[{\"IpProtocol\": \"tcp\", \"FromPort\": 80, \"ToPort\": 80, \"IpRanges\": [{\"CidrIp\": \"0.0.0.0/0\"}]}]'"; 5 6 echo $cmd; 7 echo "<br />"; 8var_dump(exec($cmd, $output,$return_var)); 9 10print_r( $output ); 11var_dump( $return_var ); 12 13?>
HTTPアクセスの結果: string(0) "" int(127)と表示されます.
補足情報(FW/ツールのバージョンなど)
Amazon Linux AMI release 2018.03
Server version: Apache/2.4.34 (Amazon)
追記
割り当てているEC2ロールの詳細?です.
不足していることがあれば追記致します.よろしくお願い致します.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "ec2:RevokeSecurityGroupIngress", "Resource": "arn:aws:ec2:*:*:security-group/*" } ] }
追記2
$cmdに改行が入っているご指摘を頂いたので,それを訂正してHTTPアクセスすると127→255に変わりました.
HTTPアクセスの結果 aws ec2 revoke-security-group-ingress --group-id sg-xxxxxxx --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "IpRanges": [{"CidrIp": "0.0.0.0/0"}]}]' string(0) "" Array ( ) int(255)
回答4件
あなたの回答
tips
プレビュー