ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ãšã¯
ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã®äœ¿çš - Amazon DynamoDB
倿°ã®ãŠãŒã¶ãŒã察象ãšããã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããŠããå Žåãå¿ èŠã«å¿ããŠããŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã䜿çšããŠãèªèšŒãšèªå¯ãå®è¡ã§ããŸãããŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã¯ãåã ã® ãŠãŒã¶ãŒãäœæããå¿ èŠæ§ãæé€ããŸãã代ããã«ããŠãŒã¶ãŒã¯ ID ãããã€ããŒã«ãµã€ã³ã€ã³ããåŸãäžæçãªã»ãã¥ãªãã£è³æ Œæ å ±ã AWS Security Token Service (AWS STS) ããååŸã§ããŸããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®èªèšŒæ å ±ã䜿çšã㊠AWS ãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
IAM ãŠãŒã¶ãŒãäœæããã«äžæçãªèªèšŒæ å ±ã§ AWS ã«ã¢ã¯ã»ã¹ããæ¹æ³ã§ãã
ID ãããã€ããŒãšãã§ãã¬ãŒã·ã§ã³
ID ãããã€ããŒãšãã§ãã¬ãŒã·ã§ã³ - AWS Identity and Access Management
ãã¹ããã©ã¯ãã£ã¹ãšããŠãAWS ã¢ã«ãŠã³ãå ã«åå¥ã« IAM ãŠãŒã¶ãŒãäœæããã®ã§ã¯ãªããID ãããã€ããŒãšã®ãã§ãã¬ãŒã·ã§ã³ã䜿çšã㊠AWS ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã«äººéã®ãŠãŒã¶ãŒã«æ±ããããšããå§ãããŸããID ãããã€ã㌠(IdP) ã䜿çšãããšãAWS ã®å€éšã®ãŠãŒã¶ãŒ ID ã管çããŠããããã®å€éšãŠãŒã¶ãŒ ID ã«ã¢ã«ãŠã³ãå ã® AWS ãªãœãŒã¹ã«å¯Ÿããã¢ã¯ã»ã¹èš±å¯ãäžããããšãã§ããŸããããã¯ãäŒç€Ÿã«æ¢ã«äŒæ¥ãŠãŒã¶ãŒãã£ã¬ã¯ããªãªã©ã®ç¬èªã® ID ã·ã¹ãã ãããå Žåã«äŸ¿å©ã§ãããŸããAWS ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¿ èŠãªã¢ãã€ã«ã¢ããªããŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããå Žåã«ã䟿å©ã§ãã
- IAM ãŠãŒã¶ãŒãäœæããªãæ¹ãå®å
š
- IAM ã®ãã¹ããã©ã¯ãã£ã¹ã§ãäžæçãªèªèšŒæ å ±ã䜿çšããããšãæšå¥šãããŠãã
- ID ãããã€ããŒãšé£æºã㊠AWS ã«ã¢ã¯ã»ã¹ããæ¹æ³ãæšå¥šãããŠãã
- AWS 以å€ã®ãŠãŒã¶ãŒã« AWS ãžã®ã¢ã¯ã»ã¹èš±å¯ãä»äžã§ãã
ID ãããã€ããŒ
IdP | Identity Provider | ã¢ã€ãã£ãŒã㌠â ãµããŒã â GMOãã©ã¹ãã»ãã°ã€ã³
IdPãšã¯ãIdentity Provider (ã¢ã€ãã³ãã£ã㣠ãããã€ããŒ) ã®ç¥ç§°ã§ããã倧æåã§ãIDPããšè¡šèšãããå Žåãããã
éåžžã¯ãåçš®ã¯ã©ãŠããµãŒãã¹ãããããè¡ãèªèšŒïŒäŸ: ãŠãŒã¶ãŒãIDã»ãã¹ã¯ãŒããå ¥åããŠãã°ã€ã³ïŒããã¯ã©ãŠããµãŒãã¹ã«ä»£ãã£ãŠè¡ããèªèšŒæ å ±ãã¯ã©ãŠããµãŒãã¹åŽã«æäŸãã圹å²ãæããã
- ãŠãŒã¶ãŒæ å ±ã管çãããµãŒãã¹ã®ã²ãšã€
- Amazon, Facebook, Google ãªã©å€æ°ååšãã
- ãŠãŒã¶ãŒã¯ ID ãããã€ããŒåŽã§ãã°ã€ã³ããID ãããã€ããŒã¯èªèšŒæ å ±ãã¯ã©ãŠããµãŒãã¹ãã¢ããªã±ãŒã·ã§ã³ãªã©ã«æäŸãã
ã¢ããªã±ãŒã·ã§ã³ãªã©ã§ããGoogle ã§ãã°ã€ã³ããªã©ãå©çšããæ©äŒããããšæããŸãããGoogle ã«ãã°ã€ã³ããããšã§ã¢ããªã±ãŒã·ã§ã³ãå©çšã§ããä»çµã¿ã ID ãããã€ããŒã®ä»çµã¿ã®ããã§ãã
ã€ã¡ãŒãžãšããŠã¯ä»¥äžã®ããã¥ã¡ã³ãã«èšèŒãããŠããå³ã®éãã§ãã
äžè¬çãªã·ããªãª - AWS Identity and Access Management
ãã§ãã¬ãŒã·ã§ã³
ãã§ãã¬ãŒã·ã§ã³ãšã¯ - ITçšèªèŸå ž e-Words
- è±èªã§ã¯é£åãé£çãªã©ã®æå³ãæã€åèª
- ãã°ã€ã³ãªã©ã®èªèšŒã®æèã§äœ¿çšãããããšãå€ã
- ID ãããã€ããŒãªã©ã®èªèšŒæ å ±æäŸå ãšãAWS ãªã©ã®èªèšŒæ å ±æäŸå ã§ã®ã飿ºãã®ãããªæå³åã
AWS ã«ããããã§ãã¬ãŒã·ã§ã³æ¹æ³
äžè¬çãªã·ããªãª - AWS Identity and Access Management
å€éš ID ãããã€ã㌠(IdP) ã䜿çšããŠãAWS ãšå€éš IdP å€ã®ãŠãŒã¶ãŒ ID ã管çã§ããŸããå€éš IdP ã¯ãOpenID Connect (OIDC) ãŸã㯠Security Assertion Markup Language (SAML) ã®ããããã䜿çšã㊠ID æ å ±ã AWS ã«æäŸã§ããŸãã
- AWS ã§ã¯ OIDC ãš SAML ãšãããã§ãã¬ãŒã·ã§ã³æ¹æ³ãå©çšã§ãã
- OIDC ã SAML ã¯èªèšŒãããã³ã«ã®çš®é¡
- OIDC ã§ã¯ JSON ããŒã¹ã® Web ããŒã¯ã³ã§ãã JWT ã䜿çšãã
- èªèšŒãããã³ã«ãšããŠã¯ SAML ãããæ°ãã
- SAML ã§ã¯ XML ã䜿çšãã
OIDC ãš SAML ã«ã€ããŠã¯æ¬èšäºã®æ¬é¡ããéžãããã詳现ã¯å²æããŸãã
AWS ã«ããããŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ãšã¯
ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã®äœ¿çš - Amazon DynamoDB
ãããŸã§ã®èª¿æ»å
容ãèžãŸããŠäžèšã®ããã¥ã¡ã³ããå¹³æã«è§£éããŠã¿ãŸããã
倿°ã®ãŠãŒã¶ãŒã察象ãšããã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããŠããå Žåãå¿ èŠã«å¿ããŠããŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã䜿çšããŠãèªèšŒãšèªå¯ãå®è¡ã§ããŸãã
AWS ã® IAM ãªã©ã«ã¯ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ãšããä»çµã¿ããããŸãã
Amazon ã Google ã«ãã°ã€ã³ããããšã§ AWS ã«ãã¢ã¯ã»ã¹ã§ããä»çµã¿ã§ãã
ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã¯ãåã ã® ãŠãŒã¶ãŒãäœæããå¿ èŠæ§ãæé€ããŸãã代ããã«ããŠãŒã¶ãŒã¯ ID ãããã€ããŒã«ãµã€ã³ã€ã³ããåŸãäžæçãªã»ãã¥ãªãã£è³æ Œæ å ±ã AWS Security Token Service (AWS STS) ããååŸã§ããŸãã
ãŠãŒã¶ãŒã¯ AWS ã«ãã°ã€ã³ãã代ããã« Amazon ãªã©ã«ãã°ã€ã³ããŸãã
Amazon ãªã©ã¯ãã°ã€ã³ããæ
å ±ã AWS ã«æäŸãã圹å²ãæã£ãŠããŸãã
ãŠãŒã¶ãŒæ
å ±ã¯ Amazon ãªã©ã® IP ãããã€ããŒã管çããŠããã®ã§ AWS åŽã§ IAM ãŠãŒã¶ãŒãäœæããå¿
èŠããªãå®å
šã§ãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®èªèšŒæ å ±ã䜿çšã㊠AWS ãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
Amazon ãªã©ã® ID ãããã€ããŒããæäŸããããŠãŒã¶ãŒæ
å ±ã« IAM ããŒã«ãçŽã¥ããŠäžæçãªã¢ã¯ã»ã¹æš©ããŠãŒã¶ãŒã«ä»äžããŸãã
å€§èŠæš¡ãª Web ã¢ããªã±ãŒã·ã§ã³åãã«å€§éã® IAM ãŠãŒã¶ãŒãäœæããæ¹æ³ã¯éçŸå®çãªäžæ¹ã§ããã§ãã¬ãŒã·ã§ã³ã䜿çšããã° IAM ãŠãŒã¶ãŒãäœæããå¿
èŠããªãã®ã§ãå€§èŠæš¡ãª Web ã¢ããªã±ãŒã·ã§ã³ã«ã察å¿å¯èœã§ãã
詊ããŠã¿ã
Google ãã°ã€ã³åŸã« AWS ã® IAM ããŒã«ã䜿çšããŠããããšã確èªããæ¹æ³ã§è©ŠããŠã¿ãŸããã
01. Google Cloud ã®èšå®
Google Cloud åŽã§èªèšŒæ
å ±ãèšå®ããããããŸãã¯ä»¥äžã® URL ã«ã¢ã¯ã»ã¹ããŸãã
https://console.cloud.google.com/
ãããžã§ã¯ãããªãå Žåã«ã¯æ°èŠã«ãããžã§ã¯ããäœæããŠãã ããã
ç§ã®ç°å¢ã§ã¯ My First Project ãšãããããžã§ã¯ããäœææžã¿ãªã®ã§ãã®ãããžã§ã¯ãã䜿çšããŸãã

