OpenStack에 대한 SSL 연결을 설정하는 방법은 무엇입니까?

소개:

이 장에서는 백업 사용자를 위해 OpenStack에서 SSL을 활성화하는 방법을 보여줍니다.

OpenStack을 처음 사용하는 경우 http://docs.openstack.org/에서 제공되는 일반 설정에 대한 문서를 확인해야 합니다

실행 중인 OpenStack이 이미 있는 경우 단계에 따라 SSL을 활성화할 수 있습니다.



가정:

다음 예제에서 사용된 OpenStack 버전은 다음과 같습니다:


다음 예에서 사용된 값은 다음과 같습니다.:


참고: Keystone 관리 토큰의 값은 /etc/keystone/keystone.conf 의 keystone 구성 파일 내부에 정의된 변수 이름 "admin_token"에서 찾을 수 있습니다.



요구 사항 및 준비:

테넌트(프로젝트), 사용자, 역할 및 스토리지 할당량 등을 설정하기 전에 bash 프로필에서 다음 변수를 설정하고 proxy-server.conf에서 필터를 설정하십시오.

1단계: .bash_profile에 환경 변수 추가

예시 (/root/.bash_profile)
----------------------------------------------------------------------------------------------------
    :
    :
  Trimmed
    :
    :
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_TENANT_NAME=mybackup
export OS_AUTH_URL=https://10.7.54.7:5000/v2.0
export OS_SERVICE_ENDPOINT=https://10.7.54.7:35357/v2.0
export OS_SERVICE_TOKEN=7b05dab9722d44e7b9a82dc0d1ff74ea
    :
    :
  Trimmed
    :
    :
----------------------------------------------------------------------------------------------------

프로필을 적용하려면 다시 로그인하십시오.

참고: OS_SERVICE_TOKEN 값은 /etc/keystone/keystone.conf 의 keystone 구성 파일 내에 정의된 변수 이름 "admin_token"에서 찾을 수 있습니다.



2단계: keystone 및 swift를 위한 SSL 연결 설정

SSL 인증서를 설정하려면 /etc/keystone/keystone.conf 파일을 편집하십시오

유효한 인증서 파일이 있다고 가정합니다
/etc/keystone/ssl_cert.pem
/etc/keystone/ssl_key.pem
/etc/keystone/cacert.pem

여기서
ssl_cert.pem은 공개 키 파일입니다,
ssl_key.pem은 개인 키 파일이고,
cacert.pem은 CA 루트 인증서 파일입니다.

CA에서 발급한 인증서의 형식이 다를 수 있으므로 인증서 연결에 대한 올바른 지침을 CA에 항상 확인하십시오.

예시 (/etc/swift/proxy-server.conf)
----------------------------------------------------------------------------------------------------
    :
    :
    :
  Trimmed
    :
    :
    :

[ssl]
enable = True
certfile = /etc/keystone/ssl_cert.pem
keyfile = /etc/keystone/ssl_key.pem
ca_certs = /etc/keystone/cacert.pem

    :
    :
    :
  Trimmed
    :
    :
    :
----------------------------------------------------------------------------------------------------


3단계: keystone 서비스 다시 시작

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# service openstack-keystone restart
Stopping keystone:                                         [  OK  ]
Starting keystone:                                         [  OK  ]
[root@os ~]#
----------------------------------------------------------------------------------------------------


4단계: 기존 서비스를 나열하고 swift의 ID를 표시합니다.

