

# 조직에 함수 액세스 권한 부여
<a name="permissions-function-organization"></a>

[AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 조직의 모든 계정에 권한을 부여하려면 `put-resource-policy`를 사용해 `aws:PrincipalOrgID` 조건 키로 전체 JSON 정책을 생성하는 것이 좋습니다.

**중요**  
`put-resource-policy`를 사용하면 리소스의 기존 리소스 기반 정책을 대신합니다. 리소스에 이미 `add-permission`으로 정의된 권한이 있는 경우, `put-resource-policy`가 해당 항목을 덮어씁니다. 변경 사항을 적용하기 전에 `get-resource-policy`를 사용해 기존 정책을 검색하세요.

## 전체 JSON 정책 사용(권장)
<a name="permissions-function-organization-json"></a>

다음 정책 예시는 조직 `o-a1b2c3d4e5f`의 모든 AWS 계정에 호출 액세스 권한을 부여합니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "org-access",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        }
    ]
}
```

정책을 이름이 `policy.json`인 파일에 저장하고 적용합니다.

```
aws lambda put-resource-policy \
  --resource-arn arn:aws:lambda:{{us-east-2}}:{{123456789012}}:function:{{my-function}} \
  --policy file://policy.json
```

전체 JSON 정책을 사용하면 조직 내 특정 계정에 대한 액세스를 거부할 수도 있습니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-org",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        },
        {
            "Sid": "deny-specific-account",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::999888777666:root"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:us-east-2:123456789012:function:my-function",
                "arn:aws:lambda:us-east-2:123456789012:function:my-function:*"
            ]
        }
    ]
}
```

## add-permission 사용
<a name="permissions-function-organization-add-permission"></a>

간단한 사용 사례의 경우, `add-permission`을 `principal-org-id` 옵션과 함께 사용할 수 있습니다. 다음 명령은 조직 `o-a1b2c3d4e5f`의 모든 사용자에게 호출 액세스 권한을 부여합니다.

```
aws lambda add-permission \
  --function-name my-function \
  --statement-id org-access \
  --action lambda:InvokeFunction \
  --principal * \
  --principal-org-id o-a1b2c3d4e5f
```

**참고**  
이 명령에서 `Principal`은 `*`입니다. 즉, `o-a1b2c3d4e5f` 조직의 모든 사용자에게 함수 호출 권한이 부여됩니다. AWS 계정 또는 역할을 `Principal`로 지정하면 해당 보안 주체만 함수 간접 호출 권한을 얻게 됩니다. 단, 보안 주체가 `o-a1b2c3d4e5f` 조직에도 속하는 경우에만 그렇습니다.

자세한 내용은 **IAM 사용자 설명서의 [aws:PrincipalOrgID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 섹션을 참조하세요.