はじめに
大学からコンピューターサイエンスを専攻し、今年でエンジニア歴6年目となるにも関わらず、
私は今までOSSにコントリビュートした経験が無い。。
エンジニアとしてコントリビュート経験が無いのはまずい気がするため、まずはissueを立てることからやってみた。
OSSのコントリビュートはそこまでハードルが高くないらしい
OSSのコントリビュートと聞くと、つよつよエンジニアしかできないんでしょ。と思っていたがそうでもないらしい。
issueを立てたり、ドキュメントのタイピングミスを修正するだけでもコントリビュータになれるとのこと。
意外ととっつきやすいOSS開発参加方法まとめ
超絶簡単OSSコントリビュート術
私でもこれくらいだったら出来そうな気がしてきたぞ!!
issueを見つける
issueを立てるためには、当然ですがissueを見つける必要があります。
ちょうどAWS CLIでバグを見つけたところだったので、こちらの内容をissueとして立てようと思います。
rds-db:connectのCondition制約にaws:CurrentTimeコンテキストキーが使えない
前提知識
IAM認証によるRDS接続
rds-db:connectはIAM認証によるRDS接続で必要な権限です。
IAM認証を行うことで、RDS接続時のパスワードを固定化する必要がなくなり、よりセキュアになります。
IAM認証によるRDS接続の詳細な説明はクラスメソッドさんのブログが大変参考になります。
IAM認証でRDS PostgreSQLに接続してみた
グローバル条件コンテキストキー
AWS CLIなりでAWSにリクエストを行うと、様々な情報をコンテキストとして付与します。
付与されたキー値とポリシーで指定した値を比較して、アクセスの許可拒否を判定できます。
やりたかっとこと
IAM認証によるRDS接続ができる時間帯を制限したかった。
そのため、こんなIAMポリシーを作りました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": "*",
"Condition": {
"DateGreaterThan": {
"aws:CurrentTime": "2020-03-27T00:00:00Z"
},
"DateLessThan": {
"aws:CurrentTime": "2020-03-27T23:59:59Z"
}
}
}
]
}
こうすることでDateGreaterThanとDateLessThanの時間範囲だけ接続できることを期待しました。
でも、このポリシーだと時間範囲内だろうが範囲外だろうが接続できませんでした。
$ RDSHOST=【DBクラスターID】.cluster-XXXXXXXX.ap-northeast-1.rds.amazonaws.com
$ export PGPASSWORD="$( aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --username jane_doe )"
$ psql "host=$RDSHOST dbname=postgres user=jane_doe"
psql: FATAL: PAM authentication failed for user "jane_doe"
FATAL: pg_hba.conf rejects connection for host "10.0.0.202", user "jane_doe", database "postgres", SSL off
サポートに問い合わせた所、
rds-db:connectに関するリクエストをする時はコンテキストキーにaws:CurrentTimeが含まれないため、
代わりにaws:TokenIssueTimeで代用してほしい
とのこと。
ご指摘通りaws:TokenIssueTimeを使ったら時間範囲内の時間帯のみ接続することができました。
ただし、公式ドキュメントにはaws:CurrentTimeコンテキストキーがリクエストに乗る条件としてこんな記載でした。
このキーは常にリクエストコンテキストに含まれます。
つまり、例外無くaws:CurrentTimeコンテキストキーはリクエストに乗るべきにも関わらず、IAM認証でのRDS接続時は含まれていないということです。
説明が長くなったがこれをissueとして立てよう!
issueを立てる
DeepL翻訳をフル活用してissueを立てました!
IAM database authentication with a global conditional context key:aws:CurrentTime can not allow only within Specific dates
対応報告
一旦issueを立てるところまで行いました。issueに対して何かアクションがあれば追記していきたいと思います。今後の目標はプルリク出して自分で修正できるようになること!