EC2에서 AWS다른 계정으로 권한을 할당 받아 실행할때는 아래와 같이 수행하면 된다.
1. AWS다른계정에 EC2가 있는 계정의 아이디를 이용하여 Policy를 만든다.
2. AWS다른계정에 Role을 만들어 Policy를 할당한다.(role의 ARN 저장)
3. IAM을 부여할 EC2가 있는 계정에 Role을 만든다.
role에 소스를 inline policy로 등록한다.
resource에는 다른계정에서 만든 role arn으로 수정한다.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/UpdateApp"
}
}
4. ec2에 해당 role을 수행할때에는 sts를 받아 임시키를 받아 등록하여 수행하면 끝
sts 받는 방법
aws sts assume-role --role-arn {다른계정에 만든 role의 arn} --role-session-name {session이름(아무값이나 넣어도 되는듯)}
aws sts assume-role --role-arn "arn:aws:iam::999999999999:role/UpdateApp" --role-session-name "David-ProdUpdate"
하면 아래와 같이 출력되고
{
"Credentials": {
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLE
CvSRyh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDy
EXAMPLE9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3Uuysg
sKdEXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLEsnf87e
NhyDHq6ikBQ==",
"Expiration": "2014-12-11T23:08:07Z",
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE"
}
}
아래와 같이 등록하면 해당 권한을 사용할수 있다.(window일 경우 export대신 set을 이용)
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_SESSION_TOKEN=AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLECvS
Ryh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDyEXA
MPLEKEY9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3UusKd
EXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLENhykxiHen
DHq6ikBQ==
참고 사이트
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html
2018년 3월 28일 수요일
2018년 3월 21일 수요일
IAM 사용자가 MFA 디바이스를 스스로 관리하도록 허용
IAM에서 User를 생성하고 Group에 Policy를 부여하여 관리한다.
IAM User에게 MFA를 사용하게 하려면 IAM관리할수 있는 Policy가 없기 때문에 관리자가 등록해줄수 밖에 없다.
이럴때는 아래와 같은 Policy를 생성하여 해당 Group에 부여하면 해당되는 사용자들이 스스로 MFA를 설정할 수 있다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:DeleteVirtualMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "AllowUsersToDeactivateTheirOwnVirtualMFADevice", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Effect": "Allow", "Action": [ "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ListUsers" ], "Resource": "*" } ] }
참고 : aws document
IAM User에게 MFA를 사용하게 하려면 IAM관리할수 있는 Policy가 없기 때문에 관리자가 등록해줄수 밖에 없다.
이럴때는 아래와 같은 Policy를 생성하여 해당 Group에 부여하면 해당되는 사용자들이 스스로 MFA를 설정할 수 있다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:ResyncMFADevice", "iam:DeleteVirtualMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ] }, { "Sid": "AllowUsersToDeactivateTheirOwnVirtualMFADevice", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": [ "arn:aws:iam::*:mfa/${aws:username}", "arn:aws:iam::*:user/${aws:username}" ], "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Effect": "Allow", "Action": [ "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ListUsers" ], "Resource": "*" } ] }
참고 : aws document
2018년 3월 7일 수요일
AWS WEB Console 외부에서 접속 안되게 가능하나요??
프로젝트를 진행하다보면 고객의 보안팀에서 회사 네트웍이 아닌 다른곳에서 AWS Console을 접근 못하도록 해달라는 요청이 올 수 있다.
어라 AWS가 Public인데 어떻게 접근을 못하게 막지?
결론은 AWS의 WEB Console로 접근을 못하게 막을 수는 없다.
하지만 IAM설정으로 로그인 하는 사용자에게 특정 아이피를 제외하고 아무것도 못하게 막을수 있다.
IAM에서 Create Policy를 하여 json형태에 아래와 같이 넣어주고 사용자 및 그룹에 policy를 추가하면 된다.
특정 IP 접근제어로 검색하면 아래와 같이 설정하라고 나온다.
다음 링크처럼...
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": {"NotIpAddress": {"aws:SourceIp": [ "
위에 대하여 설명하면
위에 NotInAddress에 고객의 NAT IP를 설정하면 외부에서는 로그인이 가능해서 권한이 없어 업무를 수행할 수 없다.
그런데 얼마전부터 CodeCommit이 접근이 안되는거다.
접근이 가능한 아이피 임에도 CodeCommit 버킷을 생성할 수 없고 접근도 안된다. 앗 머지 OTL
한 2~3일 이것도 해보고 저것도 해봤지만 안되서 AWS joonkim 님께 SOS~!
다행이 joonkim님이 찾아주셨다. ㅋㅋ
원인은 CodeCommit이 KMS를 이용하는데 KMS에 접근을 할 수 없어서 발생하는 사항 같다고 하셨고.
"혹시 NotAction에 kms를 넣으면 되지 않을까요?" 라고 ㅋㅋ
그래서 결론은 아래와 같이 설정하면 CodeCommit도 정상동작한다.
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "NotAction": ["kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:DescribeKey"
], "Resource": "*", "Condition": {"NotIpAddress": {"aws:SourceIp": [ "
어라 AWS가 Public인데 어떻게 접근을 못하게 막지?
결론은 AWS의 WEB Console로 접근을 못하게 막을 수는 없다.
하지만 IAM설정으로 로그인 하는 사용자에게 특정 아이피를 제외하고 아무것도 못하게 막을수 있다.
IAM에서 Create Policy를 하여 json형태에 아래와 같이 넣어주고 사용자 및 그룹에 policy를 추가하면 된다.
특정 IP 접근제어로 검색하면 아래와 같이 설정하라고 나온다.
다음 링크처럼...
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": {"NotIpAddress": {"aws:SourceIp": [ "
192.0.2.0/24
",
"203.0.113.0/24
"
]}}
}
}위에 대하여 설명하면
192.0.2.0/24
대역에 있는 아이피와 203.0.113.0/24
대역의 아이피만 접근해 !! 다른 아이피는 전부 Deny야 권한이 없어~!!위에 NotInAddress에 고객의 NAT IP를 설정하면 외부에서는 로그인이 가능해서 권한이 없어 업무를 수행할 수 없다.
그런데 얼마전부터 CodeCommit이 접근이 안되는거다.
접근이 가능한 아이피 임에도 CodeCommit 버킷을 생성할 수 없고 접근도 안된다. 앗 머지 OTL
한 2~3일 이것도 해보고 저것도 해봤지만 안되서 AWS joonkim 님께 SOS~!
다행이 joonkim님이 찾아주셨다. ㅋㅋ
원인은 CodeCommit이 KMS를 이용하는데 KMS에 접근을 할 수 없어서 발생하는 사항 같다고 하셨고.
"혹시 NotAction에 kms를 넣으면 되지 않을까요?" 라고 ㅋㅋ
그래서 결론은 아래와 같이 설정하면 CodeCommit도 정상동작한다.
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "NotAction": ["kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:DescribeKey"
], "Resource": "*", "Condition": {"NotIpAddress": {"aws:SourceIp": [ "
192.0.2.0/24
",
"203.0.113.0/24
"
]}}
}
}
피드 구독하기:
글 (Atom)
AWS Redis와 Tomcat Session Clustering
근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다. 오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다. 앞에서 작성했던 AWS DynamoDB를 이용하여 Sessi...

-
근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다. 오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다. 앞에서 작성했던 AWS DynamoDB를 이용하여 Sessi...
-
외부에서 AWS에 Virtual Private Network(VPC)에 있는 서버에 접속을 하려면 어떻게 해야 할까? AWS에서는 Public영역에 Bastion Server을 이용하여 점프 할 수 있도록 구성하는것을 권장한다. 아...
-
프로젝트를 진행하다보면 여러 AWS Account를 이용하여 서로 cross account 설정을 하여 동시에 사용한다. 여기서는 S3에 다른 계정에 S3 Bucket에 접근하는 방법을 알아보자. S3의 버킷 이름은 다른 어떤 리전에 있더라도 중...