ç»é¢å·ŠåŽã®ããã²ãŒã·ã§ã³ã¡ãã¥ãŒãã API ãšãµãŒãã¹ > èªèšŒæ
å ±ãã¯ãªãã¯ããŸãã

ç»é¢äžéšã«ä»¥äžã®ã¡ãã»ãŒãžã衚瀺ãããŠããå Žåããåæç»é¢ãæ§æããã¯ãªãã¯ããŠãã ããã
å¿
ããã¢ããªã±ãŒã·ã§ã³ã«é¢ããæ
å ±ã䜿çšã㊠OAuth åæç»é¢ãæ§æããŠãã ããã

ãããžã§ã¯ããæ§æããŒãžã衚瀺ãããå Žåã«ã¯ä»¥äžã®ããã«å ¥åããŸãã
- ã¢ããªå: Web Identity Test
- ãŠãŒã¶ãŒãµããŒãã¡ãŒã«: èªåã®ã¡ãŒã«ã¢ãã¬ã¹
- 察象: å€éš
- é£çµ¡å æ å ±: èªåã®ã¡ãŒã«ã¢ãã¬ã¹
OAuth ã®æŠèŠããŒãžã§ãOAuth ã¯ã©ã€ã¢ã³ããäœæããã¯ãªãã¯ããŸãã

