> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nami.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# 認証

> 最先端のグローバルコンセンサスプロトコルと分散ストレージを用いたクラウドサービスの革新

## 認証

Nami Cloud Storageは、リクエスト認証にAWS Signature Version 4を使用しており、標準のS3クライアントおよびSDKと互換性があります。

### 資格情報

リクエストを認証するには、2つの資格情報が必要です：

* アクセスキーID
* シークレットアクセスキー

これらの資格情報は、Nami Cloud Dashboardから取得できます。

### 認証ヘッダー

各リクエストには、以下の形式のAuthorizationヘッダーを含める必要があります：

```bash theme={null}
Authorization: AWS4-HMAC-SHA256 
    Credential=${AccessKeyID}/${date}/${region}/s3/aws4_request,
    SignedHeaders=${headers},
    Signature=${signature}
```

### 例

```bash theme={null}
Authorization: AWS4-HMAC-SHA256 
    Credential=AKIAIOSFODNN7EXAMPLE/20231028/us-east-1/s3/aws4_request,
    SignedHeaders=host;x-amz-content-sha256;x-amz-date,
    Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
```

### SDKとの使用

ほとんどのS3 SDKは、認証を自動的に処理します。以下は異なる言語での例です：

<CodeGroup>
  ```python Python theme={null}
  import boto3

  s3_client = boto3.client('s3',
      endpoint_url='https://storage.nami.cloud',
      aws_access_key_id='YOUR_ACCESS_KEY',
      aws_secret_access_key='YOUR_SECRET_KEY'
  )
  ```

  ```javascript Node.js theme={null}
  import { S3Client } from "@aws-sdk/client-s3";

  const client = new S3Client({
    endpoint: "https://storage.nami.cloud",
    credentials: {
      accessKeyId: "YOUR_ACCESS_KEY",
      secretAccessKey: "YOUR_SECRET_KEY",
    },
  });
  ```

  ```go Golang theme={null}
  import (
      "github.com/aws/aws-sdk-go/aws"
      "github.com/aws/aws-sdk-go/aws/credentials"
      "github.com/aws/aws-sdk-go/aws/session"
      "github.com/aws/aws-sdk-go/service/s3"
  )

  sess := session.Must(session.NewSession(&aws.Config{
      Endpoint:    aws.String("https://storage.nami.cloud"),
      Region:      aws.String("us-east-1"),
      Credentials: credentials.NewStaticCredentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", ""),
  }))

  s3Client := s3.New(sess)
  ```

  ```rust Rust theme={null}
  use aws_sdk_s3::{Client, Config};
  use aws_config::credentials::StaticCredentialsProvider;
  use aws_types::region::Region;

  let credentials = StaticCredentialsProvider::new(
      "YOUR_ACCESS_KEY".to_string(),
      "YOUR_SECRET_KEY".to_string(),
      None,
  );

  let config = Config::builder()
      .endpoint_url("https://storage.nami.cloud")
      .region(Region::new("us-east-1"))
      .credentials_provider(credentials)
      .build();

  let client = Client::from_conf(config);
  ```
</CodeGroup>

### セキュリティのベストプラクティス

1. **資格情報の保護**
   * 資格情報をソース管理にコミットしない
   * 定期的に資格情報をローテーションする
   * 環境変数や安全な資格情報ストアを使用する

2. **アクセス制御**
   * 最小権限の原則に従う
   * 可能な場合はバケットポリシーやIAMロールを使用する
   * アクセスパターンを定期的に監査する

3. **HTTPS**
   * APIリクエストには常にHTTPSを使用する
   * SSL/TLS証明書を検証する
   * クライアントライブラリを最新の状態に保つ
