

 [AWS SDK for JavaScript V3 API リファレンスガイド](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)では、 AWS SDK for JavaScript バージョン3 (V3) のすべての API オペレーションについて詳しく説明します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 認証情報の設定
<a name="setting-credentials"></a>

AWS は認証情報を使用して、サービスを呼び出すユーザーと、リクエストされたリソースへのアクセスが許可されているかどうかを識別します。

ウェブブラウザでも、Node.js サーバーでも、JavaScript コードは API を介してサービスにアクセスする前に有効な認証情報を取得する必要があります。認証情報は、認証情報をサービスオブジェクトに直接渡してサービスごとに設定することができます。　　　　

ウェブブラウザで Node.js と JavaScript の間で異なる認証情報を設定する方法はいくつかあります。このセクションのトピックでは、Node.js またはウェブブラウザで認証情報を設定する方法について説明します。いずれの場合も、オプションは推奨順に表示されています。

## 認証情報のベストプラクティス
<a name="credentials-best-practices"></a>

認証情報を正しく設定することで、ミッションクリティカルなアプリケーションに影響を与えたり重要なデータを侵害する可能性があるセキュリティ問題への露出を最小限に抑えながら、アプリケーションまたはブラウザスクリプトが必要なサービスおよびリソースにアクセスできるようにします。

認証情報を設定するときに適用する重要な原則は、常に自分のタスクに必要な最小限の権限を付与することです。最小限のアクセス許可を超えるアクセス許可を提供し、その結果、セキュリティ問題が後で発見されてそれを修正するよりも、リソースに対する最小限のアクセス許可を提供し、必要に応じてさらにアクセス許可を追加する方が安全です。例えば、Amazon S3 バケット内のオブジェクトや DynamoDB テーブル内のオブジェクトなど、個々のリソースを読み書きする必要がある場合を除き、これらのアクセス許可を読み取り専用に設定します。

最小特権の付与の詳細については、「IAM ユーザーガイド」のベストプラクティストピックの「[最小特権を付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)」を参照してください。