以äžã®èšå®ã§ OAuth ã¯ã©ã€ã¢ã³ã ID ãäœæããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®çš®é¡: ãŠã§ãã¢ããªã±ãŒã·ã§ã³
- åå: ãŠã§ãã¯ã©ã€ã¢ã³ã 1
- æ¿èªæžã¿ã® JavaScript çæå
: http://localhost:8000
- åŸã»ã©çœ®æããŸã
- æ¿èªæžã¿ã®ãªãã€ã¬ã¯ã URI: http://localhost:8000
- åŸã»ã©çœ®æããŸã

ã¯ã©ã€ã¢ã³ãäœæåŸã« OAuth ã¯ã©ã€ã¢ã³ãã®æ å ±ãèšèŒããã JSON ãã¡ã€ã«ãããŠã³ããŒãããŠãã ããã

02. AWS IAM ã§ ID ãããã€ããŒãäœæ
AWS ã® IAM ã³ã³ãœãŒã«ãããID ãããã€ãããã¯ãªãã¯ããŸãã

ããããã€ãã远å ããã¯ãªãã¯ããŸãã

以äžã®èšå®ã§ ID ãããã€ããŒãäœæããŸãã
- ãããã€ãã®ã¿ã€ã: OpenID Connect
- ãããã€ãã® URL: https://accounts.google.com
- 察象è : æé 01 ã§ããŠã³ããŒããã JSON ãã¡ã€ã«å ã® client_id ã®å€