신뢰할 수 없는 SSL 인증서를 사용하는 경우 '--insecure' 스위치를 사용해야 합니다.

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# keystone --insecure service-list
WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
+----------------------------------+------------+--------------+--------------------------------+
|                id                |    name    |     type     |          description           |
+----------------------------------+------------+--------------+--------------------------------+
| 5f805cc7df2a43eb90db6fe11ed682f6 | ceilometer |   metering   |   Openstack Metering Service   |
| 3134116675a8420a88ef01cdcb0c8728 |   cinder   |    volume    |         Cinder Service         |
| b703b91737954d01a2d180f6c3d575ba | cinder_v2  |   volumev2   |       Cinder Service v2        |
| cc787cf0258e46d6a342e1502e7bf6be |   glance   |    image     |    Openstack Image Service     |
| b3af7d0a95d34aa7883629df7a7f7f56 |  keystone  |   identity   |   OpenStack Identity Service   |
| 10f1a022ada246138aba5834e3622a91 |  neutron   |   network    |   Neutron Networking Service   |
| 218b5356d65e4d8382297f72d65c8bbb |    nova    |   compute    |   Openstack Compute Service    |
| a809ad43f380400cb55ff2520bb27ab0 |  nova_ec2  |     ec2      |          EC2 Service           |
| 8b517bd82d4345c895384f9596a29880 |   swift    | object-store | Openstack Object-Store Service |
| 11882e74696547b0ba1e4d276074ae37 |  swift_s3  |      s3      |      Openstack S3 Service      |
+----------------------------------+------------+--------------+--------------------------------+
[root@os ~]#
----------------------------------------------------------------------------------------------------

Swift ID는 굵게 표시됩니다.



5단계: 기존 Swift 서비스 엔드포인트 나열

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# keystone --insecure endpoint-list
WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
+----------------------------------+-----------+---                     ---+----------------------------------+
|                id                |  region   |    ......Trimmed......    |            service_id            |
+----------------------------------+-----------+---                     ---+----------------------------------+
| 00a39b6e21a24562b470b61a1b82902d | RegionOne |  h                     )s | 218b5356d65e4d8382297f72d65c8bbb |
| 047f9c3dd19743e280a553d8a34a9202 | RegionOne |    ......Trimmed......    | 10f1a022ada246138aba5834e3622a91 |
| 2b89407a81574b2c8f0fdef9eefc507a | RegionOne |                           | 5f805cc7df2a43eb90db6fe11ed682f6 |
| 47b6d5974d744c21a04b6ca2781f57a0 | RegionOne |                        )s | b703b91737954d01a2d180f6c3d575ba |
| 485ba5a748fc4f1e865d08774fae8ff7 | RegionOne |                           | b3af7d0a95d34aa7883629df7a7f7f56 |
| 90bb1d878b7045f086e2ada7ce853308 | RegionOne | ht ......Trimmed...... )s | 3134116675a8420a88ef01cdcb0c8728 |
| 9ac0472cb48f49b3b44cb4e3365be01a | RegionOne |                           | 11882e74696547b0ba1e4d276074ae37 |
| a1af6685d3e04e5fa7b71f6c244f1393 | RegionOne | ht                        | 8b517bd82d4345c895384f9596a29880 |
| a9b9c9fbef6a44669788c1946a3c8e48 | RegionOne |                           | cc787cf0258e46d6a342e1502e7bf6be |
| c370061d0cc64386a470a5a0fb01e424 | RegionOne |    ......Trimmed...... n  | a809ad43f380400cb55ff2520bb27ab0 |
+----------------------------------+-----------+---                     ---+----------------------------------+ 
[root@os ~]#
----------------------------------------------------------------------------------------------------

service_id=8b517bd82d4345c895384f9596a29880을 사용하여 swift 서비스의 엔드포인트를 조회합니다



6단계: 안전하지 않은 신속한 서비스 엔드포인트 삭제

Swift 서비스의 동일한 행에서 찾을 수 있는 ID가 a1af6685d3e04e5fa7b71f6c244f1393인 서비스 엔드포인트를 삭제합니다.

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# keystone --insecure endpoint-delete a1af6685d3e04e5fa7b71f6c244f1393
WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
Endpoint has been deleted. 
[root@os ~]#
----------------------------------------------------------------------------------------------------


