Skip to content

S3를 통해 닉스 저장소 제공

닉스는 아마존 S3나 S3 호환 서비스로부터 저장소 경로를 다운 받아 저장하는 기능을 내재하고 있습니다. 이는 cache.nixos.org로부터 빌드된 바이너리를 다운받는데 닉스가 사용하는 것과 같은 바이너리 캐시 매커니즘을 사용합니다.

다음 옵션들은 S3 URL에 URL 파라미터로 특정될 수 있습니다:

  • profile\ 사용할 AWS 설정 프로파일의 이름. 닉스가 사용할 기본값은 default 프로파일.

  • region\ S3 버킷의 리전. 기본값은 us-east-1.

    만약 버킷이 us-east-1이 아니라면, 리전 파라미터를 명시적으로 밝혀야만 함.

  • endpoint\ 아마존의 S3를 사용하지 않는 경우, 해당 S3-호환 서비스의 URL. 아마존의 S3를 사용한다면 명시하지 말 것.

    주의

    이 엔드 포인트는 반드시 HTTPS를 지원해야만 하며 경로 기반 주소를 가상 호스트 기반 주소 대신 사용함.

  • scheme\ S3 요청에 사용될 계획(scheme)으로 https (기본값) 이나 http가 쓰임. 이 옵션은, 지원되지 않는 경우에 바이너리 캐시를 위한 HTTPS를 사용하지 않을 수 있도록 해줌.

    주의

    중요 정보가 담긴 캐시가 사용되는 경우, HTTPS를 사용해야함.

아래 예시에서는 example-nix-cache라는 이름의 버킷을 사용합니다.

S3-호환 바이너리 캐시로 익명의 접근

만약 바이너리 캐시가 공개적으로 접근 가능하고 인증 과정을 필요로 하지 않는다면, 닉스를 S3 호환 바이너리 캐시와 사용하기 위해 가장 간단하고 쉬운 방법은 캐시를 위해 HTTP URL을 사용하는 것입니다.

AWS S3 바이너리 캐시 URL의 예시 버킷은 분명히 https://example-nix-cache.s3.amazonaws.com 이거나 입니다. S3 호환 바이너리 캐시를 위해서는 해당 캐시 문서를 참조하시기 바랍니다.

버킷은 다음과 같은 버킷 정책을 필요로 합니다:

{
    "Id": "DirectReads",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowDirectReads",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::example-nix-cache",
                "arn:aws:s3:::example-nix-cache/*"
            ],
            "Principal": "*"
        }
    ]
}

S3-호환 바이너리 캐시로 인증 사용자의 접근

예시를 위한 AWS S3 바이너리 캐시의 URL은 분명히 이어야 합니다.

닉스는 아마존 S3의 인증 요청을 위해 기본 인증 제공 체인을 사용합니다.

닉스는 아마존 S3와 S3 호환 바이너리 캐시의 인증 사용자 접근을 지원합니다.

버킷은 사용 예상자의 모든 버킷 오브젝트에 대한 s3:GetObjects3:GetBucketLocation 수행을 허락하는 버킷 정책을 필요로 합니다. 위에서 소개한 익명 접근 정책은 이 과정을 지원하기 위해 제한된 Principal로 업데이트될 수 있습니다.

S3-호환 바이너리 캐시로 인증 사용자의 쓰기 권한

닉스는 아마존 S3의 S3 호환 버킷의 쓰기 권한을 완전히 지원합니다. 예시 버킷을 위한 바이너리 캐시 URL은 입니다.

닉스는 아마존 S3로의 인증 요청을 위해 기본 인증 제공 체인를 사용합니다.

계정이 캐시에 업로드하려면 아래와 같은 IAM 정책을 필요로 합니다:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "UploadToCache",
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:ListMultipartUploadParts",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-nix-cache",
        "arn:aws:s3:::example-nix-cache/*"
      ]
    }
  ]
}

예시

아마존 S3에 특정한 주요 정보(credential) 프로파일을 업로드:

$ nix copy nixpkgs.hello \
  --to 's3://example-nix-cache?profile=cache-upload&region=eu-west-2'

S3-호환 바이너리 캐시에 업로드:

$ nix copy nixpkgs.hello --to \
  's3://example-nix-cache?profile=cache-upload&scheme=https&endpoint=minio.example.com'

Last update: November 4, 2021
Back to top