Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ニフティ開発インターンで使うAWS環境をできるだけ楽に構築した話 (LT) - NIFTY T...
Search
ニフティ株式会社
PRO
November 29, 2023
Video
Resources
Programming
0
410
ニフティ開発インターンで使うAWS環境をできるだけ楽に構築した話 (LT) - NIFTY Tech Day 2023
ニフティ株式会社
PRO
November 29, 2023
Tweet
Share
Video
Resources
NIFTY Tech Day 2023
https://techday.nifty.co.jp/2023/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
1.1k
Grow on GitHub Collaboration Culture: Case Study of InnerSource Challenge - GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
26
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
210
継続的な改善のためのmodulesの適切な分割単位 - NIFTY Tech Talk #23
niftycorp
PRO
0
120
Re:ゼロから始めるTerraform生活 ~IaC入門編~ - NIFTY Tech Talk #23
niftycorp
PRO
0
130
Terraformにベストプラクティスを取り入れた - NIFTY Tech Talk #23
niftycorp
PRO
0
150
AWS AppSyncを用いた GraphQL APIの開発について - NIFTY Tech Talk #22
niftycorp
PRO
0
160
「天気予報があなたに届けられるまで」 - NIFTY Tech Talk #22
niftycorp
PRO
0
180
@nifty天気予報:フルリニューアルの挑戦 - NIFTY Tech Talk #22
niftycorp
PRO
0
170
Other Decks in Programming
See All in Programming
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
390
為你自己學 Python
eddie
0
500
KubeCon NA 2024の全DB関連セッションを紹介
nnaka2992
0
110
React 19でお手軽にCSS-in-JSを自作する
yukukotani
5
530
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
130
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
820
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.1k
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
360
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
290
HTML/CSS超絶浅い説明
yuki0329
0
170
バグを見つけた?それAppleに直してもらおう!
uetyo
0
210
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
1k
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
Gamification - CAS2011
davidbonilla
80
5.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Into the Great Unknown - MozCon
thekraken
34
1.6k
The Cult of Friendly URLs
andyhume
78
6.1k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
Transcript
Copyright ©NIFTY Corporation All Rights Reserved. ニフティ開発インターンで使う AWS環境を できるだけ楽に構築した話 会員システムグループ
第二開発チーム 上原 直希
ニフティで開発インターンシップを開催 • 8月に開発インターンを開催 • 学生はチームに分かれ、3日間チーム開発 • スクラムの原則に則って活動してもらう
インターン中の学生の開発の流れ • 学生のPCでソースコードを追加・修正 • IAMユーザーを使ってAWS CodeCommitにpushしPR作成 • チームメンバーおよびメンター社員がPRをレビュー • 大丈夫そうであればマージ、デプロイ
• 上の繰り返し
運営としてインフラを色々いじっていた • インターンの運営として関わる • インフラ構築が大変そうだったので、 いい感じにできないか? • 一ヶ月くらいTerraformをゴニョゴニョいじっていく
紹介したいところ 1. 学生に払い出すIAMユーザーのパスワードをボタンぽちぽちせずに 払い出したい 2. 開催時間以外は学生がリソースにアクセスできないようにしたい 3. AWS CodeCommitのmasterブランチに直pushできないようにしたい 4.
AWS CodeCommitでPRは必ず社員の承認を得てからマージできるよ うにしたい
IAMユーザーのパスワード払い出し
ポチポチして30人分のパスワードを発行する... 面倒
コンソールログイン用のパスワード払い出し aws_iam_user_login_profile resource "aws_iam_user" "example" { name = "example" path
= "/" for ce_destroy = true } resource "aws_iam_user_login_profile" "example" { user = aws_iam_user.example.name pgp_key = "keybase:some_person_that_exists" } IAMユーザー作成 コンソールログイン 用のパスワード払い 出し
.encrypted_passwordで 生成したパスワードを参照可能 aws_iam_user_login_profile resource "aws_iam_user_login_profile" "example" { user = aws_iam_user.example.name
pgp_key = "keybase:some_person_that_exists" } パスワード払い出し (暗号化キーも指定) output "password" { value = aws_iam_user_login_profile.example.encrypted_password } 暗号化されたパスワード を参照可能
Gitクライアント用の認証情報の払い出し aws_iam_service_specific_credential resource "aws_iam_service_specific_credenBal" "example" { service_name = "codecommit.amazonaws.com" user_name
= aws_iam_user.example.name } output "codecommit_user_name" { value = aws_iam_service_specific_credential.example.service_user_name } output "codecommit_password" { value = aws_iam_service_specific_credential.example.service_user_password } Git用認証情報 Git認証用の ID/パスワード
Terraform便利! コンソールに入らずにパスワードを払い出せるので便利!
アクセス可能時間を制御したい!
IAMユーザーのアクセス可能時間制御 • インターン時間外にはコンソールやAWS CodeCommitにアクセスして 欲しくない • 開始時間になったらアクセスできるようIAMポリシーを付ける、 終わったら外す ◦ 手動でやるの面倒
IAMユーザーのアクセス可能時間制御 • IAMポリシーにConditionがあ る • Conditionに時間制限をかけら れる { "Version": "2012-10-17",
"Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "*" ], "Resource": "*", "Condition": { "DateGreaterThan": { "aws:CurrentTime": "${start}" }, "DateLessThan": { "aws:CurrentTime": "${end}" } } } ] }
IAMユーザーのアクセス可能時間制御 • 現在時刻が開始時間から終了時間の間までポリシーが適用される "CondiBon": { "DateGreaterThan": { "aws:CurrentTime": "開始時間" },
"DateLessThan": { "aws:CurrentTime": "終了時間" } }
IAMユーザーのアクセス可能時間制御 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect":
"Allow", "AcKon": [ "codecommit:GitPush" ], "Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo", "CondiKon": { "DateGreaterThan": { "aws:CurrentTime": "2024-09-21T09:00:00+09:00" }, "DateLessThan": { "aws:CurrentTime": "2024-09-21T17:00:00+09:00" } } } ] } 学生が使うIAMユーザーは 9/21の9:00-17:00で MyDemoRepoに pushのみ 可能
masterにpushして欲しくない
AWS CodeCommitのmasterに直push禁止 GitHub ブランチ保護ルールを使う =レポジトリに設定 AWS CodeCommit IAMポリシーでIAMユーザーの 権限を制限 =ユーザー単位の制限
(=レポジトリに設定できない)
AWS CodeCommitのmasterに直push禁止 masterに対してpush禁止を 示すIAMポリシーを作成 →ユーザーにアサインすれば、 そのユーザーはpushできない { "Version": "2012-10-17", "Statement":
[ { "Effect": "Deny", "AcKon": ["codecommit:GitPush"], "Resource": "*", "CondiKon": { "StringEqualsIfExists": { "codecommit:References": ["refs/heads/master"] }, "Null": { "codecommit:References": false } } } ] } https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_awscodecommit.html
社員が承認してからマージしたい
GitHub ブランチ保護ルール AWS CodeCommitでは承認ルールを使う AWS CodeCommit 承認ルール
承認ルールの面倒なところ 承認ルールはPRごとに設定しないといけないので、面倒 → 承認ルールテンプレートを使えば自動的に設定してくれる
承認ルールテンプレートはこんな感じ 何人承認必要か 誰からの承認が 必要か マージ先のブランチ (master, mainの 指定が多い)
レビュアーにはロール名/スイッチ元ユーザ ー名で指定する https://dev.classmethod.jp/articles/codecommit-approval-rule-tips/
社員からの承認を必須にするには 社員はAdministratorロールが取れるので、 承認プールにはAdministrator/*と指定 →学生のIAMユーザーはApproveしても 条件を満たさないためマージできない
Terraformで承認ルールテンプレートを作る時 ハマりポイント resource "aws_codecommit_approval_rule_template" "approval_rule" { name = "approval-rule" description
= "承認テンプレート" content = <<EOF { "Version": "2018-11-08", "DestinationReferences": ["refs/heads/master", "refs/heads/main"], "Statements": [{ "Type": "Approvers", "NumberOfApprovalsNeeded": 1, "ApprovalPoolMembers": ["CodeCommitApprovers:Administrator/*"] }] } EOF } CodeCommitApprovers:がprefixに必要 × Administrator/*
紹介したこと • 学生に払い出すIAMユーザーの認証情報をぽちぽちせずに払い出し たい • 指定時間以外は学生がAWS CodeCommitにアクセスできないように したい • AWS
CodeCommitのmasterブランチに直pushできないようにしたい • AWS CodeCommitでPRは必ず社員の承認を得てからマージできるよ うにしたい
まとめ • Terraformを使って簡単にパスワードを払い出せる ◦ IaC最高 • IAMポリシーのConditionで時間帯によるアクセス制御ができる • AWS CodeCommitに制限をかける時はIAMや承認ルールテンプレー
トを駆使していきましょう