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

최종 업데이트 날짜: 2021년 11월 11일

다른 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-regionAWS 리전으로 대체합니다.

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

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

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

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

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

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

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Account2:role/ApplicationRole"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }
  ]
}

6.    다음과 유사하게 보안 정보를 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 엔터티에 연결된 권한을 편집합니다.