Quickops: SSH 키 생성 및 terraform을 사용하여 OCI 인스턴스 내부에 삽입

Oracle 클라우드 인프라에서 인스턴스를 생성하는 동안 SSH 공개 키를 제공하고 공개 키의 콘텐츠를 붙여넣어 오라클이 개인 및 공개 키를 생성하도록 하는 한 단계가 있습니다.



Terraform에서 인스턴스를 생성하고 문서를 참조할 때
oci_core_instance

이 옵션이 다음과 같은 필드 메타데이터에 해당함을 알 수 있습니다.

(Optional) (Updatable) Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.



따라서 이를 기반으로 main.tf 파일 내에서 이것을 사용하여 생성 중에 로컬 공개 키를 인스턴스로 보내는 옵션을 가질 수 있습니다.

resource "oci_core_instance" "instance01" {
    #the rest of the output not shown 
    #METADATA for the instance
    metadata = {
        ssh_authorized_keys = file("<path to your ssh public key>")
    } 
    preserve_boot_volume = false


또한 main.tf 파일 내부에 다음을 포함할 수 있습니다.

resource "oci_core_instance" "instance01" {
    #the rest of the output not shown 
    #METADATA for the instance
    metadata = {
        ssh_authorized_keys = file(var.path_local_public_key)
    } 
    preserve_boot_volume = false


그런 다음 variables.tf라는 또 다른 파일과 내부에서 변수를 선언합니다.

variable "path_local_public_key" {
  default = "~/.ssh/id_rsa.pub"
  sensitive = true
}


이 명명 모범 사례 env.tfvars를 사용하여 다른 파일 내의 현재 경로:

path_local_public_key = "/Users/user01/.ssh/id_rsa.pub"


이 .tfvars는 중요한 정보를 ID로 포함할 수 있으므로 코드 리포지토리로 보내서는 안 됩니다.


그런데, 다른 방법이 있나요?



실제로 키 생성을 제어하고 이를 main.tf 템플릿으로 보낼 수 있는 방법이 있습니다.

terraform과 함께 제공되는 TLS Provider이 있습니다.

The TLS provider provides utilities for working with Transport Layer Security keys and certificates. It provides resources that allow private keys, certificates and certficate requests to be created as part of a Terraform deployment.



이 시나리오에서는 다음 콘텐츠가 포함된 keys.tf라는 또 다른 파일을 가질 수 있습니다.

resource "tls_private_key" "key01" {
  algorithm   = "RSA"
  rsa_bits = "2048"
}


이것은 OCI 인스턴스에 대한 키를 생성하는 데 필요한 구성이지만 요구 사항에 따라 rsa_bits = "4096" 또는 algorithm = "ECDSA" ecdsa_curve = "P384"를 사용할 수도 있습니다.

요점은 이 파일이 개인 키와 공개 키를 생성하지만 이를 어떻게 main.tf 파일에 전달할 수 있습니까? 먼저 출력을 생성해야 합니다.

outputs.tf라는 파일을 만들고 내부에 다음을 작성합니다.

output "key-private-pem" {
  value = tls_private_key.key01.private_key_pem
  sensitive = true
}

output "key-public-openssh" {
  value = tls_private_key.key01.public_key_openssh
}


tls resource 문서로 이동하면 리소스 생성이 다음 출력을 생성한다고 언급되어 있습니다.
  • 알고리즘
  • private_key_pem
  • public_key_pem
  • public_key_openssh
  • public_key_fingerprint_md5

  • 기본적으로 배스천 서버 내부에 저장할 개인 키와 인스턴스 생성에 보낼 공개 키가 필요합니다. 그러나 여기에 흥미로운 부분이 있습니다. 예를 들어 OCI는 openssh 형식만 지원합니다.

    The public key data in OpenSSH authorized_keys format. ll RSA keys are supported, and ECDSA keys with curves "P256", "P384" and "P521" are supported.
    These format start with ssh-rsa ...



    출력 파일에 private_key_pem 및 public_key_openssh만 넣는 이유가 바로 여기에 있습니다.

    또한 출력 파일에는 private_key_pem 출력 정의 아래에 sensitive = true가 있습니다. 이는 개인 키가 중요한 정보이므로 terraform의 요구 사항입니다. 그렇지 않으면 중요한 정보 공유에 대한 오류가 발생합니다.

    걱정하지 마세요. 키가 로그나 콘솔에 표시되는 것을 피할 뿐이지만 tfstate 파일에는 표시됩니다.

    구성으로 돌아가서 기본 파일 안에 다음을 넣을 수 있습니다.

    resource "oci_core_instance" "instance01" {
        #the rest of the output not shown 
        #METADATA for the instance
        metadata = {
            ssh_authorized_keys = tls_private_key.key01public_key_openssh
        } 
        preserve_boot_volume = false
    


    따라서 기본적으로 한 리소스에서 출력을 호출하고 다른 리소스를 입력 이온으로 사용합니다.

    생성 후 tfstate에서 개인 및 공개 키를 복사하고 개인 및 .pub 파일(예: id_rsa 및 id_rsa.pub)을 만들 수 있습니다.

    개인 키 파일에 필요한 권한을 할당하는 것을 잊지 마십시오.

    $ sudo chmod 600 id_rsa
    


    또한 tfstate 파일을 안전한 방식으로 저장해야 합니다.

    참고: Terraform은 먼저 키를 생성한 다음 인스턴스 생성 내부로 가져와야 한다는 것을 알 만큼 충분히 지능적입니다. depends on

    좋은 웹페이지 즐겨찾기