암호화 된 EBS 볼륨이있는 인스턴스 시작에 대해 (빠르다)
EBS 루트 볼륨 암호화
다음 문서에서 볼 수 있듯이 현재 EBS는 인스턴스의 루트 볼륨 암호화를 지원합니다.
htp : // 아 ws. ty 페파 d. 이 m/아ws_쟈팡/2015/12/네 w-엔 cryp해서 d-에 bs-보오 tゔぉぅ메 s. HTML
이번은 이 루트 볼륨 암호화를 실시한 인스턴스의 자동 기동을 할 때에 빠진 점에 대해 씁니다.
인스턴스 시작 실패
이번에는 AWS Lambda를 사용하여 인스턴스 시작 자동화를 도모하려고 했습니다.
사용한 스크립트는 AMI 백업을 수행하는 Lambda 함수(python) 을 바탕으로 작성한, 다음의 인스턴스 기동 배치입니다.
스톱과 함께 GitHub에도 놓여 있습니다.
htps : // 기주 b. 코 m / 타츠오 48 / 헤이 - rld / t ree / ms r / mb 다 펑 c 치온 s
startinstance.py#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import boto3
import pprint
TAG_KEY_AUTO_START = 'auto-start'
print('Loading function')
pp = pprint.PrettyPrinter(indent=4)
# 関数名 : lambda_handler
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
ec2_client = boto3.client('ec2')
ret = execute_start_instance(ec2_client)
print 'Start instance success(%s).' % (ret)
return 0
raise Exception('Something went wrong')
# 関数名 : execute_start_instance
# 戻り値 : 実行結果
# 引数 : ec2_client
# : ec2_resource
# 機能 : インスタンスを起動する。
def execute_start_instance(ec2_client):
response = ec2_client.describe_instances()
result = None
for ec2_group in response['Reservations']:
for instance_info in ec2_group['Instances']:
ret = is_target(instance_info)
if (ret == False):
continue
instance_id = instance_info.get('InstanceId')
response = ec2_client.start_instances(InstanceIds=[instance_id,])
print response
result = True
return result
# 関数名 : is_target
# 戻り値 : 起動要否
# 引数 : instance_info <dict>
# 機能 : 起動要否を判定する
def is_target(instance_info):
val = get_tag_value(
instance_info,
TAG_KEY_AUTO_START
)
if val is None:
return False
return True
# 関数名 : get_tag_value
# 戻り値 : タグ値(当該キーに合致するものがなければNone)
# 引数 : instance_info <dict>
# : key <str>
# 機能 : インスタンス情報から指定キーのタグ値を取得する
def get_tag_value(instance_info, key):
tags = instance_info.get('Tags')
if tags == None:
return None
for tag in tags:
if not (key == tag['Key']):
continue
tag_value = tag['Value']
if tag_value == "true":
return True
return None
그러나 Lambda 함수를 여러 번 실행해도 다음과 같은 올바른 응답이 반환되었지만 인스턴스가 시작되지 않았습니다. . . .
{u'StartingInstances': [{u'InstanceId': 'インスタンスID', u'CurrentState': {u'Code': 0, u'Name': 'pending'}, u'PreviousState': {u'Code': 80, u'Name': 'stopped'}}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'kkksfh084k-l9hh-8iy6-hshs4-ipsug88w9hwh'}}
원인 : 실행 역할의 권한 부족
여러가지 조사했지만 원인은 매우 단순한 것이었습니다.
KMS(Key Management Service)의 실행 허가가 빠졌습니다. .
이번에는 저는 기본 키가 아닌 암호화 키를 직접 만들고 사용했습니다.
그 경우, 해당의 암호화 키의 「키 유저」혹은 실행 롤의 정책으로 키의 이용을 허가할 필요가 있었습니다.
암호화 키의 「키 유저」로 설정하는 경우는 다음과 같이 GUI로 설정할 수 있습니다.
실행 롤의 정책이라면 이런 식으로.
실행 역할의 정책으로 설정하는 경우{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1236596007000",
"Effect": "Allow",
"Action": [
"kms:*"
],
"Resource": [
"作成したキーのARN"
]
}
]
}
끝에
원인은 지극히 당연하고 당연합니다만 평소 사용하지 않는 기능이라고 거기까지 가는데도 고생합니다.
앞으로도 업무 내외 불문하고 만지지 않은 기능에 접하도록 해야 한다고 생각했습니다.
Reference
이 문제에 관하여(암호화 된 EBS 볼륨이있는 인스턴스 시작에 대해 (빠르다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tatsuo48/items/32866d10e796c618628a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는 AWS Lambda를 사용하여 인스턴스 시작 자동화를 도모하려고 했습니다.
사용한 스크립트는 AMI 백업을 수행하는 Lambda 함수(python) 을 바탕으로 작성한, 다음의 인스턴스 기동 배치입니다.
스톱과 함께 GitHub에도 놓여 있습니다.
htps : // 기주 b. 코 m / 타츠오 48 / 헤이 - rld / t ree / ms r / mb 다 펑 c 치온 s
startinstance.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import boto3
import pprint
TAG_KEY_AUTO_START = 'auto-start'
print('Loading function')
pp = pprint.PrettyPrinter(indent=4)
# 関数名 : lambda_handler
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
ec2_client = boto3.client('ec2')
ret = execute_start_instance(ec2_client)
print 'Start instance success(%s).' % (ret)
return 0
raise Exception('Something went wrong')
# 関数名 : execute_start_instance
# 戻り値 : 実行結果
# 引数 : ec2_client
# : ec2_resource
# 機能 : インスタンスを起動する。
def execute_start_instance(ec2_client):
response = ec2_client.describe_instances()
result = None
for ec2_group in response['Reservations']:
for instance_info in ec2_group['Instances']:
ret = is_target(instance_info)
if (ret == False):
continue
instance_id = instance_info.get('InstanceId')
response = ec2_client.start_instances(InstanceIds=[instance_id,])
print response
result = True
return result
# 関数名 : is_target
# 戻り値 : 起動要否
# 引数 : instance_info <dict>
# 機能 : 起動要否を判定する
def is_target(instance_info):
val = get_tag_value(
instance_info,
TAG_KEY_AUTO_START
)
if val is None:
return False
return True
# 関数名 : get_tag_value
# 戻り値 : タグ値(当該キーに合致するものがなければNone)
# 引数 : instance_info <dict>
# : key <str>
# 機能 : インスタンス情報から指定キーのタグ値を取得する
def get_tag_value(instance_info, key):
tags = instance_info.get('Tags')
if tags == None:
return None
for tag in tags:
if not (key == tag['Key']):
continue
tag_value = tag['Value']
if tag_value == "true":
return True
return None
그러나 Lambda 함수를 여러 번 실행해도 다음과 같은 올바른 응답이 반환되었지만 인스턴스가 시작되지 않았습니다. . . .
{u'StartingInstances': [{u'InstanceId': 'インスタンスID', u'CurrentState': {u'Code': 0, u'Name': 'pending'}, u'PreviousState': {u'Code': 80, u'Name': 'stopped'}}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'kkksfh084k-l9hh-8iy6-hshs4-ipsug88w9hwh'}}
원인 : 실행 역할의 권한 부족
여러가지 조사했지만 원인은 매우 단순한 것이었습니다.
KMS(Key Management Service)의 실행 허가가 빠졌습니다. .
이번에는 저는 기본 키가 아닌 암호화 키를 직접 만들고 사용했습니다.
그 경우, 해당의 암호화 키의 「키 유저」혹은 실행 롤의 정책으로 키의 이용을 허가할 필요가 있었습니다.
암호화 키의 「키 유저」로 설정하는 경우는 다음과 같이 GUI로 설정할 수 있습니다.
실행 롤의 정책이라면 이런 식으로.
실행 역할의 정책으로 설정하는 경우{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1236596007000",
"Effect": "Allow",
"Action": [
"kms:*"
],
"Resource": [
"作成したキーのARN"
]
}
]
}
끝에
원인은 지극히 당연하고 당연합니다만 평소 사용하지 않는 기능이라고 거기까지 가는데도 고생합니다.
앞으로도 업무 내외 불문하고 만지지 않은 기능에 접하도록 해야 한다고 생각했습니다.
Reference
이 문제에 관하여(암호화 된 EBS 볼륨이있는 인스턴스 시작에 대해 (빠르다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tatsuo48/items/32866d10e796c618628a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1236596007000",
"Effect": "Allow",
"Action": [
"kms:*"
],
"Resource": [
"作成したキーのARN"
]
}
]
}
원인은 지극히 당연하고 당연합니다만 평소 사용하지 않는 기능이라고 거기까지 가는데도 고생합니다.
앞으로도 업무 내외 불문하고 만지지 않은 기능에 접하도록 해야 한다고 생각했습니다.
Reference
이 문제에 관하여(암호화 된 EBS 볼륨이있는 인스턴스 시작에 대해 (빠르다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatsuo48/items/32866d10e796c618628a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)