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

최종 업데이트 날짜: 2020년 10월 14일

다른 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인 보안은 AWS KMS 키 DevSecretKMS를 사용하여 암호화됩니다. 그런 다음, 보안은 Dev_Account와 공유됩니다.

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

해결 방법

1.    보안이 없는 경우 기본 보안 정보 생성 지침을 따릅니다. 비밀에 대한 KMS 키 ID 파라미터에 Amazon 리소스 이름(ARN)을 지정해야 합니다.

2.    별칭을 사용하는 기존 보안 암호가 있는 경우 보안 암호 수정 지침을 따릅니다. 비밀에 대해 KMS 키 ID 파라미터에서 KMS 키 ARN을 지정해야 합니다.

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

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

참고: your-region을 해당 AWS 리전으로 대체합니다.

{<br>    "Version": "2012-10-17",<br>    "Statement": [<br>        {<br>            "Sid": "AllowGetSecretValue",<br>            "Effect": "Allow",<br>            "Action": [<br>                "secretsmanager:GetSecretValue"<br>            ],<br>            "Resource": [<br>                "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"<br>            ]<br>        },<br>        {<br>            "Sid": "AllowKMSDecrypt",<br>            "Effect": "Allow",<br>            "Action": [<br>                "kms:Decrypt"<br>            ],<br>            "Resource": [<br>                "arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"<br>            ]<br>        }<br>    ]<br>}

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

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

참고: your-region을 해당 AWS 리전으로 대체합니다.

{<br>    "Sid": "AllowUseOfTheKey",<br>    "Effect": "Allow",<br>    "Principal": {<br>        "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"<br>    },<br>    "Action": [<br>        "kms:Decrypt"<br>    ],<br>    "Resource": "*",<br>    "Condition": {<br>        "StringEquals": {<br>            "kms:ViaService": "secretsmanager.your-region.amazonaws.com"<br>        },<br>        "StringLike": {<br>            "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"<br>        }<br>    }<br>}

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

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

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

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

참고: 5단계의 정책에는 AWSCurrent 버전 단계에 대한 참조가 명시적으로 필요합니다. 다음과 유사한 SecretsUser가 암호를 검색할 때마다 이 암호를 명시적으로 요구해야 합니다.

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT

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