概要
Github の Webhooks & services
のところで Amazon SQS
を設定する際に最小限の権限だけ持った IAM の Aws access key
を使いたいと思って設定したのですが全然うまく行かなかったので解決までの経緯を書きます。
タイトルの Github の Service と言うのはこの画面で設定するやつです。
TL; DR
IAM のポリシーに sqs:GetQueueUrl
と sqs:SendMessage
のアクションの許可が必要。 ドキュメントには sqs:SendMessage
だけで良いって書いてあるけどね
事の起こり
リポジトリに Amazon SQS
の設定しようとして Install Notes
(下記画像) には SendMessage
の権限が必要とあったのでその権限だけの IAM を作って設定しました。
しかしテストしてみると SQS が配信されませんでした。 試しにここで設定した IAM ユーザーを使って自分のマシンから aws
コマンドを買って SQS のメッセージを発行してみるとうまく動きました。
何がおかしいかよくわからないので調査することにしました。
まずはすべてアクションを許可してみる
試しに IAM の許可されたアクションを sqs:*
にしました。
この状態で Github からテストするとちゃんとメッセージが配信されました。
そこで全てのアクションを箇条書きにして1個ずつ消していくことにしました。
SQS のアクションを全て並べると以下のようになります(多い...)。
sqs:AddPermission
sqs:ChangeMessageVisibility
sqs:ChangeMessageVisibilityBatch
sqs:CreateQueue
sqs:DeleteMessage
sqs:DeleteMessageBatch
sqs:DeleteQueue
sqs:GetQueueAttributes
sqs:GetQueueUrl
sqs:ListDeadLetterSourceQueues
sqs:ListQueues
sqs:PurgeQueue
sqs:ReceiveMessage
sqs:RemovePermission
sqs:SendMessage
sqs:SendMessageBatch
sqs:SetQueueAttributes
最終的に残ったもの
1個消してはテストして、また1個消してはテストするというのを繰り返し続けました(Delete 系のやつや Permission 系のは流石に関係ないと思ってざっくり消したけど)。
その結果最後に残ったのは以下の2つでした。 GetQueueUrl
を消すとまた動かなくなるのでなんか使ってるっぽいです。
sqs:GetQueueUrl
sqs:SendMessage
まとめ
Github に Amazon SQS
を設定する際は以下の2つのアクションの許可が必要です。
sqs:GetQueueUrl
sqs:SendMessage
また、記事中では触れていませんが更に安全にするために Github の IP アドレス以外からはメッセージが配信できないようにすると良いと思います。
NotIpAddress
aws:SourceIp: "192.30.252.0/22"
は拒否みたいな感じです。
Github の IP アドレスだけ許可する
という構成にすると他のポリシーで上書きされてどの IP アドレスからでも配信できる状態にいつの間にかなってしまうことがあるので注意です。