03. IAM ããŒã«ã®äœæ
IAM ã³ã³ãœãŒã«ãããããŒã«ããã¯ãªãã¯ããŸãã

ãããŒã«ãäœæããã¯ãªãã¯ããŸãã

以äžã®èšå®ã§ããŒã«ãäœæããŸãã
- ä¿¡é Œããããšã³ãã£ãã£ã¿ã€ã: ãŠã§ãã¢ã€ãã³ãã£ãã£
- ã¢ã€ãã³ãã£ãã£ãããã€ããŒ: Google
- Audience: æé 01 ã§ããŠã³ããŒããã JSON ãã¡ã€ã«å ã® client_id ã®å€
- èš±å¯ããªã·ãŒ: AdministratorAccess
- ããŒã«å: WebIdentityTestRole



04. html ãã¡ã€ã«ã®äœæ
index.html ãšãããã¡ã€ã«åã§ä»¥äžã®ã³ãŒãã§ãã¡ã€ã«ãäœæããŸãã
以äžã®ç¹ã¯çœ®æããŠãã ããã
- YOUR_GOOGLE_CLIENT_ID: æé 01 ã§ããŠã³ããŒããã JSON ãã¡ã€ã«å ã® client_id ã®å€
- YOUR_ROLE_ARN: æé 03 ã§äœæãã IAM ããŒã«ã® ARN ã«çœ®æ
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ãŠã§ãIDãã§ãã¬ãŒã·ã§ã³ ãã¹ã</title>
<script src="https://accounts.google.com/gsi/client" async defer></script>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1000.0.min.js"></script>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 50px auto; padding: 20px; }
.section { margin: 20px 0; padding: 20px; border: 1px solid #ddd; border-radius: 5px; }
button { padding: 10px 20px; margin: 10px 0; cursor: pointer; }
.result { background: #f5f5f5; padding: 10px; margin: 10px 0; border-radius: 3px; }
</style>
</head>
<body>
<h1>ãŠã§ãIDãã§ãã¬ãŒã·ã§ã³ ãã¢</h1>
<div class="section">
<h2>ã¹ããã1: Googleã§ãã°ã€ã³</h2>
<div id="g_id_onload" data-client_id="YOUR_GOOGLE_CLIENT_ID" data-callback="handleCredentialResponse"></div>
<div class="g_id_signin" data-type="standard"></div>
<div id="login-status" class="result">ãã°ã€ã³ããŠããŸãã</div>
</div>
<div class="section">
<h2>ã¹ããã2: AWSã®äžæèªèšŒæ
å ±ãååŸ</h2>
<button id="get-credentials" disabled>AWSèªèšŒæ
å ±ãååŸ</button>
<div id="credentials-status" class="result">ãŸã ååŸããŠããŸãã</div>
</div>
<div class="section">
<h2>ã¹ããã3: GetCallerIdentity ãå®è¡</h2>
<button id="get-identity" disabled>èªåã®IDã確èª</button>
<div id="identity-result" class="result">ãŸã ååŸããŠããŸãã</div>
</div>
<script>
const CONFIG = {
googleClientId: 'YOUR_GOOGLE_CLIENT_ID',
awsRegion: 'ap-northeast-1',
roleArn: 'YOUR_ROLE_ARN'
};
let googleIdToken = null;
let awsCredentials = null;
function handleCredentialResponse(response) {
googleIdToken = response.credential;
document.getElementById('login-status').innerHTML = 'Googleãã°ã€ã³æåïŒ<br>IDããŒã¯ã³ãååŸããŸãã';
document.getElementById('get-credentials').disabled = false;
}
document.getElementById('get-credentials').addEventListener('click', async () => {
AWS.config.region = CONFIG.awsRegion;
const sts = new AWS.STS();
const data = await sts.assumeRoleWithWebIdentity({
RoleArn: CONFIG.roleArn,
RoleSessionName: 'WebIdentityTest',
WebIdentityToken: googleIdToken
}).promise();
awsCredentials = data.Credentials;
document.getElementById('credentials-status').innerHTML = 'AWSäžæèªèšŒæ
å ±ãååŸããŸããïŒ<br>ã¢ã¯ã»ã¹ããŒID: ' + awsCredentials.AccessKeyId.substring(0, 20) + '...';
document.getElementById('get-identity').disabled = false;
});
document.getElementById('get-identity').addEventListener('click', async () => {
AWS.config.update({
accessKeyId: awsCredentials.AccessKeyId,
secretAccessKey: awsCredentials.SecretAccessKey,
sessionToken: awsCredentials.SessionToken,
region: CONFIG.awsRegion
});
const data = await new AWS.STS().getCallerIdentity().promise();
document.getElementById('identity-result').innerHTML = `GetCallerIdentity æåïŒ<br><br><strong>ããªãã®AWS IDæ
å ±:</strong><br><strong>UserId:</strong> ${data.UserId}<br><strong>Account:</strong> ${data.Account}<br><strong>Arn:</strong> ${data.Arn}<br>`;
});
</script>
</body>
</html>
äœæãã index.html ã zip ãã¡ã€ã«åããŸãã
05. Amplify ã¢ããªã®äœæ
æé 04 ã§äœæãã zip ãã¡ã€ã«ã Amplify ã«ãããã€ããŸãã
Amplify ã³ã³ãœãŒã«ãããã¢ããªã±ãŒã·ã§ã³ããããã€ããã¯ãªãã¯ããŸãã

Git ãªãã§ãããã€ãéžæããŸãã

æé 04 ã§äœæãã zip ãã¡ã€ã«ãã¢ããããŒãããŠãããã€ããŸãã


06. Google Cloud ã®èšå®å€æŽ
æé 01 ã§èšå®ãã URI ã眮æããŸãã
- æ¿èªæžã¿ã® JavaScript çæå : æé 05 ã§äœæãã Amplify ãã¡ã€ã³
- æ¿èªæžã¿ã®ãªãã€ã¬ã¯ã URI: æé 05 ã§äœæãã Amplify ãã¡ã€ã³
Amplify ãã¡ã€ã³ã¯ Amplify ã¢ããªã®ã³ã³ãœãŒã«ãã確èªå¯èœã§ãã

URI æ«å°Ÿã«ã¯ã¹ã©ãã·ã¥ãé€ãã Amplify ãã¡ã€ã³ãèšèŒããŠä¿åããŸãã

07. åäœç¢ºèª
Amplify ã¢ããªã®ãã¡ã€ã³ã«ã¢ã¯ã»ã¹ããŸãã
Google ã§ãã°ã€ã³ãã¯ãªãã¯ããŠãæé 01 ã§æå®ããã¡ãŒã«ã¢ãã¬ã¹ã®ã¢ã«ãŠã³ãã§ Google ã«ãã°ã€ã³ããŸãã

Google ãžã®ãã°ã€ã³ãæåãããšä»¥äžã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
Googleãã°ã€ã³æåïŒ
IDããŒã¯ã³ãååŸããŸãã

次ã«ãAWS èªèšŒæ
å ±ãååŸããã¯ãªãã¯ããŸãã
äžæèªèšŒæ
å ±ãååŸã§ããã°ä»¥äžã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
AWSäžæèªèšŒæ
å ±ãååŸããŸããïŒ
ã¢ã¯ã»ã¹ããŒID: xxx...

æåŸã«ãèªåã® ID ã確èªããã¯ãªãã¯ããŸãã
以äžã®ã¡ãã»ãŒãžã衚瀺ãããã°æåã§ãã
GetCallerIdentity æåïŒ
ããªãã®AWS IDæ
å ±:
UserId: xxx:WebIdentityTest
Account: 012345678901
Arn: arn:aws:sts::012345678901:assumed-role/WebIdentityTestRole/WebIdentityTest

GetCallerIdentity ã¯çŸåšäœ¿çšäžã® IAM ãŠãŒã¶ãŒãããŒã«ã®æ
å ±ãååŸãã AWS ã® API ã§ãã
GetCallerIdentity - AWS Security Token Service
GetCallerIdentity ã§ååŸããæ
å ±ãæé 03 ã§äœæãã IAM ããŒã«ã®æ
å ±ã§ããã° AWS ãžã®ã¢ã¯ã»ã¹ãæåããŠããŸãã
ã€ãŸãããã°ã€ã³ã¯ Google ã§è¡ããGoogle ã®èªèšŒæ
å ±ãå©çšã㊠AWS ã®äžæèªèšŒæ
å ±ãååŸã§ããŠãããšããç¶æ³ã§ãã
以äžããŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã®æå玹ä»ã§ãã
ãŸãšã
ä»åã¯ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã«ã€ããŠç޹ä»ããŸããã
ã©ãªããã®åèã«ãªãã°å¹žãã§ãã
åèè³æ
- ãŠã§ã ID ãã§ãã¬ãŒã·ã§ã³ã®äœ¿çš - Amazon DynamoDB
- ID ãããã€ããŒãšãã§ãã¬ãŒã·ã§ã³ - AWS Identity and Access Management
- IAM ã§ã®ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ - AWS Identity and Access Management
- IdP | Identity Provider | ã¢ã€ãã£ãŒã㌠â ãµããŒã â GMOãã©ã¹ãã»ãã°ã€ã³
- ãã§ãã¬ãŒã·ã§ã³ãšã¯ - ITçšèªèŸå ž e-Words
- GetCallerIdentity - AWS Security Token Service
Discussion
ãšãŠãåãããããã£ãã§ãïŒå匷ã«ãªããŸããïŒ