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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ニフティ株式会社
PRO
November 29, 2023
Video
Resources
Programming
0
590
ニフティ開発インターンで使う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 ニフティ株式会社
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
9
AI 開発合宿を通して得た学び
niftycorp
PRO
0
9
なぜISPでオリジナルカードゲームを作ったのか?制作者と対談 - NIFTY Tech Talk #25
niftycorp
PRO
0
70
「なぜかネットが遅い」を“見える化”する 〜マイ ニフティが繋ぐサポートと暮らし〜 - NIKKEI Tech Talk #39
niftycorp
PRO
0
450
InnerSource Summit 2025 Three points that promoted innersource activities
niftycorp
PRO
0
240
Maker Faire Tokyo 2025 出展うらばなし - NIFTY Tech Talk #25
niftycorp
PRO
0
94
Private Status Pageの設定と活用 〜インシデントレスポンスへの活用とStatus Page運用をどうするか?〜
niftycorp
PRO
0
150
ニフティのPagerDuty活用状況
niftycorp
PRO
0
130
会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech talk vol.13
niftycorp
PRO
0
2.6k
Other Decks in Programming
See All in Programming
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.7k
SourceGeneratorのマーカー属性問題について
htkym
0
170
Event Storming
hschwentner
3
1.3k
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
200
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
220
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
580
15年目のiOSアプリを1から作り直す技術
teakun
1
610
開発ステップを細分化する、破綻しないAI開発体制
kspace
0
110
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
140
株式会社 Sun terras カンパニーデック
sunterras
0
2k
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
650
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
160
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Skip the Path - Find Your Career Trail
mkilby
1
72
Mind Mapping
helmedeiros
PRO
1
110
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
75
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
エンジニアに許された特別な時間の終わり
watany
106
240k
Technical Leadership for Architectural Decision Making
baasie
3
270
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
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や承認ルールテンプレー
トを駆使していきましょう