7단계: https:// instead 를 사용하여 엔드포인트 재생성

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# keystone --insecure endpoint-create --region RegionOne --service-id=8b517bd82d4345c895384f9596a29880 
--publicurl 'https://10.7.54.7:8080/v1/AUTH_%(tenant_id)s' --adminurl 'https://10.7.54.7:8080/v1' --internalurl '
https://10.7.54.7:8080/v1/AUTH_%(tenant_id)s'
WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).
+-------------+----------------------------------------------+
|  Property   |                   Value                      |
+-------------+----------------------------------------------+
|  adminurl   |           https://10.7.54.7:8080/v1          |
|     id      |        fb937c038fd34724bd7415fff3ee7736      |
| internalurl | https://10.7.54.7:8080/v1/AUTH_%(tenant_id)s |
|  publicurl  | https://10.7.54.7:8080/v1/AUTH_%(tenant_id)s |
|   region    |                 RegionOne                    |
| service_id  |       8b517bd82d4345c895384f9596a29880       |
+-------------+----------------------------------------------+ 
[root@os ~]#
----------------------------------------------------------------------------------------------------


8단계: swift를 위한 /etc/swift/proxy-server.conf 설정

proxy-server.conf 파일을 편집하고 아래 예에서 빨간색 으로 강조 펴시된 내용을 추가합니다.

유효한 인증서 파일이 있다고 가정합니다
/etc/swift/ssl_cert.pem
/etc/swift/ssl_key.pem

여기에서
ssl_cert.pem은 공개 키 파일이며,
ssl_key.pem은 개인 키 파일입니다.

CA에서 발급한 인증서의 형식이 다를 수 있으므로 인증서 연결에 대한 올바른 지침을 CA에 항상 확인하십시오.

예시 (/etc/swift/proxy-server.conf)
----------------------------------------------------------------------------------------------------
# This file is managed by puppet.  Do not edit
#
[DEFAULT]
bind_port = 8080
bind_ip = 10.7.54.7
    :
    :
    :
  Trimmed
    :
    :
    :
cert_file = /etc/swift/ssl_cert.pem
key_file = /etc/swift/ssl_key.pem
    :
    :
    :
  Trimmed
    :
    :
    :

[filter:authtoken]
    :
    :
    :
  Trimmed
    :
    :
    :
auth_protocol = https
auth_uri = https://10.7.54.7:5000
insecure = true
----------------------------------------------------------------------------------------------------


9단계: Swift 관련 서비스 다시 시작

/etc/swift/proxy-server.conf 구성 파일을 수정한 후 swift 관련 서비스를 다시 시작합니다 .

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# swift-init main restart
Signal proxy-server  pid: 17166  signal: 15
Signal container-server  pid: 17167  signal: 15
Signal account-server  pid: 17168  signal: 15
Signal object-server  pid: 17169  signal: 15
object-server (17169) appears to have stopped
container-server (17167) appears to have stopped
account-server (17168) appears to have stopped
proxy-server (17166) appears to have stopped
Starting proxy-server...(/etc/swift/proxy-server.conf)
Starting container-server...(/etc/swift/container-server.conf)
Starting account-server...(/etc/swift/account-server.conf)
Starting object-server...(/etc/swift/object-server.conf)
WARNING: SSL should only be enabled for testing purposes. Use external SSL termination for a production deployment.

[root@os ~]#
----------------------------------------------------------------------------------------------------


10단계: swift 명령으로 테스트

예시
----------------------------------------------------------------------------------------------------
[root@os ~]# swift --insecure stat

       Account: AUTH_49f2482ecff9431bae1d32fa2a004026
    Containers: 8
       Objects: 480
         Bytes: 189030388 
Meta Quota-Bytes: 10737418240
   X-Timestamp: 1412574345.10669
  Content-Type: text/plain; charset=utf-8
 Accept-Ranges: bytes
[root@os ~]#
----------------------------------------------------------------------------------------------------