**Topics**
+ [認証情報のベストプラクティス](#credentials-best-practices)
+ [Node.js で認証情報を設定する](setting-credentials-node.md)
+ [ウェブブラウザの認証情報を設定する](setting-credentials-browser.md)

# Node.js で認証情報を設定する
<a name="setting-credentials-node"></a>

ローカルで開発中で、雇用主がセットアップするための認証方法を与えられていない新しいユーザーをお勧めします AWS IAM アイデンティティセンター。詳細については、「[を使用した SDK 認証 AWS](getting-your-credentials.md)」を参照してください。

Node.js では、SDK に認証情報を提供する方法がいくつかあります。これらの中には、より安全なものもあれば、アプリケーションの開発中により便利に使えるものもあります。Node.js で認証情報を取得する場合は、環境変数やロードした JSON ファイルなど、1つ以上のソースに依存するように注意してください。変更が行われたことに気付かずに、コードの実行に使用されるアクセス許可を変更してしまう可能性があります。

AWS SDK for JavaScript V3 は Node.js でデフォルトの認証情報プロバイダーチェーンを提供するため、認証情報プロバイダーを明示的に指定する必要はありません。デフォルトの[認証情報プロバイダーチェーン](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)は、認証情報が 1 つのソースから返されるまで指定された優先順位で、さまざまな異なるソースからの認証情報を解決しようとします。SDK for JavaScript V3 の認証情報プロバイダーチェーンについては、[こちら](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-credential-providers/#fromnodeproviderchain)を参照してください。

## 認証情報プロバイダーチェーン
<a name="credchain"></a>

すべての SDK には、 AWS のサービスに対するリクエストに使用する有効な認証情報を取得するためにチェックする一連の場所 (またはソース) があります。有効な認証情報が見つかると、検索は停止されます。この体系的な検索は、デフォルトの認証情報プロバイダーチェーンと呼ばれます。

チェーンのステップごとに、値を設定するさまざまな方法があります。コード内で直接値を設定することが常に優先され、その後に環境変数として を設定し、共有ファイルで を設定します AWS `config`。詳細については、『*AWS SDK とツールのリファレンスガイド*』の「[設定の優先順位](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#precedenceOfSettings)」を参照してください。

*AWS SDKsおよびツールリファレンスガイドには、*すべての SDK および で使用される AWS SDKs設定に関する情報が記載されています AWS CLI。共有 AWS `config`ファイルを使用して SDK を設定する方法の詳細については、[「共有設定ファイルと認証情報ファイル](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)」を参照してください。環境変数を設定して SDK を設定する方法の詳細については、「[環境変数のサポート](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html)」を参照してください。

で認証するために AWS、 は認証情報プロバイダーを次の表に示す順序で AWS SDK for JavaScript 確認します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html)

新規ユーザーに推奨されるアプローチに従って開始した場合は、「使用開始」のトピックの [を使用した SDK 認証 AWS](getting-your-credentials.md) 中に AWS IAM アイデンティティセンター 認証を設定します。その他の認証方法もさまざまな状況で役に立ちます。セキュリティリスクを避けるため、常に短期の認証情報を使用することをお勧めします。その他の認証方法については、「AWS SDK とツールのリファレンスガイド」の「[認証とアクセス](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)」を参照してください。

このセクションのトピックでは、認証情報を Node.js にロードする方法について説明します。

**Topics**
+ [認証情報プロバイダーチェーン](#credchain)
+ [Amazon EC2 の IAM ロールから認証情報を Node.js にロードする](loading-node-credentials-iam.md)
+ [Node.js Lambda 関数の認証情報をロードする](loading-node-credentials-lambda.md)

# Amazon EC2 の IAM ロールから認証情報を Node.js にロードする
<a name="loading-node-credentials-iam"></a>

Amazon EC2 インスタンスで Node.js アプリケーションを実行する場合、Amazon EC2 の IAM ロールを活用して自動的に認証情報をインスタンスに提供できます。IAM ロールを使用するようにインスタンスを設定する場合、SDK はアプリケーションの IAM 認証情報を自動的に選択するため、手動で認証情報を提供する必要がなくなります。

Amazon EC2 インスタンスへの IAM ロールの追加の詳細については、 [IAM roles for Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)（Amazon EC2 の IAM ロール）を参照してください。

# Node.js Lambda 関数の認証情報をロードする
<a name="loading-node-credentials-lambda"></a>

 AWS Lambda 関数を作成するときは、関数を実行するアクセス許可を持つ特別な IAM ロールを作成する必要があります。このロールは、*実行ロール*と呼ばれます。Lambda 関数を設定するときは、作成した IAM ロールを対応する実行ロールとして指定する必要があります。

実行ロールは、実行と他のウェブサービスを呼び出すために必要な認証情報を Lambda 関数に提供します。その結果、Lambda 関数内で記述した Node.js コードに認証情報を提供する必要はありません。

Lambda 実行ロール作成の詳細については、*AWS Lambda Developer Guide*（ デベロッパーガイド）の[Manage permissions: Using an IAM role (execution role)](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role)（許可の管理: IAM ロール (実行ロール)の使用）を参照してください。

# ウェブブラウザの認証情報を設定する
<a name="setting-credentials-browser"></a>

ブラウザスクリプトから SDK に認証情報を提供する方法はいくつかあります。これらの中には、より安全なものもあれば、スクリプトの開発中により便利に使えるものもあります。

 推薦順で認証情報を提供できる方法は次のとおりです。

1. Amazon Cognito アイデンティティを使用してユーザーを認証し、認証情報を提供する

1. ウェブフェデレーテッド ID を使用する

**警告**  
スクリプトに AWS 認証情報をハードコーディングすることはお勧めしません。認証情報をハードコーディングすると、アクセスキー ID とシークレットアクセスキーが公開される危険があります。

**Topics**
+ [Amazon Cognito アイデンティティを使用してユーザー認証をする](loading-browser-credentials-cognito.md)

# Amazon Cognito アイデンティティを使用してユーザー認証をする
<a name="loading-browser-credentials-cognito"></a>

ブラウザスクリプトのAWS 認証情報を入手する推薦方法は、Amazon Cognito アイデンティティ認証情報クライアント`CognitoIdentityClient` を使います。Amazon Cognito では、サードパーティのアイデンティティプロバイダーによるユーザーの認証が可能です。

Amazon Cognito アイデンティティを使用するには、最初に Amazon Cognito コンソールでアイデンティティプールを作成する必要があります。ID プールは、アプリケーションがユーザーに提供する ID のグループを表します。ユーザーに与えられたアイデンティティは、各ユーザーアカウントを一意に識別します。Amazon Cognito ID は認証情報ではありません。これらは AWS Security Token Service (AWS STS) のウェブ ID フェデレーションサポートを使用して認証情報と交換されます。

Amazon Cognito は、複数のアイデンティティプロバイダーにわたるアイデンティティの抽象化を管理するのに役立ちます。ロードされた ID は AWS STS の認証情報と交換されます。

## Amazon Cognito アイデンティティ認証情報オブジェクトを設定する
<a name="browser-cognito-configuration"></a>

まだ作成していない場合は、Amazon Cognito クライアントを設定する前に [Amazon Cognito console](https://console.aws.amazon.com/cognito)（Amazon Cognito コンソール）でブラウザスクリプトによりアイデンティティプールを作成してください。アイデンティティプール用の認証済み IAM ロールと未認証 IAM ロールの両方を作成して関連付けます。詳細については、「Amazon Cognito デベロッパーガイド」の「[チュートリアル: ID プールの作成](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-identity-pool.html)」を参照してください。

認証されていないユーザーは アイデンティティが検証されないため、このロールはアプリケーションのゲストユーザーに適切です。または、ユーザーのアイデンティティが検証されているかどうかが重要ではない場合に適切です。認証されているユーザーは、自分の ID を確認するサードパーティーの ID プロバイダーを介してアプリケーションにログインします。リソースの許可の範囲を適切に設定し、認証されていないユーザーからのアクセスを許可しないようにします。

アイデンティティプールを設定したら、`@aws-sdk/credential-providers` から `fromCognitoIdentityPool` のメソッドを使用して、アイデンティティプールから認証情報を取得します。Amazon S3 クライアントを作成する次の例では、*AWS\$1REGION* をリージョンに、*IDENTITY\$1POOL\$1ID* をアイデンティティプール ID に置き換えます。

```
// Import required AWS SDK clients and command for Node.js
import {S3Client} from "@aws-sdk/client-s3";
import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers";

const REGION = AWS_REGION;

const s3Client = new S3Client({
  region: REGION,
  credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient.
    identityPoolId: 'IDENTITY_POOL_ID',
    logins: {
            // Optional tokens, used for authenticated login.
        },
  })
});
```

オプションの `logins` プロパティは、ID プロバイダー名の ID トークンへのマッピングです。ID プロバイダーからのトークンの取得方法は、使用するプロバイダーによって異なります。たとえば、Amazon Cognito ユーザープールを認証プロバイダーとして使用している場合は、以下のような方法を同様に使用できます。

```
// Get the Amazon Cognito ID token for the user. 'getToken()' below.
let idToken = getToken();
let COGNITO_ID = "COGNITO_ID"; // 'COGNITO_ID' has the format 'cognito-idp.REGION.amazonaws.com/COGNITO_USER_POOL_ID'
let loginData = {
  [COGNITO_ID]: idToken,
};
const s3Client = new S3Client({
    region: REGION,
    credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient.
    identityPoolId: 'IDENTITY_POOL_ID',
    logins: loginData
  })
});

// Strips the token ID from the URL after authentication.
window.getToken = function () {
  var idtoken = window.location.href;
  var idtoken1 = idtoken.split("=")[1];
  var idtoken2 = idtoken1.split("&")[0];
  var idtoken3 = idtoken2.split("&")[0];
  return idtoken3;
};
```

## 認証されていないユーザーから認証されたユーザーに切り替える
<a name="browser-switching-unauthenticated-users"></a>

Amazon Cognito は、認証されたユーザーと認証されていないユーザーの両方をサポートします。認証されていないユーザーは、ID プロバイダーのいずれにもログインしていない場合でも、リソースにアクセスできます。このレベルのアクセスは、ログインする前にユーザーにコンテンツを表示するのに便利です。認証されていない各ユーザーは、個別にログインして認証していない場合でも Amazon Cognito で一意のアイデンティティを持ちます。

### 認証されていないユーザーとしての開始
<a name="browser-initially-unauthenticated-user"></a>

ユーザーは通常、認証されていないロールから開始します。このロールでは、`logins` プロパティを使用しないで設定オブジェクトの認証情報プロパティを設定します。この場合、デフォルト認証情報は次のようになります。

```
// Import the required AWS SDK for JavaScript v3 modules.                   
import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers";
// Set the default credentials.
const creds = fromCognitoIdentityPool({
  identityPoolId: 'IDENTITY_POOL_ID',
  clientConfig: { region: REGION } // Configure the underlying CognitoIdentityClient.
});
```

### 認証されたユーザーへの切り替え
<a name="switch-to-authenticated"></a>

認証されていないユーザーが アイデンティティプロバイダーにログインしたときに、トークンがあれば、カスタム関数を呼び出して認証情報オブジェクトを更新し `logins` トークンを追加することで、認証されていないユーザーを認証されたユーザーに切り替えることができます。

```
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
  creds.params.Logins = creds.params.logins || {};
  creds.params.Logins[providerName] = token;
                    
  // Expire credentials to refresh them on the next request
  creds.expired = true;
}
```