AWS 계정 간에 AWS Secrets Manager 보안을 공유하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 17일

다른 AWS 계정에서 내 AWS Secrets Manager 보안을 공유하고 싶습니다. 어떻게 해야 합니까?  

간략한 설명

이 예제에서 Security_Account 사용자는 사용자 자격 증명을 사용하고, Dev_Account 사용자는 개발자에 의해 사용됩니다. Dev_Account의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행 중인 AWS Identity and Access Management(IAM) 사용자 또는 애플리케이션은 Security_Account 사용자 계정에서 보안을 검색합니다. 보안에 대해 리소스 기반 정책을 사용할 수 있습니다. 이를 통해 보안에 권한 정책을 연결할 수 있습니다. 이 정책을 사용하면 Dev_Account의 IAM 엔터티에서 Security_Account의 보안에 액세스할 수 있습니다.

Security_Account에서 이름이 DevSecret인 보안은 CMK(고객 마스터 키) DevSecretCMK를 사용하여 암호화됩니다. 그런 다음, 보안은 Dev_Account와 공유됩니다.

참고: 계정의 CMK 기본 키는 사용할 수 없습니다. CMK 기본 키는 AWS Key Management Service(KMS)에 통합된 AWS 서비스에서 자동으로 생성, 관리 및 사용됩니다. CMK 기본 키는 AWS 계정 및 리전에 고유합니다. AWS 관리형 CMK를 생성하는 서비스만 해당 기본 키를 사용할 수 있습니다. 자세한 내용은 고객 마스터 키를 참조하십시오.

해결 방법

중요: 시작하기 전에 AWS CLI(명령줄 인터페이스)를 설치구성해야 합니다.

1.    보안이 없는 경우 기본 보안 암호 생성 지침을 따릅니다. --kms-key-id 파라미터에서 KMS CMK ARN을 지정해야 합니다.

2.    별칭을 사용하는 기존 보안이 있는 경우 보안 암호 수정 지침을 따릅니다. --kms-key-id 파라미터에서 KMS CMK ARN을 지정해야 합니다.

참고: 다른 AWS 계정의 보안에 액세스하려면 전체 KMS 키 ARN을 사용해야 합니다.

3.    다음과 비슷하게 IAM 자격 증명에 권한을 연결합니다.

참고: your-regionAWS 리전으로 대체합니다.

{
      "Version" : "2012-10-17",
      "Statement" : [
        {
          "Effect": "Allow",
          "Action": "secretsmanager:GetSecretValue",
          "Resource": " arn:aws:secretsmanager:us-west-2:Security_Account:secret:DevSecret"
        },
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "arn:aws:kms:your-region:Security_Account:key/DevSecretCMK"
        }
      ]
}

Dev_Account의 IAM 사용자 SecretsUser에서 보안을 검색합니다. SecretsUser에는 secretsmanager:GetSecretValue에 대한 권한이 필요합니다. SecretsUser에는 AWS decrypt 권한도 필요합니다. DevSecret은 DevSecretKey를 사용하여 암호화되기 때문입니다.

4.    CMK의 키 정책에 권한을 부여합니다. Secrets Manager는 기본적으로 보안을 암호화합니다. 이러한 보안을 검색하는 자격 증명에는 암호 해독 권한이 필요합니다. DevSecret는 DevSecretCMK를 사용하여 암호화되므로 다음 권한을 추가하여 키 정책을 업데이트해야 합니다.

{
       "Sid": "AllowUseOfTheKey",
       "Effect": "Allow",
       "Principal": 
               {"AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"},
       "Action": [
       "kms:Decrypt",
       "kms:DescribeKey"
        ],
       "Resource": "arn:aws:kms:your-region:Security_Account:key/DevSecretCMK"
}

이 정책은 SecretsUser에 DevSecretCMK를 사용할 권한을 부여합니다. 또한 이 정책은 DevSecretCMK에서 decrypte 및 describe-key 명령을 사용하는 기능도 SecretsUser에 부여합니다.

5.    IAM 엔터티에서 보안에 액세스하는 권한을 허용합니다. Security_Account의 경우 SecretsUser에 대해 DevSecret을 검색할 권한을 부여하는 리소스 기반 정책을 연결합니다. -ResourcePolicySecret.json 파일에 다음 정책을 복사하여 권한을 부여할 수 있습니다.

참고: 현재 이 리소스 기반 정책은 AWS CLI 또는 AWS SDK를 사용하여 보안에만 연결할 수 있습니다.

{
  "Version" : "2012-10-17",
  "Statement" : [
    {
      "Effect": "Allow",
       "Principal": {"AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"},
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*",
      "Condition": {"ForAnyValue:StringEquals": {"secretsmanager:VersionStage": "AWSCURRENT"}}
    }
  ]
}

6.    DevSecret에 리소스 기반 정책을 연결합니다.

$aws secretsmanager put-resource-policy --secret-id DevSecret --resource-policy file://ResourcePolicySecret.json

7.    SecretsUser로 보안을 검색합니다.

$aws secretsmanager get-secret-value --secret-id 
arn:aws:secretsmanager:us-west-2:Security_Account:secret:DevSecret 
--version-stage AWSCURRENT

참고: 모든 IAM 엔터티에 대해 이 지침을 사용할 수 있습니다. 예를 들어, Amazon EC2 인스턴스 프로파일 또는 역할의 경우 리소스 정책에서 Amazon 리소스 이름(ARN)을 대체하거나 추가하고 IAM 엔터티에 연결된 권한을 편집합니다.