AWS 자격 증명을 EC2 인스턴스에 사용자 데이터로 전달하는 가장 좋은 방법은 무엇입니까?

EC2 인스턴스 쿼리 S3 및 SQS가 필요한 AWS 기반 작업 처리 아키텍처가 있습니다. 실행 중인 인스턴스가 API에 액세스할 수 있도록 자격 증명은 base64에서 인코딩된 셸 스크립트 형식으로 사용자 데이터(-f)로 전송됩니다. 예를 들어:

$ $ cat ec2.sh …export AWS_ACCOUNT_NUMBER=’1111-1111-1111’export AWS_ACCESS_KEY_ID = ‘0x0x0x0x0x0x0x0’···$ zip -P ‘secret-password’ ec2。sh$ opensslenc-base64 -inec2.zip

많은 인스턴스가 시작됩니다…

$ $ ec2runami-a83fabc0-n 20-fec2.zip

각 인스턴스는 init스크립트에 하드 코딩된 “secret-password”를 사용하고 ec2.zip을 데코ー디은그하여 해독합니다.동작하지만, 나의 접근에는 2가지 문제가 있습니다.”zip-P”는 그다지 안전하지 않습니다.패스워드는 인스턴스에 하드 코딩되어 있습니다(항상’secret-password’). 방법은 여기에서 설명하고 있는 것과 매우 비슷합니다.더 우아하고 허용되는 접근은 있습니까?gpg을 사용하고 자격 정보를 암호화하고 인스턴스에 비밀 키를 보존하고 패스워드를 해독하는 것은 현재 검토 중인 접근법이지만, 주의 사항을 모르겠어요.AWS키 짝을 직접 사용할 수 있습니까?API의 매우 분명한 부분이 빠지고 있습니까?컴퓨터 자격 정보를 보존할 수 있습니다(또는 전송, 사용, 삭제).보안 채널을 통해서 자격 정보를 송신할 수 있기 때문에(예를 들어 키 페어 같은 비대형 인증과 함께 scp를 사용), 커스텀 암호화를 실행할 필요는 없습니다(키 파일에 대한 권한이 0400에 올바르게 설정되어 있음을 확인하세요.시간, 예를 들면 마스터 파일에 대한 권한을 설정하고 scp-p를 사용)위 내용에서 고객의 질문에 응답하지 못할 경우 re. 설정은 무엇이든 달성하려는 것입니다.EC2작업은 중앙 위치에서 복수의 노드부터 시작됩니까?복수의 노드와 중앙 위치 사이에서 SSH를 사용할 수 있습니까?등. 편집하는 AMI을 매개 변수화하고 AMI을 인스턴스화하는 사람이 우선 사용자 데이터(ec2-run-instances-fuser-data-file)을 자신의 AWS키로 채우도록 요구한 적이 있습니까?그 뒤 AMI는 http://169.254.169.254/1.0/user-data에서 이들 인스턴스별 파라미터를 동적으로 검색할 수 있습니다.갱신자, 다음은 이까지 논의된 다양한 어프로치의 보안을 염두에 두고 비교한 것입니다.암호화되지 않은 AMIuser-data데이터에 저장하면 데이터 보안의 낮은 일반 텍스트 데이터는 AMI에 로그온 하면 telnet, curl, wget등에 접근할 수 있는 모든 사용자가 접속할 수 있습니다(일반 텍스트 htp://169.254.169.254/1.0/user-data접속 가능).프록시 요구 공격에 취약합니다(예:공격자는 AMI에서 실행 중 또는 실행되지 못할 가능성이 있는 Apache에 일반 텍스트 htp://169.254.169.254/1.0/user-data를 가져올 전달하도록 요청합니다).AMI user-data데이터에 저장되며, 쉽게 취득할 수 있는 키로 암호화(또는 해독 가능) 할 때 데이터 보안의 낮은 쉽게 취득할 수 있는 키(암호)에는 다음의 것이 포함되는 경우가 있습니다.ABI내부 스크립트에 하드 코딩된 키(공격자가 ABI을 취득할 수 있는 곳)AMI자체의 스크립트에 하드 코딩된 키.여기서 스크립트는 AMI에 로그온 할 수 있는 모든 사용자가 읽을 수 있습니다공개 키 등처럼 쉽게 취득한 기타 정보 모든 비밀키(공개 키는 간단하게 취득할)가 주어진다면 가장 항목에서 식별된 같은 문제가 적용됩니다.해독된 데이터는 AMI에 로그온 하면 telnet, curl, wget등에 접근할 수 있는 모든 사용자가 접속할 수 있습니다(일반 텍스트 htp://169.254.169.254/1.0/user-data접속 가능).당신은 프록시 요구 공격에 취약합니다(예:공격자는 AMI에서 실행 중 또는 실행되지 않을 가능성이 있는 Apache에게 암호화된 htp://169.254.169.254/1.0/user-data를 가져올 전달하도록 요청합니다.키)AMI user-data데이터에 저장되며, 쉽게 취득할 수 없는 키로 암호화된 데이터 보안 평균 암호화된 데이터는 AMI에 로그온 하면 telnet, curl, wget등에 접근할 수 있는 모든 사용자가 액세스 할 수 있습니다(암호화된 htp://169.254.169.254/1.0/user-data에 액세스 할 수 있는)암호화된 데이터를 해독하려는 시도는 무차별 대입 공격을 사용할 수 있습니다.안전한 장소의 AMI에 저장된 데이터 보안(암호화에 대한 추가 가치 없음)보다 높은 데이터는 운용을 위해서 데이터가 필요한 사용자 한명만 액세스 할 수 있습니다예:사용자가 소유할 파일:마스크 0600또는 0400을 가진 유저 공격자는 데이터에 접근하기 위해서 특정 사용자를 가장할 필요가 있습니다.사용자 직접 로그온 거부(인터랙티브 가장을 위해서 root을 통과할 필요가 있다) 같은 추가 보안 계층은 보안을 향상시킵니다.그러므로 AMI user-data에 관련된 모든 방법은 가장 안전하지 않습니다.머신(가장 약한 포인트)모든 사용자에게 접속하면 데이터가 파손되기 때문입니다.이는 S3자격 증명이 제한된 기간만 필요한 경우(즉, 배포 프로세스 중만), AWS에서 완료된 경우 user-data의 내용을 덮어쓰기 또는 삭제하도록 허용한 경우로 완화할 수 있습니다(이는 표시되지 않습니다.경우가 있습니다.)대안은 배포 프로세스가 완료하고 AWS에서 자격 증명이 무효가 된 뒤 가능한 경우 배포 프로세스 기간 중에 임시 S3자격 증명을 생성하는 것입니다.(user-data에서 이 같은 자격 증명 손상)., 이제 보안 위협에는 안 됩니다.위 내용이 적용되지 않거나(예:배포된 노드에 무기한에 필요한 S3자격증), 또 가능하지 않은 경우(예:배포용으로만 임시 S3자격 증명을 발행할 수 없다), 최선의 방법은 탄환을 깨고 다양한 노드에 대한 자격 증명을 scp 하는 것입니다.올바른 소유권과 권한을 가진 병렬.

