cloudpack の がみさんです。

こんばんは

さてSQSの操作をIAMで制御してみました。 ドキュメントにSQSをIAMで制御するための説明が書かれています。

いつもありがとうIAM.

Sendだけ許可するポリシーを作成してみました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "sqs:SendMessage"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:::"
    }
  ]
}
  • CLIでテスト

CLIを使ってメッセージを送信してみます。

[default]がAWSリソースへFull Accessできるプロファイルで、 [profile sqs_user]は先ほど作成した特定のキューに送信だけ許可するプロファイルです。

CLIはprofileの切り替えが楽です。頼りすぎるとミスに繋がりそうで怖い。

  • ~/.AWS/config
[default]
aws_access_key_id = 
aws_secret_access_key = 
region = ap-northeast-1

# sqs only
[profile sqs_user]
aws_access_key_id = 
aws_secret_access_key = 
region = ap-northeast-1

メッセージを送信してみます。

うまくできました。

orenomac$ aws sqs send-message --queue-url https://ap-northeast-1.queue.amazonaws.com//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//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//myque
{
    "Messages": [
        {
            "Body": "sendMessage",
            "ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xZcjweCMUMv5LvbKbLf00e/60AOG4+NzgzUJFxdEUVoLSv39cjputHYmrLllzyQfguDHsXYYrc/lkgSbo7GppRF7/wFnPrKMo5rtilzNAQqg6Nd2AoPdRJIASgtQ33FOnhQcy7nESLxrDShj508LYuG1HNezpw3lzxDoXOSuTzGRB3cd8vvXfLDLrPWKOqMOPv2KQ6fUSOG6ZV5NSDfu4bu52HT5EmgGVz014WwlWV0Pl5UMgdCMi6WcobFkDQfhNnX5tKwSFjtyNoDyrzZZZlfiov0Zz8lg8w==",
            "MD5OfBody": "4ec122ccd434e6ae2e2e3715bb8abff3",
            "MessageId": "423ff494-5e71-4acb-ac21-e23085a7c005"
        }
    ]
}
  • fog

みんな大好きCloud APIのwrapper, fog大先生を使ってCLIでの操作をマネてみました。

#!/usr/bin/env ruby
require 'fog'

sqs = Fog::AWS::SQS.new(
  :provider => 'AWS',
  :aws_access_key_id => '',
  :aws_secret_access_key => '',
  :region => 'ap-northeast-1'
)

queue_url = 'https://ap-northeast-1.queue.amazonaws.com//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"}

AWS-SDKのドキュメントいらずで便利です。

パーフェクトRubyがほしいです

こちらの記事はなかの人(がみさん)監修のもと掲載しています。
元記事は、こちら