SQSをIAMで制御してfogも使ってみる
こんばんは私です。
さてSQSの操作をIAMで制御してみました。 ドキュメントにSQSをIAMで制御するための説明が書かれています。
いつもありがとうIAM.
Sendだけ許可するポリシーを作成してみました。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:SendMessage" ], "Effect": "Allow", "Resource": "arn:aws:sqs:<Region>:<AccountNumber>:<QueueName>" } ] }
[default]がAWSリソースへFull Accessできるプロファイルで、 [profile sqs_user]は先ほど作成した特定のキューに送信だけ許可するプロファイルです。
AWS CLIはprofileの切り替えが楽です。頼りすぎるとミスに繋がりそうで怖い。
- ~/.aws/config
[default] aws_access_key_id = <Access_key> aws_secret_access_key = <Securet_access_key> region = ap-northeast-1 # sqs only [profile sqs_user] aws_access_key_id = <Access_key> aws_secret_access_key = <Securet_access_key> region = ap-northeast-1
メッセージを送信してみます。
うまくできました。
orenomac$ aws sqs send-message --queue-url https://ap-northeast-1.queue.amazonaws.com/<AccountNumber>/myque --message-body sendMessage --profile sqs_user { "MD5OfMessageBody": "4ec122ccd434e6ae2e2e3715bb8abff3", "MessageId": "423ff494-5e71-4acb-ac21-e23085a7c005" }
さて、受信してみます・・おおっとPermission Denied.やったね。
orenomac$ aws sqs receive-message --queue-url https://ap-northeast-1.queue.amazonaws.com/<AccountNumber>/myque --profile sqs_user A client error (AccessDenied) occurred when calling the ReceiveMessage operation: Access to the resource https://ap-northeast-1.queue.amazonaws.com/ is denied.
デフォルトプロファイル(Full Access)では受信できました。アイアムの効果はぜつだいだ!
orenomac$ aws sqs receive-message --queue-url https://ap-northeast-1.queue.amazonaws.com/<AccountNumber>/myque { "Messages": [ { "Body": "sendMessage", "ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xZcjweCMUMv5LvbKbLf00e/60AOG4+NzgzUJFxdEUVoLSv39cjputHYmrLllzyQfguDHsXYYrc/lkgSbo7GppRF7/wFnPrKMo5rtilzNAQqg6Nd2AoPdRJIASgtQ33FOnhQcy7nESLxrDShj508LYuG1HNezpw3lzxDoXOSuTzGRB3cd8vvXfLDLrPWKOqMOPv2KQ6fUSOG6ZV5NSDfu4bu52HT5EmgGVz014WwlWV0Pl5UMgdCMi6WcobFkDQfhNnX5tKwSFjtyNoDyrzZZZlfiov0Zz8lg8w==", "MD5OfBody": "4ec122ccd434e6ae2e2e3715bb8abff3", "MessageId": "423ff494-5e71-4acb-ac21-e23085a7c005" } ] }
- fog
みんな大好きCloud APIのwrapper, fog大先生を使ってAWS CLIでの操作をマネてみました。
#!/usr/bin/env ruby require 'fog' sqs = Fog::AWS::SQS.new( :provider => 'AWS', :aws_access_key_id => '<access_key_id>', :aws_secret_access_key => '<secret_access_key>', :region => 'ap-northeast-1' ) queue_url = 'https://ap-northeast-1.queue.amazonaws.com/<AccountNumber>/myque' message = 'hello fog, AWS provider.' result = sqs.send_message(queue_url,message) message = sqs.receive_message(queue_url) puts message.body["Message"]
orenomac$ bundle exec ./sqs.rb {"Attributes"=>{"SenderId"=>"AIDAIZGRI44CUN5UZ4SMS", "ApproximateFirstReceiveTimestamp"=>2014-04-15 02:30:24 +0900, "ApproximateReceiveCount"=>1, "SentTimestamp"=>2014-04-15 02:15:52 +0900}, "Body"=>"hello fog, AWS provider.", "ReceiptHandle"=>"cOJv9qrD9XLVlpsfwYn3xZcjweCMUMv5ijGUABUX80L2hruWsV8UBBpwNhKDnKUDXkwVrAbGYCAmrLllzyQfgr865b19WyWSuFpXfGkSNMDYEvhKpm1cl2UrMLWsMhG0e9koDBHVH1A0owwIOAGeGFVC5ECykfLndAxfAL1B4HS/pP6xaI7yOpMmJceYJ4B7v5XXJYyKG7cPHdQ1At4yanyyBn6SvtNLXO2awX2Q0jvWFRpAD+DgbE9nCZgiVBIBzPr1ii9F9a7/Impl/qI3JafSGhIQViZgCd+SKXyekEWyFhyrwDrmUg==", "MD5OfBody"=>"81334f7b9c29911a7761fed647886fc4", "MessageId"=>"515dc6e2-0dbb-4e11-943b-8cfbf4b94682"}
パーフェクトRubyがほしいです