각 인스턴스는 init 스크립트에 하드 코딩된 “secret-password”를 사용하여 ec2.zip을 디코딩하고 해독합니다. 작동하지만 제 접근법에는 두 가지 문제가 있습니다.zip-P’는 그다지 안전하지 않습니다.비밀번호는 인스턴스에 하드 코딩되어 있습니다(항상 ‘secret-password’). 방법은 여기에 설명된 것과 매우 비슷합니다.더 우아하고 허용되는 접근법이 있나요? gpg를 사용하여 자격 정보를 암호화하고 인스턴스에 개인 키를 저장하여 암호를 해독하는 것은 현재 검토 중인 접근법이지만 주의 사항을 알 수 없습니다. AWS 키쌍을 직접 사용할 수 있을까요? API의 매우 명확한 부분이 누락되었습니까?컴퓨터에 자격 정보를 저장할 수 있습니다(또는 전송, 사용, 삭제).보안 채널을 통해 자격 정보를 송신할 수 있으므로(예를 들어, 키 쌍과 같은 비대화형 인증과 함께 scp를 사용), 커스텀 암호화를 실행할 필요는 없습니다(키 파일에 대한 권한이 0400로 올바르게 설정되어 있는지 확인해 주세요. 시간, 예를 들어 마스터 파일에 대한 권한을 설정하고 scp-p 사용) 위의 내용으로 고객의 질문에 대한 답변을 할 수 없는 경우 re.설정이란 무엇이며 달성하고자 하는 것입니다. EC2 작업은 중앙 위치에서 여러 노드로 시작합니까? 여러 노드와 중앙 위치 사이에서 SSH를 사용할 수 있습니까? 등. 편집할 AMI를 파라미터화해 AMI를 인스턴스화하는 사람이 먼저 사용자 데이터(ec2-run-instances-fuser-data-file)를 자신의 AWS 키로 채우도록 요구한 적이 있습니까? 그런 다음 AMI는 http:/169.254.169.254/1.0/user-data에서 이러한 인스턴스별 파라미터를 동적으로 검색할 수 있습니다.업데이트자, 다음은 지금까지 논의된 다양한 접근 방식의 보안을 염두에 두고 비교한 것입니다.암호화되지 않은 AMIuser-data 데이터에 저장하면 데이터 보안이 낮은 일반 텍스트 데이터는 AMI에 로그온할 수 있으며 telnet, curl, wget 등에 접근할 수 있는 모든 사용자가 접근할 수 있습니다(일반 텍스트 http://169.254.254/1.0/user-data 접근 가능).프록시 요구 공격에 취약합니다(예: 공격자는 AMI에서 실행 중이거나 실행되지 않을 수 있는 Apache에게 일반 텍스트 http:/169.254.169.254/1.0/user-data를 가져와 전달하도록 요청합니다).AMI user-data 데이터에 저장되어 쉽게 취득할 수 있는 키로 암호화(또는 해독 가능)할 때 데이터 보안이 낮은 간단하게 취득할 수 있는 키(암호)에는 다음과 같은 것이 포함될 수 있습니다.ABI 내부 스크립트에 하드 코딩된 키(공격자가 ABI를 취득할 수 있는 곳) AMI 자체 스크립트에 하드 코딩된 키. 여기서 스크립트는 AMI에 로그온할 수 있는 모든 사용자가 읽을 수 있습니다.공개키 등과 같이 간단하게 취득할 수 있는 기타 정보 모든 개인키(공개키는 쉽게 취득할 수 있다)가 주어지면 1번 항목에서 식별된 동일한 문제가 적용됩니다.해독된 데이터는 AMI에 로그온할 수 있으며 telnet, curl, wget 등에 접근할 수 있는 모든 사용자가 접근할 수 있습니다(일반 텍스트 http:/169.254.254/1.0/user-data 접근 가능).당신은 프록시 요구 공격에 취약합니다.(예: 공격자는 AMI에서 실행 중이거나 실행되지 않을 수 있는 Apache에 암호화된 http:/169.254.169.254/1.0/user-data를 가져와 전달하도록 요청합니다. 키) AMI user-data 데이터에 저장되며 쉽게 얻을 수 없는 키로 암호화된 데이터 보안 평균 암호화된 데이터는 AMI에 로그온할 수 있으며, telnet, curl, wget 등에 접근할 수 있는 모든 사용자가 접근할 수 있습니다. (암호화된 http:/169.254.169.254/1.0/user-data에 접근할 수 있음) 암호화된 데이터를 해독하려는 시도는 무차별 대입 공격을 사용하여 수행할 수 있습니다.안전한 장소의 AMI에 저장되어 있는 데이터 보안(암호화에 대한 추가 가치 없음)보다 높은 데이터는 운영을 위해 데이터가 필요한 사용자 한 명만 접근할 수 있습니다.예: 사용자가 소유한 파일: 마스크 0600 또는 0400을 가진 사용자 공격자는 데이터에 액세스하기 위해 특정 사용자를 가장할 수 있어야 합니다.사용자 직접 로그온 거부(인터렉티브 가장을 위해 root을 통과해야 함)와 같은 추가 보안 계층은 보안을 향상시킵니다.따라서 AMIuser-data와 관련된 모든 방법은 가장 안전하지 않습니다. 머신(가장 약한 포인트)의 모든 사용자에게 액세스하면 데이터가 손상되기 때문입니다.이는 S3 자격 증명이 제한된 기간 동안에만 필요한 경우(즉 배포 프로세스 중에만 해당), AWS에서 완료된 경우, user-data의 내용을 덮어쓰거나 삭제하는 것을 허용한 경우에 완화할 수 있습니다(단, 이는 표시되지 않습니다. 경우가 있습니다.) 대안은 배포 프로세스가 완료되고 AWS에서 자격 증명이 비활성화된 후 가능한 경우 배포 프로세스 기간 동안 임시 S3 자격 증명을 생성하는 것입니다(user-data에서 이러한 자격 증명 손상). , 더 이상 보안에 위협이 되지 않습니다.위 내용이 적용되지 않거나(예: 배포된 노드에 무기한 필요한 S3 자격 증명) 또는 가능하지 않은 경우(예: 배포용으로만 임시 S3 자격 증명을 발급할 수 없음) 가장 좋은 방법은 총알을 깨고 다양한 노드에 대한 자격 증명을 scp하는 것입니다. 올바른 소유권과 권한을 가진 병렬.

EC2 인스턴스에 비밀을 안전하게 전달하는 다양한 방법과 각각의 장단점을 조사하는 기사를 작성했습니다.http://www.shlomoswidler.com/2009/08/how-to-keep-your-aws-credentials-on-ec2/

EC2 인스턴스에 비밀을 안전하게 전달하는 다양한 방법과 각각의 장단점을 조사하는 기사를 작성했습니다.http://www.shlomoswidler.com/2009/08/how-to-keep-your-aws-credentials-on-ec2/

최선의 방법은 인스턴스 프로파일을 사용하는 것입니다.기본적인 아이디어는 다음과 같습니다.인스턴스 프로파일 생성 새 IAM롤 생성 전에 생성한 롤에 정책을 할당합니다.예를 들어 다음과 같습니다.{“이름”:[{“시드”:”Stmt1369049349504″,”액션”:”sqs:”,”효과”:”허용”,”자원”:’}]}롤과 인스턴스 프로파일을 함께 연결합니다.새로운 EC2인스턴스의 기동시에 인스턴스 프로파일 이름을 제공한 사실을 확인하세요.모두 잘 기능하고 EC2인스턴스 내에서 AWS서비스에 접속하는 데 사용하는 라이브러리가 인스턴스 메타 데이터로 자격 정보 검색을 지원하면 코드로 AWS서비스를 사용할 수 있습니다.boto-user메일링 리스트에서 취득한 완전한 예:우선 IAM롤이 접근해야 할 서비스와 자원을 나타내JSON정책 문서를 작성할 필요가 있습니다.예를 들어 이 정책은 “my_bucket”버킷에 대한 모든 S3작업을 부여합니다.애플리케이션에 적절한 정책을 사용할 수 있습니다.

BUCKET_POLICY=”{“Statement”}: [{“Effect”:] 허용”, “액션”: [s3:*], 리소스: “[arn:aws:s3:my_discord”}]”

그런 다음 IAM에서 인스턴스 프로파일을 작성해야 합니다.import botoc = boto.connect_iam()_profile = c.create_myinstance_profile(‘)인스턴스 프로파일이 있는 경우 역할을 만들고 인스턴스 프로파일에 역할을 추가하며 정책을 역할과 연관시켜야 합니다.role = c.create_role(myrole’)c.add_role_to_profile(myinstanceprofile’, ‘myrole’)c.put_role_policy(myrole’, ‘マイポリシー’, BUCKET_POLICY)이제 인스턴스 부팅 시 해당 인스턴스 프로파일을 사용할 수 있습니다.ec2 = boto.connect_ec2vpnec2.run_vpnami-xxxx’, …, instance_profile_name=’myinstanceprofile’)ec2 = boto.connect_ec2vpnec2.run_vpnami-xxxx’, …, instance_profile_name=’myinstanceprofile’)ec2 = boto.connect_ec2vpnec2.run_vpnami-xxxx’, …, instance_profile_name=’myinstanceprofile’)더 이상 EC2인스턴스에 자격 증명을 제공할 필요는 없음을 지적하고 싶습니다.IAM을 사용하고 EC2인스턴스에 대한 역할을 생성할 수 있습니다.이런 역할에서는 EC2인스턴스가 예를 들어 특정 S3버킷에서 특정 오브젝트를 받을 수 있도록 하는 세분화된 정책을 설정할 수 있습니다.AWS문서에서 IAM의 역할에 대해서 자세히 알 수 있습니다.http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html더 이상 EC2 인스턴스에 자격 증명을 제공할 필요가 없음을 지적하고자 합니다. IAM을 사용하여 EC2 인스턴스에 대한 역할을 생성할 수 있습니다. 이러한 역할에서는 EC2 인스턴스가 예를 들어 특정 S3 버킷에서 특정 객체를 가져올 수 있도록 하는 세분화된 정책을 설정할 수 있습니다. AWS 문서에서 IAM의 역할에 대해 자세히 알 수 있습니다.http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html다른 사람이 이미 여기서 지적했듯이 IAM롤을 사용하고 EC2인스턴스에 대한 AWS자격을 보존할 필요는 없습니다.https://aws.amazon.com/blogs/security/a-safer-way-to-distribute-aws-credentials-to-ec2/. 예를 들면, 보안을 유지하려는 DB자격증이 있는 경우처럼 EC2인스턴스에 대한 비 AWS자격증을 안전하게 보존하기 위해서도 같은 방법을 사용할 수 있다고 덧붙이고 있습니다.비 aws자격 증명을 S3버킷에 저장하고 IAM롤을 사용하고 그 버킷에 접속합니다.이에 대한 자세한 정보는 https://aws.amazon.com/blogs/security/using-iam-roles-to-distribute-non-aws-credentials-to-your-ec2-instances/에서 입수할 수 있습니다.다른 사람들이 이미 여기서 지적했듯이 IAM 롤을 사용하여 EC2 인스턴스에 대한 AWS 자격을 저장할 필요가 없습니다.https://aws.amazon.com/blogs/security/a-safer-way-to-distribute-aws-credentials-to-ec2/ . 예를 들어 보안을 유지하려는 DB 자격 증명이 있는 경우처럼 EC2 인스턴스에 대한 비AWS 자격 증명을 안전하게 저장하기 위해서도 동일한 방법을 사용할 수 있다고 덧붙였습니다. 비aws 자격 증명을 S3 버킷에 저장하고 IAM 롤을 사용하여 해당 버킷에 액세스합니다.이에 대한 자세한 정보는 https://aws.amazon.com/blogs/security/using-iam-roles-to-distribute-non-aws-credentials-to-your-ec2-instances/ 에서 얻을 수 있습니다.

error: Content is protected !!